Доброго времени суток. Есть астер, есть Duhdi канал (основной) и есть Sip-канал(резервный). Исходящие вызовы должны ходить через основной, если он доступен, а если недоступен - автоматом уходить на резервный. Входящие с двух каналов обрабатываются одинаково (это работает). Вопрос - как проверить состояние канала и перебросить вызов при необходимости? Заранее спасибо.
Функция SIPPEER, параметр 'status'. Предполагается, что для этого пира должен быть включен 'qualify'.
exten => 606060,1,NoOp( check peer status )
same => n,NoOp( [sipnet] SIPPEER info: ${SIPPEER(sipnet,status)})
same => n,NoOp( ;===================================== )
same => n,NoOp( [megavoip] SIPPEER info: ${SIPPEER(megavoip,status)})
same => n,NoOp( ;===================================== )
same => n,GotoIf($[${SIPPEER(sipnet,status)}= "OK"]?sndial:mv)
same => n(sndial),Dial(SIP/sipnet/${EXTEN},5)
same => n,Hangup
same => n(mv),NoOp( [sipnet] is UNREACHABLE, trying [megavoip] in 1 second ... )
same => n,Wait(1)
same => n,GotoIf($[${SIPPEER(megavoip,status)}= "OK"]?mvdial:hang)
same => n(mvdial),Dial(SIP/megavoip/${EXTEN},5)
same => n,Hangup
same => n(hang),Playback(all-peers-are-dead)
same => n,Hangup
Задан: 2014-11-21 13:52:00 +0400
Просмотрен: 1,296 раз
Обновлен: Nov 21 '14
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
${DIALSTATUS}
tesak89 ( 2014-11-21 14:11:39 +0400 )редактироватьА можно чуть подробнее? Сейчас обработка такая:
exten => 9X.,280,Dial(DAHDI/g1/${numtopri},35,S(3600)gm) ;exten => _9X.,280,Dial(SIP/${EXTEN:1}@mtt-out,35,S(3600)gm) exten => _9X.,281,Set(CDR(userfield)=${FullName}) exten => _9X.,282,Set(CDR(fromext)=${oldcallerid}) exten => 9X.,283,Set(CDR(toext)=${num}) exten => _9X.,284,Set(CDR(dialstatus)=${DIALSTATUS}) exten => _9X.,285,GoTo(s9-${DIALSTATUS},1) exten => _9X.,286,Hangup
В какое место и как именно вставить эту проверку DialStatus? Между первой и второй строкой вставить еще одну: exten => _9X.,281,GoTo(sX-${DIALSTATUS},1) и потом после теперь уже третьей(ныне закомментированной) еще одну: exten => sX-ANSWER,1 Отсутствующий третий параметр скажет системе не делать ничего и обработка просто перейдет к следующему шагу конфига. Все правильно?
Arxangel06 ( 2014-11-21 14:34:19 +0400 )редактироватьДелаете Dial через один транк, в зависимости от DIALSTATUS либо завершаете вызов, либо Dial через другой.
tesak89 ( 2014-11-21 15:23:49 +0400 )редактироватьоно и так будет по приоритетам работать без изврата, просто 2 последовательные вызовы Dial.
Zavr2008 ( 2014-11-21 17:28:41 +0400 )редактироватьБудет. Но без проверки после первого Dial, если вызываемый абонент положит трубку, пойдет второй Dial ему же, через другой транк.
tesak89 ( 2014-11-22 17:12:18 +0400 )редактировать