شما می توانید با ارسال ایمیل خود ، بصورت رایگان مشترک شده و از بروزسانی مطلع شوید.

ایمیل خود را وارد کنید:

یکی از نیازمندی های اصلی در سیستم های تلفنی تغییر فایل های صوتی مربوط به اعلان های سیستم می باشد. همچنین ممکن است نیاز باشد تا در منوی صوتی از چند زبان مختلف پشتیبانی کنید. برای تغییر prompt های سیستم تلفنی استریسک و همچنین تعریف زبان های مختلف، روش های گوناگونی وجود دارد که ساده [...]

یکی از مباحثی که در راه اندازی شبکه های VoIP رایج است، برقراری ارتباط میان دو سرور تلفنی می باشد. به عنوان مثال دو سرور تلفنی را در نظر بگیرید که در دو مکان مجزا در حال سرویس دهی به کاربران خود می باشند و لازم است تا کاربران این دو سیستم نیز بتوانند با [...]

در FreePBX سه روش جهت راه اندازی فکس وجود دارد: ماژول تجاری Fax Pro، استفاده از اپلیکیشن های استریسک و سرور فکس Hylafax. هر یک از این روش ها ویژگی هایی دارند؛ ماژول Fax Pro قابلیت ارسال و دریافت فکس را برای کاربران از طریق UCP فراهم می کند. یعنی کاربران با ورود به محیط [...]

یکی از نیازمندی های اصلی در یک سیستم تلفنی، امکان ارسال و دریافت فکس می باشد. البته امروزه با توسعه بیش از پیش ابزار های ارتباطی همچون ایمیل، روش های سنتی مانند فکس کمتر مورد استفاده قرار می گیرند؛ ولی هنوز کاملا جایگزین نشده اند. بنابراین با بکارگیری سیستم های تلفنی مبتنی بر VoIP نیز [...]

صندوق صوتی از نیازمندی های مهم IP-PBX ها بوده و می تواند میزان سرویس دهی و همچنین در دسترس بودن را برای کاربران افزایش دهد. علاوه بر این، امکان ارسال پیام های صندوق صوتی از طریق ایمیل، این قابلیت را کاربردی تر می نماید. این قابلیت را در FreePBX می توانید به سادگی برای کابران [...]

در مقاله های قبلی نحوه ضبط پیام صوتی در  ماژول System Recording و بکارگیری آن در ساخت منوی صوتی شرح داده شد. علاوه بر این قابلیت، در برخی موارد نیاز است تا برای تماس گیرنده یک پیام صوتی خاص پخش شود و سپس به مقصد دیگری هدایت شود. به عنوان مثال اطلاع رسانی درباره یک [...]

یکی از مشکلاتی که در استریسک با آن مواجه هستیم و تقریبا یک مشکل غیر قابل حل می باشد عدم نمایش صحیح شماره تماس گیرنده در زمان انتقال تماس است . به این ترتیب که داخلی A یک تماس با داخلی B میگیرد کالر آی دی که برای داخلی B نمایش داده میشود مشخصات تلفن [...]

OpenVox  به عنوان یکی از پیشگامان تولید محصولات تلفنی سخت افزاری و نرم افزاری، توسط متخصصان فنی و باتجربه خود در طراحی، محصولاتی را ارائه کرده است که  قابلیت استفاده در اغلب پروژه های تلفنی متن باز از جمله استریسک را دارند. یکی از این محصولات کارت دیجیتال D110P  تک پورت E1 است که در [...]

۱٫ مقدمه تا ۳۰ سال پیش واژه ای به نام اینترنت وجود نداشت و ارتباط محاوره ای تنها از طریق شبکه عمومی تلفن(PSTN)  امکان پذیر بود همچنین ارسال داده به ویژه در فواصل دور بسیار هزینه بر بود اما در طی چند سال گذشته شاهد پدیده هایی جذاب بوده ایم؛ گسترش رایانه های شخصی، فناوری [...]

امروزه شبکه های تلفنی مبتنی بر IP، از طرف مدیران شبکه و IT، شناخته شده اند و در مزایا و امکاناتی که فراهم می کنند، ابهامی وجود ندارد؛ اما راه اندازی و مباحث فنی این تکنولوژی و کاربردی کردن آن، همچنان مدیران را در تصمیم گیری و انخاب بهترین راه حل به چالش می کشد. [...]

اعلام کد اپراتوری به همراه سیستم نظر سنجی

یکی از قابلیت های موجود در Asterisk نوشتن AGI با استفاده از زبانهایی همانند: php, perl, Python و … می‌باشد. شما می‌توانید با کمک گیری از این زبان ها، مدیریت تماس را از Dialplan گرفته و با توجه به پردازشی که می‌خواهید روی داده‌ها داشته باشید، خیلی سریع‌تر هدف خود را پیاده سازی کنید.

