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

Сбой на главной линии

Добавлено: 28 авг 2013, 16:50
Arty
Здравствуйте, хотел бы обсудить один момент.
В книге "Руководство по Asterisk", есть глава "Сбой на главной линии и LCR" и приводится конфигурация:
[tolllongdistance]
exten => _91NXXNXXXXXX,1,Dial(ZAP/g2/${EXTEN:1})
exten => _91NXXNXXXXXX,2,Congestion
[hsvlongdistance]
exten => _91256NXXXXXX,1,Dial(IAX/hsv/${EXTEN})
exten => _91256NXXXXXX,2,Dial(ZAP/g2/${EXTEN:1})
exten => _91NXXNXXXXXX,3,Congestion
[longdistance]
include => hsvlongdistance
include => tolllongdistance
тут учитывается LCR и сбой на главной линии.
Меня больше интересует именно использование резервного канала в случае сбоя на основном.
Возьмем этот кусок конфига:
[hsvlongdistance]
exten => _91256NXXXXXX,1,Dial(IAX/hsv/${EXTEN})
exten => _91256NXXXXXX,2,Dial(ZAP/g2/${EXTEN:1})
exten => _91NXXNXXXXXX,3,Congestion
В данной конфигурации, если вызов был неудачным(hsv), то вызов пойдет через второй(g2) канал.
Повлиять на поведение диалплана (в зависимости от причины) можно будет через DIALSTATUS который вернет Dial. Я правильно понимаю?

Re: Сбой на главной линии

Добавлено: 28 авг 2013, 17:02
awsswa
chanisavail более грамотное решение

Re: Сбой на главной линии

Добавлено: 29 авг 2013, 10:50
Arty
Доброе утро!
Что-то я видимо не до понял с ChanIsAvail.
Номер 4444 в SIP/zadarma это эхо тест. Если набрать 4444 через SIP/sipnet выдаст ошибку
-- Called SIP/sipnet/4444
-- Got SIP response 480 "No address found" back from 212.53.40.40:5060
-- SIP/sipnet-000001ff is circuit-busy
== Everyone is busy/congested at this time (1:0/1/0)
-- Auto fallthrough, channel 'SIP/sipavaya-000001fe' status is 'CONGESTION'
попробовал ChanIsAvail так:

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

exten => 4444,1,ChanIsAvail(SIP/sipnet&SIP/zadarma,j)
 same => n,NoOp( AVAILORIGCHAN  ==  ${AVAILORIGCHAN} )
 same => n,Set(theChannel=${AVAILORIGCHAN})
 same => n,Dial(${theChannel}/${EXTEN})
 same => n,Hangup()
 same => n+101,Playback(followme/sorry)
 same => n,Hangup()
набираю 4444, в cli я вижу такую же картину с "Got SIP response 480 "No address found" back from 212.53.40.40:5060"
Добавил опцию "а" (a - Check for all available channels, not only the first one), получил следующее
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Executing [4444@incoming_sip_avaya:1] ChanIsAvail("SIP/sipavaya-00000208", "SIP/sipnet&SIP/zadarma,aj") in new stack
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Executing [4444@incoming_sip_avaya:2] NoOp("SIP/sipavaya-00000208", " AVAILORIGCHAN == SIP/sipnet&SIP/zadarma ") in new stack
-- Executing [4444@incoming_sip_avaya:3] Set("SIP/sipavaya-00000208", "theChannel=SIP/sipnet&SIP/zadarma") in new stack
-- Executing [4444@incoming_sip_avaya:4] Dial("SIP/sipavaya-00000208", "SIP/sipnet&SIP/zadarma/4444") in new stack
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Called SIP/sipnet
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Called SIP/zadarma/4444
-- SIP/sipnet-0000020b answered SIP/sipavaya-00000208
-- Locally bridging SIP/sipavaya-00000208 and SIP/sipnet-0000020b
== Spawn extension (incoming_sip_avaya, 4444, 4) exited non-zero on 'SIP/sipavaya-00000208'
Попал вообще черт знает куда)) голосом предлагают просмотреть мой почтовый ящик и т.п.))

Re: Сбой на главной линии

Добавлено: 29 авг 2013, 10:55
Vlad1983
это адрес черт знает чего
-- Executing [4444@incoming_sip_avaya:4] Dial("SIP/sipavaya-00000208", "SIP/sipnet&SIP/zadarma/4444") in new stack

Re: Сбой на главной линии

Добавлено: 29 авг 2013, 11:11
Arty
Vlad1983 не могу не согласиться))
из книги "Asterisk: будущее телефонии"
ChanIsAvail()
Определяет, доступен ли в настоящее время заданный канал
ChanIsAvail(технология1/ресурс1[&технолоигя2/ресурс2...][,опции])
ChanIsAvail по идее должен был проверить оба канала и в переменную ${theChannel} должен был попасть или SIP/sipnet или SIP/zadarma, но при добавлении опции "a" получилась чушь "theChannel=SIP/sipnet&SIP/zadarma". А без опции "a" ChanIsAvail проверяет только первый канал.
С DIALSTATUS я делал так:

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

exten => 4444,1,Dial(${SIPTRUNK1}/${EXTEN})
 same => n,Goto(${DIALSTATUS})
 same => n(CHANUNAVAIL),Dial(${SIPTRUNK2}/${EXTEN})
 same => n,Hangup()
 same => n(CONGESTION),Dial(${SIPTRUNK2}/${EXTEN})
 same => n,Hangup()
 same => n(HANGUP),Hangup()
 same => n(BUSY),Hangup()
 same => n(NOANSWER),Hangup()
 same => n(CANCEL),Hangup()
и всё отрабатывало нормально. Вызов через SIP/sipnet (${SIPTRUNK1) не проходил, ${DIALSTATUS} получал CONGESTION и вызов уходил через SIP/zadarma (${SIPTRUNK2}).
Я затеял это всё потому, что иногда через sipnet не проходят вызовы и нужно чтоб при определённых условиях (CHANUNAVAIL/CONGESTION) вызов совершался через второго SIP провайдера.
Видимо ChanIsAvail не для моей ситуации.

Re: Сбой на главной линии

Добавлено: 29 авг 2013, 11:22
Vlad1983
книги пишутся для того чтоб их продавать они не содержат ответов на все вопросы, также как и универы и прочие учебные заведения (про курсы я вообще молчу) не могут дать знания на все случаи жизни

CLI> core show application ChanIsAvail
CLI> core show function CUT
можно ещё и
CLI> core show function RAND

Re: Сбой на главной линии

Добавлено: 29 авг 2013, 11:29
ded
Возможно проще дописать переходы по статусам CHANUNAVAIL/CONGESTION
Goto(s-CHANUNAVAIL,1)
Goto(s-CONGESTION,1)
exten => s-CHANUNAVAIL,1,Dial(SIP/nezadarma
exten => s-CONGESTION,1,Dial(SIP/nezadarma
на форуме и в интернете есть примеры.

Re: Сбой на главной линии

Добавлено: 29 авг 2013, 11:36
Arty
спасибо ded, я в курсе :)
тут просто для наглядности расписал.