آخرین ویرایش خرداد 3, 1404 حامد کوه فلاح
دستور 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()
در این مثال اگر کاربر 100 را بگیرد، پس از اتصال، به داخلی 200 منتقل میشود و پیام “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 هدایت کنید.
مثال: ارسال تماس به داخلی 201 در ایزابل
[voipiran]
exten => 500,1,Answer()
same => n,Goto(from-internal-additional,201,1)
مثال: ارسال تماس به صف 6000 در ایزابل
[voipiran]exten => 501,1,Answer()exten => 501,n,Goto(from-internal-additional,6000,1)
در اینجا 6000 یک صف (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)
اگر شماره تماسگیرنده 09121234567 باشد، تماس به کانتکست 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) ; ارسال به داخلی 700 ایزابل