راه اندازی سیستم نظر سنجی با استفاده از AGI:

در این سناریو می‌خواهیم یک سیستم نظر سنجی بر روی Elastix پیاده سازی کنیم به این صورت که شخص بعد از اتمام تماس خود با اپراتور می‌تواند منتظر بماند تا وارد منوی دیگری شده و در آنجا نظر خود را نسبت به پاسخ گویی اپراتور اعلام کند.

  • ابتدا یک صف بر روی الستیکس خود تعریف کرده.
  • برای اینکه بتوانیم تنظیماتی را که از طریق محیط وب الستیکس قابل تنظیم شدن نیستند را خود اضافه کنیم باید مراحل زیر را انجام دهیم.
    • ابتدا فایل etc/asterisk/queues_additional.conf/ را باز کرده و تمامی تنظیمات مربوط به صف خود را در فایل etc/asterisk/queues_custom.conf کپی کنید با این کار شما می توانید تنظیمات دلخواه خود را بر روی صف اعمال کنید.

تمامی فایل‌های elastix که در نام آنها additional وجود دارد مانند queues_additional.conf بعد از اعمال تغییرات در محیط وب تنظیمات جدید بر روی آنها نوشته می‌شود به همین دلیل اضافه کردن پارامترهای خود در این فایل بعد از انجام تغییرات جدید از بین خواهند رفت. برای همین باید تنظیمات خود را در فایلهایی که custom در آنها وجود دارد کپی کنید و سپس تغییرات خود را بر روی آن اعمال کنید.

برای دریافت اطلاعات بیشتر از لینک زیر استفاده کنید.

http://www.freepbx.org/configuration_files

  • سپس  در فایل etc/asterisk/queues_custom.conf/ مقدار setinterfacevar را برابر با yes قرار دهید با این کار قبل از تماس با اپراتور متغیر های زیر تعریف خواهند شد.

MEMBERINTERFACE, MEMBERNAME, MEMBERCALLS,  …

در واقع با داشتن این متغیر ها می‌توانیم تماس گیرنده را از داخلی اپراتور مطلع ساخت و قبل تماس شماره داخلی را برای تماس گیرنده پخش کرد.

  • تتظیمات مربوط به صف خود را می‌توانید با توجه به نیاز خود تغییر دهید در زیر یک نمونه ساده تهیه شده است

[۱۰۰۰]
announce-frequency=0
announce-holdtime=no
announce-position=no
autofill=no
eventmemberstatus=no
eventwhencalled=no
joinempty=yes
leavewhenempty=no
maxlen=0
periodic-announce-frequency=0
queue-callswaiting=silence/1
queue-thereare=silence/1
queue-youarenext=silence/1
reportholdtime=no
retry=5
ringinuse=yes
servicelevel=60
strategy=ringall
timeout=15
weight=0
wrapuptime=0
member=Local/100@from-queue/n,0,100,SIP/100
member=Local/200@from-queue/n,0,200,SIP/200
; add this field for getting MEMBERINTERFACE variable and others
setinterfacevar = yes

  •  سپس فایل etc/asterisk/extensions_additional.conf/ را باز کنید و context مربوط به صف خود را پیدا کرده و آن را در فایل etc/asterisk/extensions_override_elastix.conf/ کپی کنید و تغییرات زیر را که با قلم تو پر نوشته شده را اضافه کنید.

[ext-queues]
include => ext-queues-custom
exten => 1000,1,Macro(user-callerid,)
exten => 1000,n,Answer
exten => 1000,n,Set(__BLKVM_OVERRIDE=BLKVM/${EXTEN}/${CHANNEL})
exten => 1000,n,Set(__BLKVM_BASE=${EXTEN})
exten => 1000,n,Set(DB(${BLKVM_OVERRIDE})=TRUE)
exten => 1000,n,ExecIf($["${REGEX("(M[(]auto-blkvm[)])” ${DIAL_OPTIONS})}” != “1″]?Set(_DIAL_OPTIONS=${DIAL_OPTIONS}M(auto-blkvm)))
exten => 1000,n,Set(__NODEST=${EXTEN})
exten => 1000,n,Set(MONITOR_FILENAME=/var/spool/asterisk/monitor/q${EXTEN}-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${UNIQUEID})
;exten => 1000,n,Queue(1000,t,,) –> this is default “notice the comment at the beginning”
exten => 1000,n,Queue(1000,c,,,,queue.py) ; change some Arguments
exten => 1000,n,AGI(voting.py) ; and finally add this
exten => 1000,n,Noop(Deleting: ${BLKVM_OVERRIDE} ${DB_DELETE(${BLKVM_OVERRIDE})})
exten => 1000,n,Set(__NODEST=)
exten => 1000,n,Goto()
exten => 1000*,1,Macro(agent-add,1000,)
exten => 1000**,1,Macro(agent-del,1000)
exten => *451000,1,Set(QUEUENO=1000)
exten => *451000,n,Goto(app-queue-toggle,s,start)
exten => h,1,Macro(hangupcall,)

