AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Asterisk как trunk. Задать свой DIALSTATUS

Newbies/FAQ Forum 16 сообщений -
#1

Есть два астериска. На первом все внутренние номера и все sip провайдеры. На втором GSM модемы
управление выбором модема занимается первый астериск.

Все работает, но есть одна проблема: если на втором астериске отваливается нужный модем, то на первом получаем

-- 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


Пытался на втором задавать значение переменной 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'
#2

Модемы через dongle или datacard ? там команды есть donglestatus и datacardstatus
#3

dongle
мне надо управлять транками для направлений с первого астериска, а модемы подключены ко второму
на астериске с модемами анализирую DongleStatus, но как на выходе вручную указать для основного астериска DIALSTATUS (и HANGUPCAUSE)?
#4

без привязки в dongle|datacard: как в астериске (используемом как транк) задать свой DIALSTATUS для вызывающего
#5

честно - вообще не вижу проблемы - дает статус "занято" - просто правильно отрабатывайте события - не сигнальте в линию Executing [s-BUSY@macro-dialout-trunk:2] PlayTones("SIP/103-00000607", "busy") in new stack - по "занято" отправляйте на следующий транк и звоните с него
#6

обработка s-BUSY автоматически генерируется FreePBX. Для остальных транков все устраивает, не хочу делать переделывать оригинальный макрос dialout-trunk. Если идти этим путем в дальнейшем прийдется отказаться от FreePBX и в итоге будет сложней настраивать систему

вообще-то возврат BUSY в случае отсутствия возможности соединения вторым астериском - не правильно. Как исправить этот код возврата на основной астериск?
#7

Проверяйте статус до звонка - ставьте call-limit=1 и по chanisavail узнаете занята или свободна линия
#8

Цитата:
Проверяйте статус до звонка - ставьте call-limit=1

этим занимается FreePBX. Если разговор идет, корректно выбирается следующий транк

Added after 11 minutes:

Цитата:
по chanisavail узнаете занята или свободна линия

на астериске с модемами анализирую DongleStatus, но как на выходе вручную указать для основного астериска DIALSTATUS (и HANGUPCAUSE)?
#9

вы не поняли - если с модемами астериск занят - второй может спросить по chanisavail у него про занятость и сделать звонок со второго куда надо
#10

с модемами второй астериск. Все управление логикой звонков надо реализовать на первом
бывает ситуация когда один первый из возможных модемов отвалился. Тогда второй астериск возвращает BUSY и первый даже не пытается звонить через второй модем

например. Направление1 -> транк1(модем1), транк2(модем2)
если транк1 занят (идет разговор), то используется транк2. Так и должно быть

если модем1 отвалился. Направление1 -> транк1(модем1) - [возврат BUSY] и астериск 1 не пытается звонить через транк2.

Цитата:
второй может спросить по chanisavail у него про занятость и сделать звонок со второго куда надо

на втором опрашиваю DongleStatus (в данном случае даже лучше, чем chanisavail). Но решение куда направить звонок если модем отвалился мне надо чтоб принял первый астериск
#11

бля, зае.... обьяснять
Схема: На втором сервере с модемами - модем завис-занят - пох... самое главное статус занят (busy)
Первый делает звонок через второй, перед звонком спрашивает состояния через chanisavail на втором сервере и получает с него что канал занят - все !!! звонит через другой канал
#12

вы мне опять предлагаете править диалплан (macro-dialout-trunk) на первом хотя код возврата с второго неверный

Цитата:
перед звонком спрашивает состояния через chanisavail на втором сервере

как выполнить команду chanisavail на втором с первого?
если просто chanisavail(SIP/trunkname), то всегда получу положительный ответ
#13

Код возврата верный, дает сигнал занято

правьте под себя


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)
#14

спасибо Wapo
решилось очень просто
на втором астериске сделал 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:

awsswa @ Чт Ноя 01, 2012 16:07 писал(а):
Код возврата верный, дает сигнал занято

правьте под себя


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 то звоним по ней.


в любом случае получаю

AVAILCHAN=SIP/KS-0000191b
Availstatus = 158462624
#15

У вас peer называется KS-0000191b ?

exten => s,1,ChanIsAvail(SIP/sipnet-login1&SIP/sipnet-login2&SIP/sipnet-logint3,as)
#16

awsswa @ Чт Ноя 01, 2012 16:46 писал(а):
У вас peer называется KS-0000191b ?

KS