Variable

- همانند هر زبان برنامه نویسی در dialplanهم از متغیر ها برای بهبود بخشیدن برنامه استفاده میکنیم. - متغیرها دارای نام منحصر به فرد می باشند که اطلاعات را در خود ذخیره میکنند. Syntax آنها به صورت روبه رو می باشد. ${Name} - متغیر ها در dialplanبا حروف کوچک و بزرگ نوشته می شوند. - به طور کلی به چند گروه تقسیم می شوند:

1-متغیرهای اصلی(Global)

این نوع متغیرها در فایل extensions.conf یا globals_custom.conf به صورت کانتکس[global]تعریف می شوند. متغیرهای اصلی در dialplan در هر بخشی از برنامه می توانند فراخوانی شوند.

[globals]

gexten=SIP/222

2- متغیرهای کانال (Channel)

این گروه متغیرهایی هستند که صرفا مربوط به یک تماس خاص می باشند و فقط تا زمانی که آن تماس برقرار میباشد می توان از آن ها استفاده وآنها را فراخونی نمود.همانند CALLERID…. بالعکس متغیرهای اصلی را نمی توان در هر مکانی فراخوانی کرد.

این نوع متغیرها با استفاده از کامند ”Set()” اطلاعات کانال جاری را در خود ذخیره می کنند.

    exten => 301,1,Set(masoud=SIP/100)
          same =>n,Dial(${masoud})
          

تعداد زیادی از متغیرهای channel به صورت از پیش تعریف شده موجود می باشند. استریسک می تواندبعضی از متغیرهای از پیش تعریف شده را در dialplan فراخونی نماید. به این نوع متغیرها که به صورت منحصر به فرد وفقط با استفاده ازحروف بزرگ رزور شده اند متغیرهای سیستمی نیزگفتهمیشود.(در ادامه به چند نمونه از این متغیرها اشاره شده است. )

}$CALLERID(all)}, ${CALLERID(name)}, ${CALLERID(num)}, ${CHANNEL}, ${CONTEXT}, ${EPOCH}, ${EXTEN}, ${SIPUSERAGENT}, and ${UNIQUEID{

در این لینک لیستی کامل از متغیرهای سیستمی نمایش داده شده است

با ذکر مثال کاربرد استفاده از متغیرهارا درdial plan مشاهده خواهیم کرد: برای تعریف متغیر های اصلی همان طور که گفته شد در فایل extensions.confبه صورت زیر تعریف می کنیم:

 [globals]
 masoud=SIP/100
 ali=SIP/200
 reza=DAHDI/1
 

همچنین می توان در طول برنامه برای تعریف متغیرهای اصلی ازدستورSetGlobalVar استفاده کرد.

 [internal]
 exten => 123,1,SetGlobalVar(masoud=SIP/100)
  [lab] 
  exten => 4000,1,Answer 
  exten => 4000,n,Wait(1) 
  exten => 4000,n,Set(TIMEOUT(digit)=3) 
  exten => 4000,n,Set(TIMEOUT(response)=10) 
  exten => 4000,n,Background(custom/mainivr) 
  exten => 4000,n,WaitExten(,) 
  exten => 1,1,Goto(ext-603,s,1)
  exten => 2,1,Goto(day-audio,s,1)
  exten => 3,1,Goto(ext-doble,s,1)
  exten => i,1,Playback(invalid) 
  exten =>i,n,Hangup() 
  exten => t,1,Hangup()
  exten => hang,1,Playback(vm-goodbye) 
  exten =>hang,n,Hangup
   [ext-603]
   exten => s,1,Dial(${masoud},,r) 
   exten =>s,n,Hangup() 
   
  [day-audio]
   exten => s,1,Playback(custom/day) 
   exten =>s,n,Hangup()
    
  [ext-doble]
  exten => s,1,Dial(${ali}&${reza},10) 
  exten =>s,n,Hangup()
  
  

متغیر ${EXTEN}از جمله متغیر های پر کاربرد کانال می باشد. در حقیقت به شماره گرفته شده یا extensions گفته می شود. به مثال زیر توجه کنید:

   exten => _XXX,1,Answer()
  same =>n,SayDigits(${EXTEN}) 

بعد از گرفتن هر شماره 3 رقمی تابع SayDigitsآن را به صورت digitبرای کاربر می خواند.

${EXTEN:x} : از این syntax هنگامی که بخواهیم عددی را جدا کنیم استفاده می شود.

exten => _XXX,1,Answer()
same =>n,SayDigits(${EXTEN:1})

در این مثال رقم اول حذف و2 رقم آخر به صورترقم رقم یا در اصطلاح digit بیان می شود.

exten => _XXX,1,SayDigits(${EXTEN:-1))

در مثال بالا 2 رقم اول حذف وفقط رقم آخر به صورت digtiمی شود.

${EXTEN:x:y}: در این syntax ،X تعداد ارقامی است که می خواهیم از عدد جدا شود و y تعداد ارقام انتخاب شده می باشد.

به طور مثال در عدد94169671111 و ${EXTEN:1:3} خروجی 416 می باشد.

[outbound-local]
exten => _9NXXXXXX,1,Dial(DAHDI/g0/${EXTEN:1})
exten => _9NXXXXXX,2,Congestion( )
چاپ/برون‌بری