Я скрываю номер от менеджера который использует Click2call в CRM.
Оператор нажимает на кнопку Click2call, поступает звонок в софтфон от Click2Call, оператор принимает внутренний вызов и дальше ожидает соединения с клиентом.
Так вот номер клиента не должен отображаться для менеджера. (политика компании)
Проблема в том, что например LinPhone скрывают номер подписывая его Click2Call, а вот Zoiper показывает номер игнорируя настройку
same => n,Set(CALLERID(num)=Click2Call).
set-static-callerid - контекст указанный в php скрипте для Click2Call
Самый простой контекст
[set-static-callerid]
exten => _X.,1,NoOp(Обработка вызова для Click2Call)
same => n,Set(CALLERID(name)=Company)
same => n,Set(CALLERID(num)=Click2Call)
same => n,Set(REAL_NUMBER=${EXTEN})
same => n,MixMonitor(/var/spool/asterisk/monitor/${STRFTIME(${EPOCH},,%Y/%m/%d)}/out-${EXTEN}-${CALLERID(num)}-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}.wav,b)
same => n,Goto(from-internal,${EXTEN},1)
Все софтфоны на MacOS не показывают набираемый номер, но вот Zoiper игнорирует изменения, а это условно утечка номера с базы-клиентов компании.
Возвращаю в контекст from-internal для того чтобы дальше Астериск рулил всей маршрутизацией.
Другой вариант
[set-static-callerid]
exten => _X.,1,NoOp(Обработка вызова для Click2Call)
same => n,Set(CALLERID(name)=Company)
same => n,Set(CALLERID(num)=Click2Call)
; Модификация заголовков To, Contact и Request-URI
same => n,Set(PJSIP_HEADER(update,To)=<sip:Click2Call@мойдомен>)
same => n,Set(PJSIP_HEADER(update,Contact)=<sip:Click2Call@мойдомен>)
same => n,Set(PJSIP_HEADER(update,Request-URI)=<sip:Click2Call@мойдомен>)
same => n,Set(CALLERID(num-pres)=prohib)
same => n,Set(CALLERID(name-pres)=prohib)
same => n,Set(REAL_NUMBER=${EXTEN})
same => n,MixMonitor(/var/spool/asterisk/monitor/${STRFTIME(${EPOCH},,%Y/%m/%d)}/out-${REAL_NUMBER}-${CALLERID(num)}-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}.wav,b)
same => n,Goto(from-internal,${EXTEN},1)
Уже и делал через тяжёлую наркоманию с использованием AGI скрипта
#!/usr/bin/php
<?php
require('phpagi.php');
$agi = new AGI();
$callerid_name = "Company";
$callerid_num = "Click2Call";
$real_number = $agi->get_variable("REAL_NUMBER")["data"];
// Устанавливаем CallerID
$agi->set_variable("CALLERID(name)", $callerid_name);
$agi->set_variable("CALLERID(num)", $callerid_num);
// Заменяем SIP-заголовки
$agi->set_variable("PJSIP_HEADER(add,To)", "<sip:anonymous@pbx-my.stri****.com>");
$agi->set_variable("PJSIP_HEADER(add,Remote-Party-ID)", "<sip:anonymous@pbx-my.stric****.com>");
$agi->set_variable("PJSIP_HEADER(add,P-Asserted-Identity)", "<sip:anonymous@pbx-my.stri****.com>");
$agi->set_variable("PJSIP_HEADER(add,Contact)", "<sip:anonymous@pbx-my.stri*****.com>");
// Log
$agi->verbose("AGI: Обработка вызова на $real_number");
// Передаём реальный номер для использования в диалплане
$agi->set_variable("DIAL_NUMBER", $real_number);
exit(0);
?>
Контекст под AGi скрипт
[set-static-callerid]
exten => _X.,1,NoOp(Обработка вызова через AGI)
same => n,Set(REAL_NUMBER=${EXTEN})
same => n,AGI(/var/lib/asterisk/agi-bin/click2call-handler.php)
same => n,Set(PJSIP_HEADER(remove,Remote-Party-ID)=)
same => n,Set(PJSIP_HEADER(remove,P-Asserted-Identity)=)
same => n,Set(PJSIP_HEADER(remove,Contact)=)
same => n,Set(PJSIP_HEADER(remove,To)=)
same => n,Set(PJSIP_HEADER(add,From)=<sip:anonymous@yourdomain.com>)
same => n,Set(PJSIP_HEADER(add,P-Asserted-Identity)=<sip:anonymous@yourdomain.com>)
same => n,MixMonitor(/var/spool/asterisk/monitor/${STRFTIME(${EPOCH},,%Y/%m/%d)}/out-${REAL_NUMBER}-${CALLERID(num)}-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}.wav,b)
same => n,Dial(Local/${DIAL_NUMBER}@from-internal,,t)
same => n,Hangup()
Что я упускаю, подскажите куда еще смотреть чтобы скрыть набираемый номер непосредственно в Zoiper...