...

برنامه Goto در استریسک — پرش حرفه‌ای به داخلی، صف و Context در Asterisk

برنامه goto

فهرست مطالب

زمان مطالعه: 2 دقیقه

دستور Goto یکی از اساسی‌ترین ابزارهای برنامه‌نویسی در Dialplan است. با استفاده از این دستور، می‌توان به سادگی جریان تماس را از یک مرحله یا کانتکست به مرحله‌ی دیگر هدایت کرد.


ساختار دستور Goto

Goto([context][,extension][,priority])
  • context (کانتکست): جایی که می‌خواهید پرش انجام شود (می‌تواند خالی باشد)

  • extension (اکستنشن یا شماره مقصد): مقصدی که می‌خواهید به آن بروید

  • priority (اولویت): شماره مرحله‌ای که باید اجرا شود

اگر context مشخص نشود، استریسک از کانتکست جاری استفاده می‌کند.


مثال ساده در کانتکست [voipiran]

[voipiran]
exten => 100,1,Answer()
same => n,Goto(200,1)
exten => 200,1,Playback(welcome)
same => n,Hangup()

در این مثال اگر کاربر ۱۰۰ را بگیرد، پس از اتصال، به داخلی ۲۰۰ منتقل می‌شود و پیام “welcome” پخش می‌شود.


Goto بین Contextهای مختلف

Goto(context-name,extension,priority)

مثال:

Goto(from-internal,300,1)

با این دستور تماس به داخلی ۳۰۰ در کانتکست from-internal هدایت می‌شود.


نکته مهم: کانتکست from-internal-additional در ایزابل چیست؟

در سیستم‌های مبتنی بر ایزابل یا FreePBX، زمانی که شما از طریق رابط گرافیکی داخلی (extension)، صف (queue)، گروه زنگ (ring group) یا IVR تعریف می‌کنید، این تعریف‌ها به‌طور خودکار در کانتکستی به نام from-internal-additional اضافه می‌شوند.

پس اگر شما می‌خواهید از یک کانتکست سفارشی مثل [voipiran] به یکی از داخلی‌های تعریف‌شده در ایزابل بروید، باید تماس را به from-internal-additional هدایت کنید.


مثال: ارسال تماس به داخلی ۲۰۱ در ایزابل

[voipiran]
exten => 500,1,Answer()
same => n,Goto(from-internal-additional,201,1)

مثال: ارسال تماس به صف ۶۰۰۰ در ایزابل

[voipiran]
exten => 501,1,Answer()
exten => 501,n,Goto(from-internal-additional,6000,1)

در اینجا ۶۰۰۰ یک صف (Queue) است که در رابط ایزابل تعریف شده.


مثال‌های بیشتر از Goto

پرش به اکستنشن دیگر در همان کانتکست

exten => 100,1,Answer()
exten => 100,n,Goto(200,1)

پرش به یک Context دیگر (مثلاً منوی شب)

exten => 105,1,Goto(nightmenu,s,1)

پرش شرطی با ExecIf + Goto

exten => 106,1,ExecIf($["${CALLERID(num)}" = "09121234567"]?Goto(vip,s,1))
exten => 106,n,Playback(access-denied)

اگر شماره تماس‌گیرنده ۰۹۱۲۱۲۳۴۵۶۷ باشد، تماس به کانتکست vip منتقل می‌شود، در غیر این صورت پیام «دسترسی غیرمجاز» پخش می‌شود.


ترکیب Goto با منطق تماس

مسیر تماس برای ساعات مختلف

exten => 108,1,Set(TIME=${STRFTIME(${EPOCH},,%H)})
exten => 108,n,GotoIf($[${TIME} < 17]?day,s,1:night,s,1)

اگر ساعت کمتر از ۱۷ باشد، به منوی روز برو، در غیر این صورت به منوی شب.


استفاده از Goto در فایل‌های شامل (includes)

در فایل‌های dialplan سفارشی مثل [voipiran]، اگر بخواهید از اکستنشن‌های تعریف‌شده در ایزابل استفاده کنید، راه حرفه‌ای این است که کانتکست‌های استاندارد را include کنید یا با Goto تماس را به آن‌ها منتقل نمایید.

مثال:

[voipiran]
exten => 600,1,Answer()
exten => 600,n,Goto(from-internal-additional,700,1) ; ارسال به داخلی ۷۰۰ ایزابل

 

0 0 رای ها
امتیازدهی به مقاله
اشتراک در
اطلاع از

0 نظرات
قدیمی‌ترین
تازه‌ترین بیشترین رأی
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها