شناختن نوع ارسال شماره تماس گیرنده یا همان Caller ID حتی اگر این مشکل را روی سیستم خود ندارید برای کسانی که مهندس VOIP هستند بسیار مفید است، اگر هم در دریافت Caller ID از سوی مخابرات مشکل دارید، این مقاله مشکل شما را حل خواهد کرد. Caller ID از سوی مخابرات در دو نوع ممکن است ارسال شود که به شرح آن‌ها خواهیم پرداخت:


1. ارسال Caller ID با استفاده از FSK:

روش Frequency Shift Keying یا به طور خلاصه FSK روشی است کلی برای ارسال اطلاعات بر روی خطوط یا بستر  آنالوگ مخابراتی. این روش به طور گسترده در مودم‌ها به کار می‌رود و کارکرد آن به این صورت است که هرگاه فرستنده می‌خواهد بیت ۰ را ارسال کند یک موج با فرکانس ۲۲۰۰Hz و وقتی می‌خواهد بیت ۱ را ارسال کند موجی با فرکانس ۱۲۰۰Hz ایجاد می‌کند به این ترتیب می‌توان با ارسال پیوسته فرکانس‌های فوق مجموعه اطلاعاتی را ارسال نمود در سمت دریافت کننده با دریافت این فرکانس‌ها به اطلاعات ارسالی خواهیم رسید. این روش در ارسال شماره تماس گیرنده یا همان Caller ID نیز به کار گرفته شده نه تنها شماره تماس گیرنده بلکه حتی می‌توان نام و اطلاعات دیگر را نیز ارسال نمود.


2. ارسال Caller ID با بهره‌گیری از DTMF:

Dual Tone Multy Frequency همان مکانیزی است که در هنگام شماره‌گیری از روی شماره‌گیر تلفن خود از آن استفاده می‌کنید. در این روش شما می‌توانید حروف انگلیسی، اعداد و یا * و # را ارسال نمایید. به هر یک از این حروف یک فرکانس بالا و یک فرکانس پائین تخصیص داده شده است به طور مثال هنگامی که فرستنده می‌خواهد عددی را ارسال کند یک موج سینوسی برای هریک از این فرکانس‌ها ارسال می‌کند که در دریافت کننده با استفاده از الگوریتم گویرتزل این فرکانس‌ها استخراج شده و به عدد مورد نظر می‌رسیم. حال پس از دانستن نحوه ارسال Caller ID یک نکته دیگر باقی می‌ماند اینکه این اطلاعات کی توسط مرکز مخابرات فرستاده می‌شوند؟ برای پاسخ‌گوئی به این سوال باید بگویید شما در کدام کشور قرار دارید و مرکز مخابراتی شما از کدام استاندارد برای ارسال Caller ID استفاده می‌کند. به طور کلی ارسال Caller ID معمولاً بین زنگ اول و دوم صورت می‌گیرد البته در بعضی کشورها قبل از زنگ و با تغییر قطب‌های ولتاژ (DC (Polarity، دریافت کننده را از ارسال Caller ID مطلع می‌نماید. البته در ایران معمولاً ارسال بین زنگ اول و دوم صورت می‌گیرد ولی در بعضی مراکز قبل از زنگ اول نیز ارسال می‌شود.


چگونگی دریافت Caller ID در Asterisk:

همان‌طور که می‌دانیم Asterisk یک PBX نرم‌افزاری است یعنی تقریباً اکثر کارکردهای سیستم به صورت نرم‌افزاری پیاده‌سازی شده از جمله دریافت و رمز گشائی (Decoding). در سیستم Asterisk سه گزینه در chan_dahdi.conf  وجود دارد که مرتبط با دریافت Caller ID می‌باشد و عبارتند از: cidstart, usecallerid, cidsignalling. هر کدام از این متغیرها می‌توانند مقادیر زیر را پذیرا باشند:

usecaller id = yes /no
cidstart = ring /polarity

cidsignalling = bell /dtmf

این گزینه‌ها کم و بیش قبلاً در متن توضیح داده شده ولی موارد زیر جهت روشن شدن بیشتر معانی آن‌ها اضافه می‌گردد.


