управление выбором модема занимается первый астериск.
Все работает, но есть одна проблема: если на втором астериске отваливается нужный модем, то на первом получаем
-- Executing [s@macro-dialout-trunk:22] Dial("SIP/103-00000607", "SIP/KS/0671234567,300,") in new stack
== Using UDPTL TOS bits 184
== Using UDPTL CoS mark 5
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Called SIP/KS/0671234567
-- Got SIP response 603 "Declined" back from 192.168.0.70:5060
-- SIP/KS-00000608 is busy
== Everyone is busy/congested at this time (1:1/0/0)
-- Executing [s@macro-dialout-trunk:23] NoOp("SIP/103-00000607", "Dial failed for some reason with DIALSTATUS = BUSY and HANGUPCAUSE = 21") in new stack
== Using UDPTL TOS bits 184
== Using UDPTL CoS mark 5
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Called SIP/KS/0671234567
-- Got SIP response 603 "Declined" back from 192.168.0.70:5060
-- SIP/KS-00000608 is busy
== Everyone is busy/congested at this time (1:1/0/0)
-- Executing [s@macro-dialout-trunk:23] NoOp("SIP/103-00000607", "Dial failed for some reason with DIALSTATUS = BUSY and HANGUPCAUSE = 21") in new stack
Пытался на втором задавать значение переменной DIALSTATUS, но оно не возвращается на первый
Из-за этой проблемы следующий транк не обрабатывается
-- Executing [s@macro-dialout-trunk:24] Goto("SIP/103-00000607", "s-BUSY,1") in new stack
-- Goto (macro-dialout-trunk,s-BUSY,1)
-- Executing [s-BUSY@macro-dialout-trunk:1] NoOp("SIP/103-00000607", "Dial failed due to trunk reporting BUSY - giving up") in new stack
-- Executing [s-BUSY@macro-dialout-trunk:2] PlayTones("SIP/103-00000607", "busy") in new stack
-- Executing [s-BUSY@macro-dialout-trunk:3] Busy("SIP/103-00000607", "20") in new stack
== Spawn extension (macro-dialout-trunk, s-BUSY, 3) exited non-zero on 'SIP/103-00000607' in macro 'dialout-trunk'
== Spawn extension (from-internal, 067123456, 5) exited non-zero on 'SIP/103-00000607'
-- Executing [h@from-internal:1] Hangup("SIP/103-00000607", "") in new stack
== Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/103-00000607'
-- Goto (macro-dialout-trunk,s-BUSY,1)
-- Executing [s-BUSY@macro-dialout-trunk:1] NoOp("SIP/103-00000607", "Dial failed due to trunk reporting BUSY - giving up") in new stack
-- Executing [s-BUSY@macro-dialout-trunk:2] PlayTones("SIP/103-00000607", "busy") in new stack
-- Executing [s-BUSY@macro-dialout-trunk:3] Busy("SIP/103-00000607", "20") in new stack
== Spawn extension (macro-dialout-trunk, s-BUSY, 3) exited non-zero on 'SIP/103-00000607' in macro 'dialout-trunk'
== Spawn extension (from-internal, 067123456, 5) exited non-zero on 'SIP/103-00000607'
-- Executing [h@from-internal:1] Hangup("SIP/103-00000607", "") in new stack
== Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/103-00000607'
мне надо управлять транками для направлений с первого астериска, а модемы подключены ко второму
на астериске с модемами анализирую DongleStatus, но как на выходе вручную указать для основного астериска DIALSTATUS (и HANGUPCAUSE)?
вообще-то возврат BUSY в случае отсутствия возможности соединения вторым астериском - не правильно. Как исправить этот код возврата на основной астериск?
| Цитата: |
| Проверяйте статус до звонка - ставьте call-limit=1 |
этим занимается FreePBX. Если разговор идет, корректно выбирается следующий транк
Added after 11 minutes:
| Цитата: |
| по chanisavail узнаете занята или свободна линия |
на астериске с модемами анализирую DongleStatus, но как на выходе вручную указать для основного астериска DIALSTATUS (и HANGUPCAUSE)?
бывает ситуация когда один первый из возможных модемов отвалился. Тогда второй астериск возвращает BUSY и первый даже не пытается звонить через второй модем
например. Направление1 -> транк1(модем1), транк2(модем2)
если транк1 занят (идет разговор), то используется транк2. Так и должно быть
если модем1 отвалился. Направление1 -> транк1(модем1) - [возврат BUSY] и астериск 1 не пытается звонить через транк2.
| Цитата: |
| второй может спросить по chanisavail у него про занятость и сделать звонок со второго куда надо |
на втором опрашиваю DongleStatus (в данном случае даже лучше, чем chanisavail). Но решение куда направить звонок если модем отвалился мне надо чтоб принял первый астериск
Схема: На втором сервере с модемами - модем завис-занят - пох... самое главное статус занят (busy)
Первый делает звонок через второй, перед звонком спрашивает состояния через chanisavail на втором сервере и получает с него что канал занят - все !!! звонит через другой канал
| Цитата: |
| перед звонком спрашивает состояния через chanisavail на втором сервере |
как выполнить команду chanisavail на втором с первого?
если просто chanisavail(SIP/trunkname), то всегда получу положительный ответ
правьте под себя
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 то звоним по ней.
Последний раз редактировалось: awsswa (Чт Ноя 01, 2012 15:09)
решилось очень просто
на втором астериске сделал Congestion.
Можно также Hangup(20)
Hangup(код возврата Q931 http://eth0.org.ru/2009/voip/коды-отбоев-q931-disconnect-cause-codes) http://www.aa-asterisk.org.uk/index.php/Cause_Codes
Added after 9 minutes:
в любом случае получаю
AVAILCHAN=SIP/KS-0000191b
Availstatus = 158462624
exten => s,1,ChanIsAvail(SIP/sipnet-login1&SIP/sipnet-login2&SIP/sipnet-logint3,as)
| awsswa @ Чт Ноя 01, 2012 16:46 писал(а): |
| У вас peer называется KS-0000191b ? |
KS