Есть задача по интеграции CRM и Asteriska.
Для реализации этого был выбран путь GET-POST запросов.
Логика следующая:
1.Пришел звонок
2.Запрос на сервере с номером звонящего
3.Определение новый или существующий клиент
4.Отправка звонка в соответствующий правилу подпункт.
Вот код Extension_Custom
[20003-incoming] exten => s,1,Set(CALLERID(name)=${CURL(http://trulala/call?tel={CALLERID(num)})})
exten => s,2,Set(managernumber=${CUT(CALLERID(name),>,3)})
exten => s,3,Set(managernumber=${CUT(managernumber,\",6)})
exten => s,4,Set(managerID=${CUT(CALLERID(name),>,3)})
exten => s,5,Set(managerID=${CUT(managerID,\",4)})
exten => s,6,Set(__Clientnum=${CALLERID(num)})
exten => s,7,Set(CALLERID(name)=${CUT(CALLERID(name),>,3)})
exten => s,8,Set(CALLERID(name)=${CUT(CALLERID(name),\",2)})
exten => s,n,ExecIf($[ "${managernumber}" = "null" ] ?Gosub(new-client,s,1))
exten => s,n,ExecIf($[ "${CALLERID(name)}" = "null" ] ?Gosub(new-client,s,1))
exten => s,n,Dial(Local/${managernumber},,mM(manager-answered,))
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Gosub(manager-busy,s,1)
exten => s-BUSY,1,Gosub(manager-busy,s,1)
exten => s-UNKNOWN,1,Gosub(manager-busy,s,1)
exten => s-CONGESTION,1,Gosub(manager-busy,s,1)
exten => s-CHANUNAVAIL,1,Gosub(manager-busy,s,1)
exten => h,1,Set(rtn=${CURL(http://trulala/ecall,Status=${CDR(disposition)} exten1=${CDR(dstchannel)} exten=${CDR(dst)} & cidnum=${CALLERID(num)}&AllCallTime=${CDR(duration)}&CallTime=${CDR(billsec)})})
exten => h,2,Wait(5)
exten => h,3,NoOp(CURL-RESPONSE: ${rtn})
exten => s,n,Hangup()
[new-client]
exten => s,1,Dial(local/603@from-internal,,)
exten => h,1,Set(rtn=${CURL(http://trulala/ecall,Status=${CDR(disposition)} exten1=${CDR(dstchannel)} exten=${CDR(dst)} & cidnum=${CALLERID(num)}&AllCallTime=${CDR(duration)}&CallTime=${CDR(billsec)})})
exten => h,2,Wait(5)
exten => h,3,NoOp(CURL-RESPONSE: ${rtn})
[manager-busy]
exten => s,1,Dial(local/603@from-internal,,)
exten => h,1,Set(rtn=${CURL(http://trulala/ecall,Status=${CDR(disposition)} exten1=${CDR(dstchannel)} exten=${CDR(dst)} & cidnum=${CALLERID(num)}&AllCallTime=${CDR(duration)}&CallTime=${CDR(billsec)})})
exten => h,2,Wait(5)
exten => h,3,NoOp(CURL-RESPONSE: ${rtn}))
Код работает. Стала проблема в том что POST запросом нужно передать информацию о завершенном звонке. Длительность, кто поднял трубку, стсатус звонка и тд и тп...
У меня не получается получить информацию о том кто поднял трубку... Я ее получаю и пишет мне что трубку взял "s" или группа 603. В CDR информация аналогична. Голова уже квадратная. Не знаю куда копать.
Смог победить немного другим способом, а именно:
[new-call]
exten => s,1,Set(DIALGROUP(test,add)=Local/203)
exten => s,n,Set(DIALGROUP(test,add)=Local/200)
exten => s,n,Set(DIALGROUP(test,add)=Local/201)
exten => s,n,Dial(${DIALGROUP(test)})
exten => h,1,Set(rtn=${CURL(http://trulala/ecall,Status=${CDR(disposition)} AnswerPeer=${DIALEDPEERNUMBER} CallerNum=${CALLERID(num)} CallTime=${CDR(duration)} TellTime=${CDR(billsec)})})
exten => h,2,Wait(1)
exten => h,3,NoOp(CURL-RESPONSE: ${rtn})
Сначала я добавил номера в группу, а потом позвонил на группу.
С Макросом вопрос и не смотрел, а вот по поводу ${DIALEDPEERNUMBER} я получал всю туже группу 603.
..............
symon ( 2017-01-17 14:42:06 +0400 )редактировать