Столкнулся с проблемой передачи номера клиента при переводах Attended Transfer. Схема входящего звонка
А(клиент) —-> Б(оператор-1) —> переводит *2 ——-> В(оператор-2)
При таком переводе оператор-2 видит, что ему звонит оператор-1(номер Б). Эту проблему можно решить, установив номер клиента в хидерах PAI/RPID в INVITE на оператор-2. Это работает, если на телефоне оператора-2, установить брать номер из полей P-Asserted-Identity/Remote-Party-ID. Но в моей схеме оператор-2 находится на удаленной АТС, которая берет номер звонящего только из From.
По документации для обхода этой проблемы нужно в Dial передать опцию o
- o: Восстановить алгоритм работы с CallerId, как в версии v1.0, для Asterisk v1.2.
Но у меня установка такой опции не работала. Проверялось на Астериск-16
Путем тестов подобрал рабочий dialplan, в котором передается номер клиента в поле From
[from-pstn] exten => _X.,,1,NoOP(-->call from ${CALLERID(number)} to ${EXTEN}<--) same => n,Set(__TRANSFER_CONTEXT=transferContext) same => n,Set(__client_aon=${CALLERID(number)}) same => n,Dial(SIP/101&SIP/102&SIP/103,60,Tt) same => n,Hangup() [transferContext] exten => _X.,1,NoOP(${CALLERID(number)} to ${EXTEN}) same => n,Dial(SIP/${EXTEN},180,tTB(changeTransferAON,s,1)o()) same => n,Hangup() [changeTransferAON] exten => s,1,NoOP() same => n,Set(CALLERID(number)=${client_aon}) same => n,Set(CALLERID(name)=${client_aon}) same => n,Return()
from-pstn — контекст приема входящих звонков. Вызываются три оператора 101,102,103.
transferContext — контекст перевода, в котором перед отправкой INVITE для канала оператора-2 устанавливается номер клиента.