toluesoft

کاربرد Macro ها در Asterisk

کاربرد Macro ها در Asterisk

ماکروها ساختار بسیار پرکاربردی در جلوگیری از تکرار در dialplan  هستند .در مثال زیر نمونه ای از پیاده سازی صندوق صوتی را که با توجه به اشغال بودن یا در دسترس نبودن کاربر 101  پیام خاصی پخش شده و تماس به صندوق صوتی هدایت می شود مشاهده می کنید .

exten => 101,1,Dial(SIP/phone1,10)

exten => 101,n,GotoIf($[“${DIALSTATUS}”=”BUSY”]?Busy:unavai)

exten => 101,n,(unavail),voicemail(101@defualt,u)

exten => 101,n,Hangup()

exten => 101,n(busy),VoiceMail(101@default,b)

exten => 101,n,Hangup()

اکنون فرض کنید شما باید سیستم تلفنی ای با 1000 کاربر و VoiceMail های آنها را تعریف کنید . این عملیات نیاز به کپی کردن های متناوبی خواهد داشت که احتمالا بدون مشکل نخواهد بود . در ادامه خواهید دید که چگونه با استفاده از ماکروها می توانیم این تنظیمات را ساده تر و سازمان یافته تر انجام دهیم .

تعریف ماکروها شبیه تعریف extension ها در Dialplan است . برای تعریف ماکروها از کلمه رزرو شده macro- و نام ماکرو استفاده می کنیم .  به عنوان مثال

macro-voicemail

وجود کلمه macro- در ابتدای ماکروها آنها را از context های معمولی متمایز می سازند . دستوراتی که در ماکروها استفاده می شوند ، شامل دستورات عادی ای هستند که در تعریف های رایج Dialplan استفاده می شود و تنها فاکتور محدود کننده این است که در ماکروها فقط می توان از extension های s استفاده کرد .

[macro-voicemail]

exten => s,1,Dial(SIP/phone1,10)

exten => s,n,GotoIf($[“${DIALSTATUS}”=”BUSY”]?Busy:unavai)

exten => s,n,(unavail),voicemail(101@defualt,u)

exten => s,n,Hangup()

exten => s,n(busy),VoiceMail(101@default,b)

exten => s,n,Hangup()

این یک مثال برای شروع کار با ماکرو است ولی مثال کاملی نیست زیرا فقط برای کاربر phone1 و صندوق صوتی او ساخته شده است . برای تعریف اصولی ماکروها باید از آرگومان ها بهره ببریم . ولی ایتدا اجازه دهید نحوه استفاده از ماکروی بالا را Dialplan ببینیم .

برای استفاده از ماکروها در Dialplan  از برنامه Macro() استفاده می کنیم . این برنامه یک ماکرو را فراخوانی کرده و در صورت نیاز آرگومان ها را به آن پاس می دهد . به عنوان مثال برای فراخوانی ماکروی voicemail که در مرحله قبل تعریف کردیم مانند زیر عمل می کنیم .

exten => 101,1,Macro(voicemail)

برنامه Macro() چندین متغیر سیستمی را برای استفاده ما تعریف و مقداردهی می کند .

${MACRO_CONTEXT} : context  ای که ماکرو در آن فراخوانی شده است را بر می گرداند .

${MACRO_EXTEN} : extension ای که در آن ماکرو قراخوانی شده است را بر می گرداند .

${MACRO_PRIORITY} : اولویت ای که در آن ماکرو فراخوانی شده است را بر می گرداند .

به عنوان مثال در Dialplan زیر

[internal_users]

exten => 101,1,Macro(voicemail)

مقادیر متغیر های ذکر شده عبارتند از :

${MACRO_CONTEXT} == internal_users

${MACRO_EXTEN} == 101

${MACRO_PRIORITY} == 1

نوع دیگری از آرگومان نیز در Macro وجود دارد که توسط کاربر می تواند به MACRO پاس داده شود . این نوع آرگومان که با ${ARGn} که در آن n شماره آرگومان پاس داده شده به سیستم است قابل دستیابی می باشد .

اکنون قادر خواهیم بود با استفاده از آرگومان ها مثال کاملتری از پیاده سازی ماکروی قبلی ارائه دهیم .

 

[macro-voicemail]

exten => s,1,Dial(${ARG1},10)

exten => s,n,GotoIf($[“${DIALSTATUS}”=”BUSY”]?Busy:unavai)

exten => s,n,(unavail),voicemail(${MACRO_EXTEN}@defualt,u)

exten => s,n,Hangup()

exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b)

exten => s,n,Hangup()

 

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

تعداد بازدید : 4235
اشتراک گذاری:
هنوز دیدگاهی ثبت نشده‌است.شما هم می‌توانید در مورد این مطلب نظر دهید

یک نظر اضافه کنید

شماره موبایل شما منتشر نخواهد شد.زمینه های مورد نیاز هستند علامت گذاری شده *

امتیاز شما