کانال های محلی در استریسک ( 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
امید مهاجرانی
یک نظر اضافه کنید
شماره موبایل شما منتشر نخواهد شد.زمینه های مورد نیاز هستند علامت گذاری شده *
امتیاز شما