Возникла проблема, при звонках в город или на сотовый оператор не получает сообщение о статусе номера(звонке). То есть набрав номер и начав звонок не знает существует номе или нет. Подскажите, пожалуйста, как можно сделать данную проверку. Поискав в интернете нашел упоминания о переменной ${DIALSTATUS} (https://rl5d.blogspot.com/2012/07/asterisk.html), но не могу придумать макрос проверки статуса и сообщения о состояние набранного номера.
Вот набросок идеи проверки, хотелось бы это превратить в универсальный макрос проверки статуса с озвучкой оператору состояния звонка и последующим действием.
Например, если номера нет, то внести его в базу проблемных номеров. Если номер не доступен положить трубку, если клиент приял звонок начать запись разговора (но это уже действия седлающего макроса с записью в CDR и CEL для возможности в будущем анализировать статистику звонков). Буду благодарен за любые идеи, уже давно пытаюсь найти решение этой проблемы.
Код: Выделить всё
[from-gsm]
exten => _8XXXXXXXXXX,1,NoOp(GSM Trunk System)
same => n,Dial(${trunk_gsm}/${EXTEN:0},,g)
same => n,NoOp(${DIALSTATUS})
;Сигнал занято. При наборе номера возвращено сообщение о занятости абонента.
same => n,Gotoif( $["${DIALSTATUS}" = "BUSY"]?stop)
;Нет ответа. Дозвон произошел, но абонент не ответил за определенное время
same => n,Gotoif( $["${DIALSTATUS}" = "NOANSWER"]?noanswer)
;Звонок отменен. Дозвонились, но повесили трубку либо Вы ли с другой стороны
;CANCEL
;Неизвестен адресат. Номер не определен.
;CONGESTION
;Канал для звонков недоступен. Скорее всего удаленный пир не зарегистрирован.
same => n,Gotoif( $["${DIALSTATUS}" = "CHANUNAVAIL"]?chanunavail)
;Приватный режим, типа "Не беспокоить"
;DONTCALL
;Приватный режим, все входящие звонки отправляются на некий сервис, который их обслужит
;TORTURE
;Ошибка, неверно набранный номер (добавлено в Asterisk 1.4.1, SVN r53135-53136)
same => n,Gotoif( $["${DIALSTATUS}" = "INVALIDARGS"]?chanunavail)
;Ответ на звонок получен. Удачный дозвон.
;ANSWER
same => n, NoOp(абонент доступен)
same => n(stop),Hangup
same => n(chanunavail), NoOp(абонент недоступен)
same => n, Playback(user-unavailabel)
same => n,Hangup
same => n(noanswer), NoOp(абонент не отвечает)
same => n,Playback(user-not-answer)
same => n,Hangup