در طراحی دیالپلنهای حرفهای، گاهی لازم است بسته به شرایط مختلف تماس، مسیر اجرای تماس را تغییر دهیم. اینجاست که دستور GotoIf()
در استریسک وارد عمل میشود.
GotoIf(condition?[labeliftrue:[labeliffalse]])
دستور GotoIf چگونه کار میکند؟
ساختار کلی دستور بهصورت زیر است:
exten => ۱۰۰,۱,Set(myVar=۱)
exten => ۱۰۰,۲,GotoIf($["${myVar}" = "۱"]?voipiran,special,۱:voipiran,normal,۱)
در این مثال اگر مقدار متغیر myVar
برابر ۱ باشد، تماس به اکستنشن special
در کانتکست voipiran
هدایت میشود. در غیر این صورت به normal
.
پارامترها:
-
شرط: هر شرطی که با
$[...]
نوشته شود. -
true-branch: مقصدی که در صورت برقرار بودن شرط تماس به آن برود.
-
false-branch: مقصدی که در صورت برقرار نبودن شرط تماس به آن برود.
🔗 اگر هنوز با متغیرها در استریسک آشنا نیستید، پیشنهاد میکنم مقاله آموزش متغیرها در Dialplan استریسک (Asterisk Variables) را بخوانید.
مثال: بررسی شماره تماسگیرنده (CallerID)
[voipiran]
exten => 2000,1,NoOp(شروع پردازش تماس
exten => 2000,2,GotoIf($["${CALLERID(num)}" = "09121234567"]?vip,1:normal,1)
exten => vip,1,Playback(welcome-vip)
exten => vip,2,Dial(SIP/1001)
exten => normal,1,Playback(welcome)
exten => normal,2,Dial(SIP/1002)
در این مثال اگر تماس از شماره خاصی گرفته شود، تماس به داخلی VIP منتقل میشود و برای دیگران مسیر عادی اجرا میشود.
استفاده از from-internal-additional
اگر بخواهید از داخل ایزابل تماس را به دیالپلنی که نوشتهاید منتقل کنید (مثلاً از یک صف یا IVR)، حتماً باید کانتکست شما در from-internal-additional
شامل شود:
[from-internal-additional]
include => voipiran