option c باعث می‌شود تا بعد از قطع کردن تماس توسط اپراتور، تماس گیرنده به کار خود ادامه داده و دستور های بعدی در Dialplan اجرا  شوند(در واقع exten h  در context  شما در نظر گرفته نمی‌شود).

queue.py نیز نام اسکریپتی است که به محض اتصال تماس با اپراتور اجرا خواهد شد.

voting.py نیز نام اسکریپتی است که بعد از قطع تماس توسط اپراتور اجرا خواهد شد.

  •  در مسیر var/lib/asterisk/agi-bin/ فایل queue.py را ایجاد کرده و به آن دسترسی اجرا شدن را بدهید.
chmod +x queue.py

این اسکریپت agi می‌تواند با هر زبان برنامه نویسی دیگری نوشته شود

محتویات فایل queue.py :

#!/usr/bin/env python

from asterisk import agi

agi = agi.AGI()

agi.answer()
member=agi.get_variable("MEMBERINTERFACE")

if member:
    agi.verbose("talk to -> %s" % member)
    if '@' in member:
        num = int(member.split("/")[1].split('@')[0])
        agi.appexec('Playback', 'the-operator')
        agi.say_number(num)
    else:
        num = int(member.split("/")[1])
        agi.appexec('Playback', 'the-operator')
        agi.say_number(num)

برای استفاده از این اسکریپت باید pyst را بر روی سیستم خود داشته باشید.

http://sourceforge.net/projects/pyst/

 در فایل بالا به محض برقراری ارتباط با اپراتور شماره اپراتور با تماس گیرنده اعلام می‌شود.

  • حال برای سیستم نظر سنجی فایل voting.py را با دسترسی اجرا ایجاد کرده و محتویات زیر را درون آن بگذارید توجه داشته باشید این اسکریپت بعد از قطع تماس توسط اپراتور اجرا می‌شود.

البته قبل از این کار یک database برای سیستم نظر سنجی خود ایجاد و یک table ساده همانند زیر را در آن ایجاد کنید

CREATE TABLE IF NOT EXISTS `vote` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `vote` enum('satisfied','unsatisfied') NOT NULL,
  `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;

محتویات فایل voting.py

#!/usr/bin/python

import MySQLdb
from asterisk import *

a = agi.AGI()

# Read(variable[,filename[&filename2[&...]][,maxdigits[,options[,attempts[,timeout]]]]])
a.appexec('Read', options='vote_variable,please-enter-your-vote, 1,,,10')
vote = int(a.get_variable('vote_variable'))

if vote == 1:
    vote_str = 'satisfied'
elif vote == 2:
    vote_str = 'unsatisfied'
else:
    vote_str = 'not valid'

a.verbose(vote_str)

if vote_str != 'not valid':
        con = MySQLdb.connect(host='localhost', db='voting', user='root', passwd='root')
        cur1 = con.cursor()
        cur1.execute('insert into vote (vote) value (%s)'% vote)

 

پایان

 

 

 

۴ دیدگاه نوشته شده است! می توانید دیدگاه خود را بنویسید

  1. بابک می‌گه:

    سلام مطلبتون خیلی عالیه اما من چند مشکل دارم مشکل من کد نویسی با لینوکس نیست اما در قسمت agi نویسی دقیقا نمیدونم باید چه کاری انجام بدم و چطوری بنویسم و حتی این کد PHP رو نمیدنم با چه برنامه ای بنویسم مثلا Dreamweaver برای انجام این کار مناسب هست؟
    و این که دسترسی برای فایل رو چگونه باید ایجاد کنم این کد که نویشتین برای دسترسی کافیه که در استریسک بزنم؟؟؟؟؟چون زمانی که میزنم اجرا نمیشه ممنون میشم کمی واضح تر توضیح بدین.

  2. احسان می‌گه:

    میشه نحوه نصب pyst رو هم بزارین؟
    من هر کاری کردم نتونستم فایل هاتون رو اجرا کنم.
    ممنون از سایت خوبتون.

  3. محمد می‌گه:

    صدا ها بعد از استفاده از اینAGI در فایل ظبط شده سینک (sync) نیستند یعنی فایل مکالمه ضبط شده با mixmon اپراتور و مشتری اختلاف دارند.

  4. بابک بیات می‌گه:

    با سلام و تشکر فراوان از اشتراک مطالب ارزشمندتون من چندتا مشکل دارم که اگر پاسخ بفرمائید ممنون میشم.
    ۱- لطفا طریقه ایجاد فایلهای queue.py و voting.py همچنین نصبpyst روی سیستم و ایجاد دیتا بیس را با تفصیل بیشتری توضیح بفرمائید ممنون میشم.

دیدگاه خود را به ما بگویید.