ارتباط کانال جاری به یک یا چند کانال دیگر
Dial(technology/resource,timeout,options,URL)
Dial(technology1/resource1[&tech2/resource2[&…]],timeout,options,URL)
به نظر من این دستور و دستور بعدی (original) را چندین بار بخوانید. این ۲ از دستورات مهم Dialplan می باشد که با آنها کار های جالب و بسیار پر کاربردی می توانید انجام بدهید. دستور Dial برای اتصال کانال جاری به یک یا چند کانال دیگر استفاده می شود مثلا وقتی می خواهید تماس جاری را به یک داخلی دیگر، برنامه دیگر و یا هر بخش دیگری متصل نمایید. دستور Dial هر نوع کانالی را قبول می کند کانال هایی همانند SIP, IAX2, H323, MGCP, DAHDI, ZAP, LOCAL
پارامتر ها:
Technology نوع کانال شما ست و resource نام کانال شما، timeout مدت زمانی که Asterisk از زمان سعی برای برقراری تماس در نظر می گیرد و اگر در این بازه زمانی تماس برقرار نشود برنامه را متوقف خواهد کرد، options یکسری امکانات که Asterisk برای تماس در اختیار شما قرار می دهد که در ادامه با برخی از آنها آشنا خواهیم شد. URL رو هم توضیح نمی دم ! چون بسیار به ندرت مورد استفاده قرار می گیرد فقط بدانید می توانید یک URL را به Endpoint ارسال نمایید، برخی Endpoint ها این امکان را دارند که ار این URL ها استفاده کنند.
$1v مثال۱:
انتقال تماس جاری به داخلی ۱۰۱ از نوع SIP
[dial-test1]
exten => 123,1,Dial(SIP/101)
$1v مثال۲:
انتقال تماس جاری به داخلی ۲۰۱ از نوع IAX
[dial-test2]
exten => 123,1,Dial(IAX2/۲۰۱)
$1v مثال۳:
انتقال تماس جاری به کارت شهری و گرفتن شماره ۹۹۱۲۲۱۰
[dial-test3]
exten => 123,1,Dial(DAHDI/g0/9912210)
$1v مثال۴:
انتقال تماس جاری به پورت یک کارت ، این مورد در حالتی استفاده می شود که کارت شما دارای پورت های FXS باشد.
[dial-test4]
exten => 123,1,Dial(DAHDI/1)
نکته: لازم بذکرست با استفاده از علامت & می توانید همزمان با مقاصد مختلف تماس حاصل کنید. در مثال زیر با شماره گیری ۱۰۰ تمامی Destination به طور همزمان وبا استراتژی ringallشروع به زنگ خوردن می کنند، در این حالت تماس ورودی با اولین مقصدی channel را answer کرده است bridgeمی شود وفورا زنگ خوردن بقیه داخلی ها متوقف می گردد.
$1v مثال۵:
[dial-test5]
exten => 100,1,Dial(DAHDI/1&SIP/4004$DAHDI/g0/97677777)
اما استفاده از پارامتر شوم یعنی Dial Option می تواند کار با این دستور را جذاب تر نماید در ادامه به بررسی برخی Option های پر کاربرد اشاره می کنیم.
m[class] با استفاده از این پارامتر تماس گیرنده از ابتدای شماره گیری به جای شنیدن صدای بوق، music on hold را می شنود. شما می توانید با تعریف کلاس در musiconhold.conf نوع موزیکی که پخش می شود را نیز تعیین نمایید اما اگر نام کلاسی را جلوی m ننویسید از کلاس پیش فرض Elastix برای پخش موزیک استفاده می کند.
[dial-test5]
exten => 201,1,Dial(SIP/201,10,m)
same => n,Playback(vm-nobodyavail)
same => n,Hangup()
L(x[:y][:z]) برای محدود کردن مدت زمان مکالمه تماس گیرنده از این پارامتر استفاده می شود.
X مدت زمان مجاز برای مکالمه است و بعد از گذشت این مدت زمان تماس قطع می گردد. واحد آن برحسب میلی ثانیه، Y مدت زمان باقی مانده به پایان مکالمه است که به منظور اعلام هشدار قطع از آن استفاده می گردد. واحد آن نیز برحسب میلی ثانیه است و Z نیز پیغام هشدار قطع هر Z میلی ثانیه قبل از قطع نماس تکرار می شود .
[dial-test6]
exten => 123,1,Answer
exten => 123,n,Dial(sip/201,30,L(30000[:10000][:4000]))
exten => 123,n,Hangup
اما جالب تر اینجاست بدانید امکانات پارامتر L فقط همین نیست ! با یکسری متغییر ها می توانید در آن تغییرات ایجاد نمایید. نحوه قرار دادن مقادیر در متغییر را در بخش بعدی توضیح خواهم داد ولی به طور کلی بدانید با دستور set می توان یک متغییر را مقدار دهی کرد، اما در زیر بست متغییر هایی را می بینید که بر روی پارامتر L تاثیر می گزارند.
LIMIT_PLAYAUDIO_CALLER=yes|no
آیا کسی که دریافت کننده تماس است (Calling Party) پیام اخطار را بشنود یا خیر.
LIMIT_PLAYAUDIO_CALLEE=yes|no
آیا کسی که تماس گیرنده است (called party) پیام اخطار را بشنود یا خیر.
LIMIT_TIMEOUT_FILE=filename
نام فایل پیامی که پس از اتمام مدت زمان مکالمه باید پخش گردد.
LIMIT_CONNECT_FILE=filename
نام فایل پیامی که هنگام برقراری مکالمه باید پخش گردد.
LIMIT_WARNING_FILE=filename
نام فایل پیامی که به عنوان اخطار باید پخش گردد، البته در صورتی که پارمتر y تعیین شده باشد.
t این امکان را به کسی که تماس را دریافت کرده (Called Party) می دهد تا با زدن کلید # بتواند انتقال (Blind Transfer) انجام دهد. وقتی شما # را در Dial options قرار می دهید Asterisk موظف می شود تا هنگام مکالمه منتظر در یافت # بماند و در صورت ارسال عکس العمل نشان دهد.
$۱ü T این امکان را به کسی که تماس را برقرار کرده (Calling Party) می دهد تا با زدن کلید # بتواند انتقال (Blind Transfer) انجام دهد. وقتی شما # را در Dial options قرار می دهید Asterisk موظف می شود تا هنگام مکالمه منتظر در یافت # بماند و در صورت ارسال عکس العمل نشان دهد.
h این امکان را به کسی که تماس را دریافت کرده (Called Party) می دهد تا با زدن کلید * بتواند تماس را قطع کند.
H این امکان را به کسی که تماس را برقرار کرده (Calling Party) می دهد تا با زدن کلید * بتواند تماس را قطع کند.
D([called][:calling]) با استفاده از این Option می توان پس از برقراری تماس یک DTMF را به سمت دریافت کننده تماس (called party) و یا برقرار کننده تماس (calling party) ویا هر دو آنها ارسال نمود.
نکته: پس از انجام دستور Dial و با توجه به نتیجه آن در متغییر {DIALSTATUS}$ قرار خواهد گرفت نتیجه تماس می تواند یکی از موارد زیر باشد.
CHANUNAVAIL : Channel unavailable
کانال مقصد در دسترس نیست.
BUSY : Returned busy
کانال مقصد مشغول می باشد.
NOANSWER : No Answer (i.e SIP 480 or 604 response)
کانال مقصد پاسخگو نیست.
ANSWER : Call was answered
تماس پاسخ داده شده است.
CANCEL : Call attempt cancelled
انصراف از برقرار تماس، این برای وقتی است که در حال برقرار تماس، تماس گیرنده گوشی را بگذارد.
DONTCALL : Privacy manager don’t call
ممکن است بر اساس دسترسی های تعریف شده تماس با مقصد امکان پذیر نباشد.
TORTURE : Privacy manager torture menu
CONGESTION : Means Congestion, or anything else (some other error setting up the call)
وقتی که تماس شما به هر دلیلی به مشکل بر می خورد.