راهنمای هوشمند دایورت تماس در Asterisk

۱

ویرایش فایل دایل‌پلن (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 زنگ بخورد.