کانال های محلی در استریسک ( Local Channels in Asterisk )

کانال های محلی در استریسک ( Local Channels in Asterisk ) 

چطور می تونم DialPlan ای تعریف کنم که یک برنامه جانبی را همزمان با dial  کردن یک شماره اجرا کنم ؟

چطور می تونم DialPlan ای طراحی کنم که داخلی شماره 2 بعد از 10 ثانیه شروع به زنگ خوردن کنه در حالی که داخلی شماره 1 هنوز داره زنگ می خوره ؟

در یک پروژه نیاز بود تا کنترل برنامه ای که event های Asterisk را با استفاده از واسط AMI ( Asterisk Manager Interface  ) مانیتور می کرد را به DialPlan منتقل کرد تا از آنجا بتونم اسکریپت AGI  )َAsterisk Gateway Interface  ) مورد نظرم در دایل پلن  را اجرا کنم . با این تکنیک میشد از قدرت AGI در برنامه هایی که از AMI برای کنترل Asterisk استفاده  می کنند ، بهره برد . شاید یک مثال مطلب را روشن تر کنه .

شما یک دکمه را روی صفحه وبسایتون فرض کنید که وقتی اونو فشار می دید با شماره ای که جلوی آن نوشته شده تماس برقرار می کنه . این کارو میشه به راحتی با استفاده از AMI انجام داد ولی مثلا کنترل اینکه اگر اشغال بود چه کاری انچام شود را میشه با سپردن کنترل برنامه به DialPlan خود Asterisk با سادگی خیلی بیشتری انجام داد. انجام این عملیات با بهره گیری از قابلیت LocalChannels در Asterisk امکان پذیر است . در این مطلب ابتدا دو مثال ساده از به کارگیری LocalChannel ها در نوشتن DialPlan های حرفه ای را بیان می کنیم و بعد یک مثال از استفاده از LocalChannel ها در برقراری ارتباط بین AGI و AMI

 

چطور می تونم DialPlan ای تعریف کنم که یک برنامه جانبی را همزمان با dial  کردن یک شماره اجرا کنم ؟

[default]
exten => 1234,1,Dial(SIP/100/followme@default)
exten => followme,1,FollowMe(default)

پاسخ : Dial می تونه چندین پارامتر بگیره که در این مثال ما به طور همزمان هم  داخلی شماره 100 و هم بخشی از DialPlan که در واقع فرستادن به سوی FollowMe است را به صورت همزمان انجام میده .

چطور می تونم DialPlan ای طراحی کنم که داخلی شماره 2 بعد از 10 ثانیه شروع به زنگ خوردن کنه در صورتی که داخلی شماره 1 هنوز داره زنگ می خوره ؟

[default]
exten => 1234,1,Dial(SIP/phone1&Local/call_phone2@default)
exten => call_phone2,1,Wait(10)
exten => call_phone2,n,Dial(SIP/phone2
)

و بالاخره سپردن کنترل برنامه از AMI به DialPlan استریسک و در صورت نیاز اجرای اسکریپت AGI مورد نظر :

برای این کار از تابع Originate استفاده می کنیم ولی بجای Dial کردن یک شماره یا داخلی یک LocalChannel را Dial می کنیم و کنترل را به DialPlan در Asterisk پاس می دیم .

OriginateAction dial = new OriginateAction();
dial.setChannel("Local/DIAL@my_context");
dial.setContext("my_context");
dial.setExten("ANSWERED");
dial.setPriority(1);
dial.setAsync(true);
dial.setCallerId("5555551212");
dial.setVariable("dial_string","SIP/+15555551213@myprovider.com");

که دایل پلن می تونه یک AGI را اجرا کنه و با توجه به وضعیت تماس تصمیم گیری کنه

[my_context]

exten => DIAL,1,Verbose(1,About to perform outdial)
exten => DIAL,n,Dial(${dial_string},30)
exten => DIAL,n,Agi(agi://127.0.0.1/MyAGI.agi?dial_result=${DIALSTATUS})
exten => DIAL,n,Hangup()

exten => ANSWERED,1,Answer()
exten => ANSWERED,n,Agi(agi://127.0.0.1/MyAGI.agi?dial_result=ANSWER)
exten => ANSWERED,n,Hangup

 

امید مهاجرانی

تاریخ ارسال: 1390/7/23
تعداد بازدید: 1117
ارسال نظر



تهران - خیابان انقلاب -روبروی پیچ شمیران - جنب دانشگاه آزاد واحد تهران مرکز - ساختمان تنکابن - پلاک 352 - طبقه 6 - واحد 31
تلفن: +98 21 77513268 -77512236 -77613815 -09197371329
طراحی و تولید: ایده پرداز طلوع