usecallerid: مشخص می‌کند آیا Asterisk دنبال Caller ID بگردد یا خیر، در حقیقت Caller ID نمایش داده شود یا خیر.
cidstart: این گزینه مشخص می‌کند آیا Caller ID بعد از زنگ اول (بین زنگ اول و دوم) ارسال می‌شود یا پس از تغییر polarity.
cidsignalling: با این متغیر تعیین می‌کنیم که آیا ارسال Caller ID به صورت DTMF است یا FSK، البته در سیستم Asterisk انواع مختلف FSK پشتیبانی می‌شود، bell ،v.23 یا غیره. در ایران همانطور که گفته شد cidstart در اغلب موارد ring می‌باشد (بین زنگ اول و دوم) ولی در مواردی نیز قبل از زنگ اول است که Asterisk این حالت را پشتیبانی نمی‌کند. در مورد cidsignalling هر دو مورد DTMF و (FSK (bell وجود دارد که این گزینه‌ها را باید از مرکز مخابراتی خود جویا شوید.


در سیستم Asterisk کارت‌های تلفنی که با آن هم‌خوانی دارند کلیه فریم‌های صوتی را از طریق درایور خاص خود یا DAHDI/Zaptel به Asterisk انتقال می‌دهند و در Asterisk ماژولی به نام dsp مسئولیت پردازش و استخراج فرکانس‌های DTMF یا FSK را به عهده دارند، البته کارت‌های Sangoma با توجه به نحوه طراحی سخت‌افزاری آن قابلیت تشخیص DTMF را در روی کارت دارند در صورتی که در Drive آن گزینه Hardware-dtmf فعال شده باشد. در صورتی که شما در ایران هستید و در خصوص تشخیص Caller ID با Asterisk دچار مشکل هستید، باید از cidstart ،cidsignalling مرکز مخابراتی خود مطمئن شوید. در صورتی که مطمئین نیستید که Caller ID قبل از زنگ اول ارسال می‌شود یا خیر می‌توانید به روش زیر یک مکالمه را ضبط کرده و پس از شنیدن آن از این مسئله مطمئن شوید.


dahdi_monitor x –r cidaudio-rx.raw

در دستور فوق x شماره کانال شما است به طور مثال اگر می‌خواهید dahdi/1 را ضبط کنید باید عدد 1 را به جای x بزنید.


مهم‌ترین علت مشکل عدم تشخیص Caller ID تفاوت در نوع ارسال Caller ID از سمت مراکز مخابرات می‌باشد، که در این صورت باید پس از شناسایی نوع سیگنالینگ Caller ID، تنظیمات مربوط به cidstart ،cidsignalling کانال‌های dahdi را متناسب با آن، انجام دهید. در ادامه با ارائه یک راهکار ساده، این مشکل بزرگ را حل خواهیم کرد. در ابتدا باید با استفاده از نرم‌افزار dahdi_monitor  یکی از کانال های dahdi را ضبط کنیم. در واقع با این نرم‌افزار می‌توان جریان ورودی و خروجی از کانال‌های dahdi را مانیتور و ضبط کرد. در صورتی که خط شهری به یکی از پورت‌ها متصل است و شماره کانال آن را نمی‌دانید، می‌توانید به فایل system.conf که در مسیر  etc/dahdi قرار دارد، رجوع کرده و اطلاعات لازم را استخراج کنید. قبل از شماره‌گیری خط مورد نظر، دستور زیر را اجرا کنید تا ضبط کانال مربوطه آغاز شود. در این دستور x شماره کانال، -r نشان دهنده جریان ورودی  و –t نشان دهنده جریان خروجی است.

#> dahdi_monitor    x    -r    filename1.raw  -t  filename2.raw

در نهایت یک نام برای فایل‌های ضبط شده تعیین و فرمت فایل صوتی را raw ذخیره نمایید. تماس را می‌توانید بعد از شنیدن چند بوق قطع نمایید. فایل‌های صوتی در مسیر جاری ذخیره شده که می‌توانید با دستور LS از وجود فایل‌های ضبط شده اطمینان حاصل کنید. پس از ضبط فایل‌ها، آن‌ها را در نرم‌افزار adobe audition باز کرده و از این طریق نوع سیگنالینگ callerid را شناسایی کنید. در فایل ضبط شده اگر غیر از صدای زنگ، صدای مشابه شماره گرفتن از روی صفحه کلید تلفن شنیده شود، به این معنا است که callerid با سیگنالینگ dtmf ارسال می‌شود. اما در صورتی که صدایی همانند Handshake Dialup (زمان اتصال به اینترنت) شنیده شود، callerid با سیگنالینگ fsk برای شما ارسال می‌گردد. در زیر، حالت‌های رایج مورد بررسی قرار گرفته‌اند.


حالت اول: Caller ID با سیگنالینگ DTMF بعد از زنگ:

callerid asterisk elastix

در این حالت ابتدا یک ringtone پخش شده، سپس callerid با سیگنالینگ dtmf ارسال شده و بعد از آن ringtone دوم پخش می شود. به عبارت دیگر callerid بین زنگ اول و دوم به دست ما می‌رسد. در نتیجه در این حالت باید تنظیمات زیر را به فایل chan_dahdi.conf که در مسیر /etc/asterisk/ قرار دارد، اضافه نمایید.

usecallerid=yes
cidsignalling=dtmf
cidstart=ring
hidecallerid=no


حالت دوم: Caller ID با سیگنالینگ DTMF قبل از زنگ:

Callerid2

در این حالت callerid قبل از اولین ringtone و با سیگنالینگ dtmf منتشر می‌شود. پس باید تنظیمات زیر را برای این حالت در نظر می‌گیریم:

usecallerid=yes
cidsignalling=dtmf
cidstart=dtmf
hidecallerid=no


حالت سوم: Caller ID با سیگنالینگ FSK بعد از زنگ:

Callerid3

در این حالت ابتدا یک ringtone پخش می‌شود سپس callerid با سیگنالینگ fsk ارسال شده و بعد از آن ringtone دوم پخش می‌شود. در واقع callerid بین زنگ اول و دوم به دست ما می‌رسد. بنابراین تنظیمات زیر را برای این حالت در نظر می‌گیریم:

usecallerid=yes
cidsignalling=bell
cidstart=ring
hidecallerid=no


حالت چهارم: Caller ID با سیگنالینگ FSK قبل از زنگ:

Callerid4

در این حالت callerid قبل از حتی اولین ringtone و با سیگنالینگ fsk منتشر می‌شود. پس تنظیمات زیر را برای این حالت در نظر می‌گیریم.

usecallerid=yes
cidsignalling=bell
cidstart=dtmf
hidecallerid=no


منبع: VOIPIRAN