Задать вопрос

Как правильно обработать статус линии Asterisk?

Доброго времени суток! В Астериске новичок прошу сильно не ругаться. В гугле уже был.

Суть такова. Имеется 2 АТС
1 астер на нем крутится большинство пользователей.
2 БИТ.АТС на которую направляются внешние звонки.

До связи с БИТ.АТС если конечный телефон занят отключен и т.д астер говорил соответствующие фразы, сейчас нет, видимо я поломал диалплан под это дело. Прошу помощи

[call-out]
;Приложения

;Звонок на внутренний номер
;Включение записи

exten => _5XXX,1,Dial(SIP/${EXTEN}@bit)
exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
;ГРУППЫ

exten => 456,1,Dial(SIP/319&SIP/320&SIP/321,,m(default))
exten => 457,1,Dial(SIP/137&SIP/138&SIP/139,,m(default))
exten => 603,1,Dial(SIP/603@bit)
exten => 458,1,Dial(SIP/${EXTEN}@bit)

exten => _XXX,n,Dial(SIP/${EXTEN},15)
exten => _XXXX,n,Dial(SIP/${EXTEN},15)
exten => _XXX,n,Set(dstNUM=${EXTEN})
;Проверяем статус пира, существует или нет
exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1)
;Проверяем статус пира, подключен или нет
exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1)
;Проверяем канал на занятость
exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s)
;Выводим в лог значение функции ChanIsAvail, нужно только для отладки, можно удалить строку
exten => _XXX,n,Verbose(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========)
;Если функция возвращает 2 или 3, значит абонент занят
exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1)
exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1)
exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 6]?num-BUSY,1)
;Обрабатываем остальные статусы
exten => _XXX,n,Goto(num-${DIALSTATUS},1)

;Если номера не существует говорим "Ошибочный номер, попробуйте еще раз"
exten => num-not-exist,1,Wait(2)
exten => num-not-exist,n,Playback(invalid)
;Если номер не подключен, говорим "Набранный вами номер отключен, проверьте номер и повторите попытку
exten => num-not-connected,1,Wait(2)
exten => num-not-connected,n,Playback(ss-noservice)
;Если номер занят, говорим "Занято"
exten => num-BUSY,1,Wait(2)
exten => num-BUSY,n,Playback(vm-isonphone)
;Если еще по какой-то причине будет статус CHANUNAVAIL, говорим, что номер не доступен в данный момент
exten => num-CHANUNAVAIL,1,Wait(2)
exten => num-CHANUNAVAIL,n,Playback(vm-isunavail)
;Если еще по какой-то причине будет статус CHANUNAVAIL, говорим, что номер не доступен в данный момент
exten => num-UNKNOWN,1,Wait(2)
exten => num-UNKNOWN,n,Playback(vm-isunavail)
  • Вопрос задан
  • 2027 просмотров
Подписаться 1 Средний 10 комментариев
Решения вопроса 1
@trjflash Автор вопроса
Решение в комментариях
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы