۱
آشنایی با متغیرهای کالر آیدی
استریسک اطلاعات تماسگیرنده را در متغیرهای خاصی ذخیره میکند. دو متغیر اصلی و پرکاربرد عبارتند از:
- ${CALLERID(num)} : شماره تماسگیرنده را در خود نگه میدارد. (مثال: 6001)
- ${CALLERID(name)} : نام تماسگیرنده را در خود نگه میدارد (اگر تنظیم شده باشد).
ما میتوانیم از این متغیرها در دایلپلن برای نمایش اطلاعات، تصمیمگیری در مورد مسیر تماس، یا خواندن شماره برای کاربر استفاده کنیم.
۲
مثال عملی: خواندن شماره تماسگیرنده
در این مرحله، ماکروی dial-ext را که در راهنمای دایورت ساختیم، ویرایش میکنیم تا قبل از اتصال تماس، شماره تماسگیرنده را برای ما بخواند.
۲.۱: باز کردن فایل extensions.conf
sudo nano /etc/asterisk/extensions.conf
۲.۲: ویرایش ماکروی dial-ext
کانتکست [macro-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,Answer() ; <-- پاسخ به تماس برای پخش صدا
same=> n,Playback(a-call-from) ; <-- پخش پیام "تماسی از طرف"
same=> n,SayDigits(${CALLERID(num)}) ; <-- خواندن شماره تماس گیرنده
same=> n,MixMonitor(${STRFTIME(${EPOCH},,%Y-%m-%d-%H-%M-%S)}_${UNIQUEID}.wav)
same => n,Dial(PJSIP/${ARG1},20)
same => n,Hangup()
توضیح کدهای جدید:
- Answer(): برای اینکه استریسک بتواند فایلی را پخش کند، ابتدا باید به تماس پاسخ دهد.
- Playback(a-call-from): یک فایل صوتی پیشفرض استریسک را پخش میکند که میگوید: "A call from".
- SayDigits(${CALLERID(num)}): محتوای متغیر CALLERID(num) (یعنی شماره تماسگیرنده) را به صورت رقم به رقم میخواند.
پس از جایگزینی کد، فایل را ذخیره کرده و از ویرایشگر خارج شوید (Ctrl+X, Y, Enter).
۳
اعمال تغییرات و تست
در نهایت، دایلپلن را مجدداً بارگذاری کرده و عملکرد قابلیت جدید را تست میکنیم.
۳.۱: بارگذاری مجدد دایلپلن
ابتدا با دستور اول وارد محیط CLI شده، سپس دستور دوم را اجرا کنید.
sudo asterisk -rvvv
dialplan reload
۳.۲: سناریوی تست
- با سافتفون Zoiper که روی داخلی 6001 تنظیم شده، به داخلی 6002 زنگ بزنید.
- در سافتفون مربوط به داخلی 6002، به تماس پاسخ دهید.
- قبل از اینکه صدای طرف مقابل را بشنوید، باید یک پیام صوتی به زبان انگلیسی بشنوید که میگوید: "A call from" و سپس شماره 6001 را به صورت رقم به رقم میخواند.
- پس از آن، مکالمه به صورت عادی برقرار میشود.