13 авг. 2020 г.

Передача информации в CRM при снятии трубки оператором очереди в Asterisk

Задача: Отдавать Web-based CRM информацию о звонке в очередь в момент снятия трубки. Решение: Макрос, вызываемый при соединении агента. Указывается либо в параметрах очереди (параметр membermacro или membergosub) или в вызове приложения queue(). У меня заработало в макросе, указанном в вызове приложения. 
Отдавать нужно: 
1. Номер того, кто звонит 
2. Номер того, кто снял трубку. 
3. Уникальный ID звонка. 
Если с 2-м и 3-м параметрами все хорошо, они в макросе определены, причем определены для конкретного канала, то callerid(num) неожиданно возвращает номер агента очереди. Вероятно, это выглядит как исходящий звонок агенту. Но нам нужен callerid(num), который был установлен, когда звонок поступил в очередь. Делаем в 2 этапа, через так называемые Variable inheritance - https://wiki.asterisk.org/wiki/display/AST/Variable+Inheritance 

1.Контекст очереди: 

same => n,Set(_MYCID=${CALLERID(num)}) 
same => n,Queue(free,t,,,1800,,HookCRM) 

2.Контекст макроса: 

[macro-HookCRM] 
exten => s,1,Verbose("membername - ${MEMBERNAME},uniqueid - ${UNIQUEID},callerid - ${MYCID}") 
same => n,Verbose(0,${CURL(http://192.168.0.1/api/call?operator_id=${MEMBERNAME}&call_number=${MYCID}&call_id=${UNIQUEID})})