یکی از مشکلاتی که در استریسک با آن مواجه هستیم و تقریبا یک مشکل غیر قابل حل می باشد عدم نمایش صحیح شماره تماس گیرنده در زمان انتقال تماس است . به این ترتیب که داخلی A یک تماس با داخلی B میگیرد کالر آی دی که برای داخلی B نمایش داده میشود مشخصات تلفن A می باشد و حالا داخلی B تماس را از طریق کد انتقال با هماهنگی (Attended Transfer) به داخلی C انتقال می دهد; کالر آی دی که برای داخلی C نمایش داده می شود همان کالر آی دی داخلی B است ما در بسیاری از موارد نیاز داریم کالرآی دی تماس گیرنده اصلی را ببینیم. البته در واقع این مشکل Asterisk نیست چون Asterisk یک مکز تلفن B2BUA یا (Back To Back User Agent) است.
برای حل این مشکل ما دو راه را پیشنهاد می کنیم:
روش اول: استفاده از هدر “P-Asserted-Identity” در SIP به این صورت که اگر مقدار آن ارسال شده باشد تلفن به جای هدر “From “ محتوای “P-Asserted-Identity”را به عنوان تماس گیرنده نمایش می دهد برای تنظیم ارسال این هدر (در Asterisk-1.8) گزینه زیر را به sip.conf اضافه می کنیم:
[general] . . . sendrpid=pai ...
بعد در تلفن اگر قابلیت تنظیم Caller ID Header بود به RPID-PAI-FROM تغییر می دهیم.
روش دوم: اصلاح کالر آی در Dialplan
* نکته:در Dialplan اگر نام Variable را با prefix “ـ” (یک زیر خط) ذخیره کنیم فقط در یک زیر شاخه کانال می توان فراخوانی کرد اما اگر با prefix “__” (دو زیر خط) ذخیره کنیم در تمام انشعاب های یا دز حقیقت در تمام کانالهایی که از کانال اصلی ارث می برند می تواند فراخوانی بشود
حال برای اصلاح کالر آی دی در تماس داخلی به داخلی به این ترتیب عمل می کنیم در ابتدای کانتکسی که شروع شماره گیری داخلی هاست دوخط زیر را اضافه کنید:
[from-internal] exten = _X.,1,NoOp() exten = _X.,n,Set(__CID=${IF($["${CID}"==""]?${CALLERID(all)}:${CID})}) exten = _X.,n,Set(CALLERID(all)=${CID}) . . exten = _X.,n,Dial(SIP/${EXTEN})
و برای تماسهای ورودی نیز در ابتدای کانتکس کد زیر را اضافه کنید:
[from-pstn] exten = s,1,NoOp() exten = s,n,Set(__CID=${CALLERID(all)}) . . .
و در پایان dialplan را reload کنید