Страница 1 из 1

Интеграция с CRM

СообщениеДобавлено: 27 июл 2018, 11:53
thiskiralex
Добрый день, использую чистый Астериск уже 5 лет. Прочитал 3 книжки, но всеже есть моменты которые я еще не осилил.

Вообщем есть такая задача. Нужно организовать работу телефонии через API с CRM системой.
На разных этапах звонка нужно слать разные запросы.
Запросы я посылаю через функцию SHELL() вызовом внешнего скрипта и передачи ему параметров.

Схема звонка
- начался звонок (для каждого сотрудника шлется запрос с его ${EXTEN})
- один из сотрудников снял трубку для него шлется ACCEPTED, для остальных COMPLETED + Cancelled
- звонок завершен шлется COMPLETED + Success и ${EXTEN} сотрудника, который разговаривал

У меня используется сеть серверов, и путь звонка может уходить на другой сервер по IAX2, плюс это работает через Queue().
В очереди в качестве мембера я указываю LOCAL\EXTEN@to_crm.
Получается для каждого вызова из очереди я знаю EXTEN сотрудника и могу обработать.
Но вот дальше начинаются проблемы, я не до конца не понимаю как работает Dial().
Поскольку после Dial() и того как успешно произошел ANSWER\BUSY\etc.. диалплан завершается и я могу дальше отловить только exten = h или опцию M(), но это уже происходит сразу как только разговор начался.
Тоесть диалплан после Dial продолжается только если за время Timout некто не ответил и опция e или g не помогают.

Получается очень не красивый велосипед, и как мне отловить момент когда положили трубку?

Re: Интеграция с CRM

СообщениеДобавлено: 27 июл 2018, 12:40
zzuz
DumpChan() вам в помощь.

Re: Интеграция с CRM

СообщениеДобавлено: 27 июл 2018, 13:32
thiskiralex
Сейчас подставил звонок напрямую на CHAN_SIP и после завершения разговора диалплан продолжился.
Вот такой вопрос тогда, как правильно заканчивать диалплан экстеншена.
Сейчас я везде в конце каждого вставляю same = Macro(hangup)
Поскольку не всегда без него был звук завершения разговора.

Код: выделить все
[macro-hangup]
exten = s,1,NoOp(LETS HANGUP)
same  = n,Answer()
same  = n,Playtones(busy)
same  = n,Wait(5)
same  = n,Hangup()

Re: Интеграция с CRM

СообщениеДобавлено: 30 июл 2018, 15:29
whoim
на всем моем опыте h отрабатывал всегда. Момент ответа (и выдирания номера ответившего) через опцию dial и макрос.

Re: Интеграция с CRM

СообщениеДобавлено: 31 июл 2018, 15:00
awsswa
Перед Dial
Set(CHANNEL(hangup_handler_push)=sub-macro-hangupcall,s,1)

[sub-macro-hangupcall]
exten => s,1,NoOp(=DIALSTATUS=${DIALSTATUS}=)
exten => s,n,Return()

и ловите без всяких h