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

Проверка доступности канала

Добавлено: 12 фев 2013, 15:06
ballrak
Есть телефонная линия по протоколу SIP - основной канал. И резервная телефония через аналоговые лини.
У провайдера SIP статический ip, и у нашего Asterisk тоже. Провайдер идентифицирует нас по CALLERID и ip.
Как сделать автоматический переход при недоступности SIP на резервный канал, и если основной канал стал доступным обратный переход.

Re: Проверка доступности канала

Добавлено: 12 фев 2013, 16:10
awsswa
chanisavail

Re: Проверка доступности канала

Добавлено: 12 фев 2013, 16:11
ded
exten => _X.,1,Set(${CALLERID(num)}=123456)
exten => _X.,n,Dial(SIP/provider/${EXTEN})
exten => _X.,n,Dial(DAHDI/1/${EXTEN})
exten => _X.,n,Dial(DAHDI/2/${EXTEN})

Re: Проверка доступности канала

Добавлено: 14 фев 2013, 10:14
ballrak
exten => _X.,1,Set(${CALLERID(num)}=123456)
exten => _X.,n,Dial(SIP/provider/${EXTEN})
exten => _X.,n,Dial(DAHDI/1/${EXTEN})
exten => _X.,n,Dial(DAHDI/2/${EXTEN})
Я правильно понял, если SIP канал недоступен или просто занят переходим на аналоговый канал?
Если да то мне этот вариант не подходит, по SIP исходящие звонки дешевле, и мне нужно переключение только при недоступности канала.
Попробовал разобраться с chanisavail. Хотел проверить как он вообще работает, на обычных телефонах.
exten => 401,1,ChanIsAvail(SIP/401,j)
exten => 401,n,SayNumber(${AVAILSTATUS})
exten => 401,n,Dial(SIP/401,10,t)
exten => 401,n,Hangup()
exten => 401,102,Dial(SIP/403,10,t)
exten => 401,103,Hangup()
Выключал 401 (чтобы вообще не регистрировался), со включенным проверял. Всегда один и тот же статус 0.
Нашел что он обозначает 0 AST_DEVICE_UNKNOWN - "Unknown"; channel is valid, but unknown state.
Даже ChanIsAvail(SIP/любой несуществующий номер,j), все равно статус 0.
Что я делаю неправильно?

Re: Проверка доступности канала

Добавлено: 14 фев 2013, 10:51
zzuz

Код: Выделить всё

exten => s,n,ChanIsAvail(SIP/401)
exten => s,n,Set(FREE_TRUNK=${CUT(AVAILCHAN,,1)})
exten => s,n,GotoIF($["${EXISTS(${FREE_TRUNK)}" = "0"]?DIAL_DAHDI)

Re: Проверка доступности канала

Добавлено: 14 фев 2013, 15:34
awsswa
exten => _9XXXXXXX,1,Macro(stat-out-allcall,${EXTEN:1:7})
[macro-stat-out-allcall]
exten => s,1,ChanIsAvail(SIP/2009XXX-1&SIP/2009XXX-2&SIP/2009XXX-3,as)
exten => s,n,NoOp(Availchan is ${AVAILCHAN}) ; будет выведено какой канал доступен
exten => s,n,NoOp(Availstatus is ${AVAILSTATUS}) ; будет указан статус канала
exten => s,n,Dial(${CUT(AVAILCHAN,,1&2)}/${ARG1})
exten => s,n,Hangup()

Функция ChanIsAvail - проверяет статус линии и на выходе выдает варианты:
1-зарегестрирован, не звонит
2-зарегестрирован и используется (если call-limit = 1 не установлен)
3-зарегестрирован и используется (call-limit = 1)
5-не зарегестрирован
6-зарегестрирован и звонит
Узнаем статус линии - если статус 1 или 2 то звоним по ней.

Re: Проверка доступности канала

Добавлено: 15 фев 2013, 09:13
ballrak
awsswa Спасибо ;) . Работает. Проблема была с опцией в ChanIsAvail. Если указываешь опцию s то Availstatus принимает значения отличные от нуля. Если ее нет то при всех условиях 0.
У ChanIsAvail две опции.
s - Рассматривает канал как недоступный, если он всегда используется.
j - Включает поддержку перехода на команду с приоритетом n+101, если нет доступных каналов.
А можно их вместе использовать? Просто тогда можно было бы не использовать переход GotoIF, а сразу резервный канал писать на n+101 строке.