مقدمه
در بسیاری از پروژههای VoIP و سیستمهای تلفنی مبتنی بر استریسک، نیاز است برخی برنامهها یا عملیات فقط در زمانها و روزهای خاص اجرا شوند. برای مثال، امکان دارد بخواهید تماسها فقط در ساعات کاری به بخش فروش منتقل شوند یا خارج از ساعات کاری به پیغام صوتی هدایت شوند.
برنامه ExecIfTime در استریسک این امکان را به شما میدهد که دستورات مختلف Dialplan را بر اساس زمان، روزهای هفته، تاریخ و ساعت به صورت شرطی اجرا کنید.
برنامه ExecIfTime چیست؟
ExecIfTime یک برنامه کاربردی است که بر اساس بازه زمانی مشخص، یک دستور (Application) را اجرا میکند. این برنامه به شما امکان میدهد Dialplan هوشمندتری داشته باشید و سناریوهای پیچیده زمانی را پیادهسازی کنید.
ساختار کلی برنامه ExecIfTime
ExecIfTime(timespan,days_of_week,days_of_month,months,application(args))
-
timespan: بازه زمانی به فرمت
HHMM-HHMM
(ساعت شروع – ساعت پایان) -
days_of_week: روزهای هفته به صورت اعداد ۰ تا ۶ (یکشنبه تا شنبه) یا حروف
-
days_of_month: روزهای ماه به صورت اعداد (۱ تا ۳۱) یا
*
برای همه روزها -
months: ماههای سال به صورت اعداد (۱ تا ۱۲) یا
*
-
application(args): برنامه استریسک به همراه پارامترهای آن که قرار است اجرا شود
مثال ساده
اجرا کردن دستور Dial فقط در ساعات ۹ صبح تا ۵ بعدازظهر از دوشنبه تا جمعه:
exten => 1000,1,Answer(
exten => 1000,n,ExecIfTime(0900-1700,mon-fri,*,*,Dial(SIP/1000))
exten => 1000,n,Hangup()
توضیح: اگر تماس در روزهای کاری و ساعات مشخص شده باشد، تماس به داخلی ۱۰۰۰ منتقل میشود، در غیر اینصورت تماس قطع میشود.
توضیح پارامترها با مثالهای کاربردی
پارامتر | توضیح | مثال کاربردی |
---|---|---|
timespan | بازه زمانی (ساعت شروع-پایان) | ۰۹۰۰-۱۷۰۰ (۹ صبح تا ۵ عصر) |
days_of_week | روزهای هفته به صورت mon-fri یا ۰-۶ | mon-fri (دوشنبه تا جمعه) |
days_of_month | روزهای ماه به صورت اعداد یا * | ۱-۱۵ (۱۵ روز اول ماه) |
months | ماههای سال به صورت اعداد یا * | ۱-۶ (شش ماه اول سال) |
application(args) | برنامه استریسک به همراه پارامترها | Dial(SIP/1000) |
نکات مهم
-
برنامه ExecIfTime فقط در صورت برقرار بودن شرط زمان، برنامه مورد نظر را اجرا میکند.
-
اگر شرط زمان برقرار نباشد، به دستور بعدی میرود یا میتوانید در Dialplan وضعیتهای دیگر را مدیریت کنید.
-
این برنامه به ویژه در کانتکستهای پیشفرض ایزابل مانند
[from-internal-additional]
و کانتکستهای اختصاصی مانند[voipiran]
بسیار کاربرد دارد. -
بهتر است در اجرای IVR یا مسیرهای تماس زمانی از این برنامه استفاده شود تا تماسها بر اساس زمان به بخشهای مناسب هدایت شوند.
مثالهای کاربردی
مثال ۱: هدایت تماس به صف فروش در ساعات کاری
exten => 5000,1,Answer(
exten => 5000,n,ExecIfTime(0900-1700,mon-fri,*,*,Dial(Queue,sales_queue)
exten => 5000,n,Playback(out-of-hours
exten => 5000,n,Hangup()
توضیح: اگر تماس در ساعات کاری دوشنبه تا جمعه باشد، تماس به صف فروش منتقل میشود، در غیر اینصورت پیام “خارج از ساعات کاری” پخش و تماس قطع میشود.
مثال ۲: محدود کردن تماس در تعطیلات
exten => 6000,1,Answer()
exten => 6000,n,ExecIfTime(*,*,25-31,12,Playback(seasonal-message))
exten => 6000,n,ExecIfTime(*,*,1-24,12,Dial(SIP/6000))
exten => 6000,n,Hangup()
توضیح: اگر تماس در ۲۵ تا ۳۱ دسامبر باشد، پیام خاصی پخش میشود، در غیر اینصورت تماس به داخلی ۶۰۰۰ منتقل میشود.
مثال ۳: اجرای برنامه متفاوت در آخر هفته
exten => 7000,1,Answer()
exten => 7000,n,ExecIfTime(*,sat-sun,*,*,Playback(weekend-message))
exten => 7000,n,ExecIfTime(*,mon-fri,*,*,Dial(SIP/7000))
exten => 7000,n,Hangup()
توضیح: در آخر هفته پیام خاص پخش میشود و در روزهای کاری تماس به داخلی ۷۰۰۰ منتقل میشود.
جمعبندی
برنامه ExecIfTime در استریسک یکی از مهمترین ابزارها برای کنترل زمانبندی اجرای برنامهها و دستورها است که به کمک آن میتوان سناریوهای تماس هوشمند و متناسب با نیاز کسبوکار پیاده کرد.
FAQ – سوالات متداول
س: آیا میتوانم چند بازه زمانی را با ExecIfTime بررسی کنم؟
ج: خیر، برای بررسی چند بازه باید چند بار ExecIfTime با شروط مختلف تعریف کنید.
س: اگر شرط زمان برقرار نباشد، چه اتفاقی میافتد؟
ج: برنامه اجرا نمیشود و به دستور بعدی Dialplan میرود.