Добрый день, использую чистый Астериск уже 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 не помогают.
Получается очень не красивый велосипед, и как мне отловить момент когда положили трубку?