برنامه نویسی ویپ چیست و انواع روشها برنامه نویسی VoIP
انواع روشهای برنامه نویسی ویپ کدام هستند و چه تفاوت هایی با هم میکنند ؟
سلام
از سری آموزش های ویپ در این مقاله سعی دارم توضیح بدم با چه روشهایی میتونیم با سیستم های تلفنی ویپ تحت استریسک ارتباط برقرار کنیم و تفاوت هر ۴ مدل برنامه نویسی ویپ چیست ؟
اول از همه توضیح بدم که برای برنامه نویسی ویپ باید دانش حداقلی در مورد لینوکس و اصطلاحات ویپ داشته باشید .
قبل از هر چیزی لازمه بدونیم کلا سیستم تلفنی تحت استریسک مثل FreePBX یا Issable داره از هسته استریسک استفاده میکنه و تمامی مکالمات و اتفاق هایی که میوفته رو استریسک هندل میکنه . در اصل FreePBX یا Issable فایل های برای تنظیم و راه اندازی Asterisk هستند و شما میتونید Asterisk رو به صورت خام بگیرید و روی سرور خودتون نصب کنید ولی برای ساخت به داخلی ساده نیاز به نوشتن کد های زیادی دارید یا برای ساخت مرکز تماس ساعتها باید کد بنویسید ولی نرم افزار های PBX این کار رو برای شما انجام میدن و شما با چند کلیک میتونید داخلی بسازید یا هر امکانی که این سیستم ها به شما میده رو استفاده کنید . پس برای استفاده حرفه ای تر از مرکز های تماس میتونیم به روش هایی که Asterisk پشتیبانی میکنه با اون ارتباط برقرار کنیم و برنامه های حرفه ای تری بسازیم .
ساخت برنامه نظر سنجی ویپ یا ساخت برنامه تماس گیری خودکار VoIP یا هر سناریویی که مد نظرتون باشه قابل اجراست . فقط کافیه طبق توضیحاتی که میدم برنامه نویسی رو یاد بگیرید و یه مقدار تمرین کنید .
چطور باید اطلاعات رو از سرور ویپ خودمون دریافت و یا ارسال کنیم ؟ همونطور که میدونید سیستم تلفنی ویپ به واسطه نرم افزاری بودنش میتونه با سیستم های دیگه ارتباط برقرار کنه . این ارتباط میتونه به صورت یکطرفه باشه یا دو طرفه باشه . سیستم های یکطرفه مثل سیستم های گزارش گیری و یا اطلاع رسانی میشه که مثلا اگر کسی از بیرون تماس گرفت شماره اون رو دریافت کنیم و عملیاتی رو انجام بدیم . این روش در سیستم های مدیریت مشتریان یا همون CRM خیلی کاربرد داره . اگر شماره ای با شما تماس گرفت و به داخلی ۱۰۱ وصل شد ،سرور شماره تماس گیرنده رو به برنامه ما بفرسته و برنامه ما چک کنه این شماره کی هست و چه مشخصات در سیستم ذخیره شده و اطلاعاتی که مد نظر شماست رو نشون بده یا هر عملیاتی که مد نظر شماست اتفاق بیوفته .
انواع روشهای برنامه نویس ویپ
برنامه نویسی ویپ به روش AMI
مخفف کلمه Asterisk Manager Interface (AMI) هست . AMI یک روش استاندارد به صورت کلاینت سروری تحت پروتکل TCP هست که به صورت استاندارد از پورت ۵۰۳۸ اجازه می دهد تا به سرور استریسک متصل شود و دستورات را صادر کند یا رویدادها را از طریق TCP/IP بخواند. برای پیکر بندی این روش از فایلی با عنوان manager.conf استفاده میشه که در اون فایل سطح دسترسی به اطلاعات ، پورت . آدرس IP سروری که قراره اطلاعات رو بخونه تعریف میشه .
این روش دستوراتی که به سرور تلفنی ارسال میشن رو action نام گذاری میکنیم و اطلاعاتی که از سرور VoIP ارسال میشه رو Events میگوییم . اطلاعاتی که برای اتصال به AMI لازم هست شامل : نام کاربری / رمز عبور / آدرس IP درخواست دهنده میباشد .
مثال برای برنامه نویسی ویپ به روش AMI :
۱ ۲ ۳ ۴ ۵ |
Action:Originate Channel:SIP/james Contect:phones Exten:۱۰۰ Priority:۱ |
اتصال به AMI با TCP port 5038
برنامه نویسی ویپ به روش AGI
مخفف کلمه (AGI) Asterisk Gateway Interface هست . AGI رابطی هست برای اجرا برنامه ها با زبان های برنامه نویسی مختلفن با سیستم تلفنی مثل Perl , PHP , C , Pascal , Shell . با این روش میتونید برنامه های خودتون رو به سیستم تلفنی تحت استریسک متصل کنید . امکانات و دسترسی هایی که این روش به شما میده از AMI بیشتره و برای برنامه نویسی ویپ روش مناسب تری محسوب میشه . جالبه بدونید بعضی از ماژولهایی که در سیستم تلفنی مثل ایزابل یا FreePBX وجود داره مثل صف با همین قابلیت کار میکنه . این روش به صورت استاندارد تحت پروتوکل TCP و با پورت ۴۵۷۳ کار میکنه . برنامه نویسی ویپ به روش AGI شامل که زیر مجموعه میشه :
- AGI : روش سنتی اجرای اسکریپت و از stdin , stdout استفاده میکنه . اگر اطلاعات کامل نباشه از asterisk.conf استفاده میکند.
- Async AGI : امکان اجرای اسکریپت ها به صورت غیر همزمان رو فراهم میکنه
- EAGI : امکان کنترل کانال های صدا و همچنین تعامل با dailplan
- FastAGI : در این روش اطلاعات در قالب URL ارسال میشوند.
مثال برای برنامه نویسی ویپ به روش AGI :
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ |
; Start the AGI script /tmp/my-cool-script.sh, passing it the contents ; of the channel variable FOO same => n,AGI(/tmp/my-cool-script.sh,${FOO}) ; Start the AGI script my-cool-script.sh located in the astagidir ; directory, specified in asterisk.conf same => n,AGI(my-cool-script.sh) ; Connect to the FastAGI server located at ۱۲۷.۰.۰.۱ and start the script ; awesome-script same => n,AGI(agi://۱۲۷.۰.۰.۱/awesome-script) ; Start AsyncAGI same => n,AGI(agi:async) |
اتصال به AGI با TCP port 4573
برنامه نویسی ویپ به روش ARI
مخفف کلمه Asterisk REST Interface (ARI) هست . رابط REST Asterisk (ARI) برای رفع محدودیت های ذاتی در توسعه عملکردهای خارجی یا پیشرفته خارج از استریسک ایجاد شده است. در حالی که AGI به شما امکان می دهد برنامه های خارجی را راه اندازی کنید، و AMI به شما اجازه می دهد تا تماس های در حال انجام را به صورت خارجی نظارت و کنترل کنید، هر تلاشی برای ادغام هر دو در یک برنامه خارجی کامل به سرعت پیچیده و مبهم می شود. ARI به توسعه دهندگان اجازه می دهد تا با استفاده از Asterisk به عنوان موتور اصلی، یک برنامه کاربردی مستقل و کامل بسازند.
مثال برای برنامه نویسی ویپ به روش ARI :
۱ ۲ ۳ |
$ wscat -c "ws://localhost:8088/ari/events?api_key=asterisk:asterisk&app=hello-world" connected (press CTRL+C to quit) > |
برنامه نویسی ویپ به روش Dialplan
میرسیم به برنامه نویسی ویپ با Dialplan . این زبان به صورت کلی برای استریسک توسعه و طراحی شده و تقریبا اکثر قسمت هایی که توسط مرکز های تلفنی ویپ ساخته میشه از این زبان استفاده میکنه . هر داخلی که میسازید و یا هر تنظیماتی که توسط وب انجام میدید با این زبان نوشته میشه و ساده تر از بقیه مدل های برنامه نویسی ویپ هست . این زبان به صورت خط به خط اجرا میشه و هر خط یک عملیات مشخص رو انجام میده و بعد از اون به خط بعدی میره . برنامه ویسی ویپ به صورت Dialplan در فایل هایی با فرمت .conf و در پوشه /etc/asterisk/ ذخیره میشه و میتونید با وارد شدن به سرور خودتون این فایل ها رو ببینید .
مثال برای برنامه نویسی ویپ به روش Dialplan :
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ |
[dial-ext] exten => _۱XX,۱,Log(DEBUG,Dialing local extension ${EXTEN}) exten => _۱XX,n,Dial(SIP/${EXTEN},${DIAL_TOUT},htwk) exten => _۱XX,n,GotoIf($["${DIALSTATUS}" = "CHANUNAVAIL"]?lbl_dial-ext_1:) exten => _۱XX,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?lbl_dial-ext_1:) exten => _۱XX,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?lbl_dial-ext_1:) exten => _۱XX,n(lbl_dial-ext_0),Hangup() exten => _۱XX,n(lbl_dial-ext_1),MailboxExists(${EXTEN}) exten => _۱XX,n,GotoIf($["${VMBOXEXISTSSTATUS}" = "FAILED"]?lbl_dial-ext_2:) exten => _۱XX,n,VoiceMail(${EXTEN},u) exten => _۱XX,n,GotoIf($["${VMSTATUS}" = "FAILED"]?lbl_dial-ext_3:) exten => _۱XX,n,Goto(lbl_dial-ext_0) exten => _۱XX,n(lbl_dial-ext_3),Log(ERROR,Caller ${CALLERID(all)} failed to leave a voicemail for ${EXTEN} mailbox.) exten => _۱XX,n,Goto(lbl_dial-ext_0) exten => _۱XX,n(lbl_dial-ext_2),Hangup() |
در آموزش های بعدی اصول برنامه نویسی با هرکدامیک از این زبان ها رو یاد میگیریم .
ممنون از این مقاله کاربردی