ویرایش فایل دایلپلن (extensions.conf)
در این مرحله، سه قطعه کد را به فایل extensions.conf اضافه و جایگزین میکنیم. این کدها منطق بررسی دایورت، فعالسازی با کد *72 و غیرفعالسازی با *73 را پیادهسازی میکنند.
۱.۱: باز کردن فایل برای ویرایش
sudo nano /etc/asterisk/extensions.conf
۱.۲: افزودن ماکروی dial-ext
کد زیر را به انتهای فایل اضافه کنید. این ماکرو وظیفه دارد قبل از هر تماس، وضعیت دایورت را بررسی کند.
[macro-dial-ext]
; ARG1 = شماره داخلی برای تماس
exten => s,1,NoOp(Checking for call forwarding for ${ARG1})
same => n,Set(FWD_STATUS=${DB(CF/${ARG1})})
same => n,GotoIf($["${FWD_STATUS}" = ""]?dial:forward)
; منطق دایورت کردن تماس
same => n(forward),NoOp(Call is being forwarded from ${ARG1} to ${FWD_STATUS})
same => n,Dial(Local/${FWD_STATUS}@from-internal,20)
same => n,Hangup()
; منطق تماس عادی (بدون دایورت)
same => n(dial),NoOp(No forwarding, dialing extension ${ARG1} directly)
same => n,MixMonitor(${STRFTIME(${EPOCH},,%Y-%m-%d-%H-%M-%S)}_${UNIQUEID}.wav)
same => n,Dial(PJSIP/${ARG1},20)
same => n,Hangup()
۱.۳: افزودن کانتکست کدهای ویژه
کد زیر را نیز بعد از ماکروی قبلی به فایل اضافه کنید. این بخش کدهای *72 و *73 را تعریف میکند.
[feature-forward]
; کانتکست برای فعال سازی دایورت
exten => *72,1,Answer()
same => n,Playback(vm-enter-num-to-callfwd)
same => n,Read(FWD_TO_NUM,,10)
same => n,Set(DB(CF/${CALLERID(num)})=${FWD_TO_NUM})
same => n,Playback(call-fwd-options)
same => n,Playback(saved)
same => n,Hangup()
; کانتکست برای غیر فعال سازی دایورت
exten => *73,1,Answer()
same => n,DBdel(CF/${CALLERID(num)})
same => n,Playback(call-fwd-deactivated)
same => n,Hangup()
۱.۴: جایگزینی کانتکست اصلی [from-internal]
محتوای فعلی کانتکست [from-internal] را پیدا کرده و آن را به طور کامل با کد زیر جایگزین کنید تا از ماکرو و کدهای جدید استفاده کند.
[from-internal]
; اضافه کردن کدهای ویژه به این کانتکست
include => feature-forward
; تماس با داخلیها از طریق ماکرو
exten => 6001,1,Macro(dial-ext,6001)
exten => 6002,1,Macro(dial-ext,6002)
; تست اکو بدون تغییر باقی میماند
exten => 100,1,NoOp(Echo Test)
same => n,Answer()
same => n,Echo()
same => n,Hangup()
پس از انجام تمام تغییرات، فایل را ذخیره کرده و از ویرایشگر خارج شوید (در nano: Ctrl+X، سپس Y و Enter).
اعمال تغییرات و تست نهایی
پس از ویرایش فایل، دایلپلن را مجدداً بارگذاری کرده و سپس با دنبال کردن سناریوی تست، از عملکرد صحیح قابلیت دایورت مطمئن شوید.
۲.۱: بارگذاری مجدد دایلپلن
ابتدا با دستور اول وارد محیط CLI شده، سپس دستور دوم را اجرا کنید.
sudo asterisk -rvvv
dialplan reload
۲.۲: سناریوی تست
- ۱. فعالسازی: با داخلی 6001 شماره *72 را بگیرید. پس از شنیدن پیام، شماره 6002 را وارد کنید.
- ۲. تست دایورت: با یک داخلی دیگر به 6001 زنگ بزنید. تماس باید به 6002 منتقل شود.
- ۳. غیرفعالسازی: با داخلی 6001 شماره *73 را بگیرید تا دایورت لغو شود.
- ۴. تست نهایی: دوباره به 6001 زنگ بزنید. این بار باید خود داخلی 6001 زنگ بخورد.