Страница 1 из 2
порт GSM-шлюза не дает статус Busy
Добавлено: 02 сен 2022, 12:28
anvista
День добрый.
Есть немолодой GSM-шлюз с 4мя симками для звонков на мобильные из офиса. Раньше бегало все прекрасно по логике звонка:
same => n,GotoIf($["${DEVICE_STATE(SIP/GSM01)}"="NOT_INUSE"]?call1)
same => n,GotoIf($["${DEVICE_STATE(SIP/GSM02)}"="NOT_INUSE"]?call2)
....
same => n(call1),Dial(SIP/GSM01/${EXTEN},50,Ww)
same => n,Hangup()
same => n(call2),Dial(SIP/GSM02/${EXTEN},50,Ww)
same => n,Hangup()
Но некоторое время назад пара портов в этом шлюзе перестали выдавать статус "ЗАНЯТО", как следствие получили затык на выходе, т.к. следующий исходящий звонок ломится в занятый порт с полной уверенностью, что тот свободен.
Вот сижу думаю, можно ли смастерить аналогичную конструкцию, опираясь на какую-нибудь другую переменную.
Re: порт GSM-шлюза не дает статус Busy
Добавлено: 02 сен 2022, 12:53
Wapo
Вы можете сделать глобальные переменные G1....G4, устанавливать их в 1 при начале звонка и указывать в переменной канала какую из глобальных вы сейчас используете, а далее в екстене h переустанавливать ее в 0
Re: порт GSM-шлюза не дает статус Busy
Добавлено: 05 сен 2022, 09:21
anvista
Идея интересная, только мне не совсем понятно, как ее реализовать.
Все 4 GSM болтаются в одном контексте, с установкой переменной в статус 1 проблем нет.
но как определить именно ее в статус 0, учитывая, что экстен h для них будет одинаковый?
если только попробовать раскидать их в разные контексты. В любом случае, спасибо. Подумаю над этим
Re: порт GSM-шлюза не дает статус Busy
Добавлено: 05 сен 2022, 11:11
Wapo
Перед началом звонка в отдельную переменную загнать имя Set(CHAN=G1) ну а далее в h вытащить это имя из ${CHAN}
Re: порт GSM-шлюза не дает статус Busy
Добавлено: 05 сен 2022, 12:20
anvista
я сделала через переходы в контексты. может не так изящно, но работает исправно. выглядит так:
[globals]
G01=0
G02=0
....
G01_exten=0
G02_exten=0
[SIP-GSM]
exten => _89XXXXXXXXX,1,NoOp()
same => n,Wait(1)
same => n,GotoIf($["${G01}"="0"]?gsm01)
same => n,GotoIf($["${G02}"="0"]?gsm02)
.....
same => n(gsm01),Set(GLOBAL(G01_exten)=${EXTEN})
same => n,Set(GLOBAL(G01)='BUSY')
same => n,Goto(GSM01,s,1)
...
[GSM01]
exten => s,1,Dial(SIP/GSM01/${G01_exten},50,Ww)
same => n,Hangup()
exten => h,1,Set(GLOBAL(G01)=0)
exten => h,2,Set(GLOBAL(G01_exten)=0)
СПАСИБО за идею
Re: порт GSM-шлюза не дает статус Busy
Добавлено: 05 сен 2022, 13:18
dimondack
Re: порт GSM-шлюза не дает статус Busy
Добавлено: 05 сен 2022, 15:33
anvista
на хабре проверяет состояние занятости все тем же DEVICE_STATE
--------
; Предпочитаем Tele2 и проверяем, не занята ли его линия
exten => _89XX.,n(prefer-tele2),GotoIf($["${DEVICE_STATE(SIP/gsmline2)}" = "NOT_INUSE"]?tele2:megafon)
; Или всё же мегафон...
exten => _89XX.,n(prefer-megafon),GotoIf($["${DEVICE_STATE(SIP/gsmline1)}" = "NOT_INUSE"]?megafon:tele2)
; Соединяемся с возможностью перевода и продолжением выполнения диалплана.
---------
а у меня как раз проблема в том, что часть портов все время отдает статус NOT_INUSE, даже, если заняты.
Re: порт GSM-шлюза не дает статус Busy
Добавлено: 05 сен 2022, 15:58
Wapo
У вас 1 устройство с 1 адресом IP и четырмя каналами - вот вам и невозможность получить нормальный статус одного из портов
Re: порт GSM-шлюза не дает статус Busy
Добавлено: 05 сен 2022, 16:49
dimondack
на хабре проверяет состояние занятости все тем же DEVICE_STATE
мне в этой статье показалось интересным использовать группы
https://asterisk-pbx.ru/wiki/asterisk/func/group
........
а что если немного изменить данный пример
[from-gsm]
; (первая линия)
exten => +79310000000,1,Set(GROUP(gsm
1)=public) ; Устанавливаем группу, дабы считать занятые каналы
exten => +79310000000,n,Goto(to-internal,queue,1)
; (вторая линия)
exten => +79520000000,1,Set(GROUP(gsm
2)=public) ; Устанавливаем группу, дабы считать занятые каналы
exten => +79520000000,n,Goto(to-internal,queue,1)
.........
и тогда
- ; Звонки на сотовые
[to-gsm]
; Проверяем, есть ли свободные линии
exten => _89XX.,1,GotoIf($["${GROUP_COUNT(public@gsm1)}" >= "1"]?noline1)
и т.д.
Можно с группами реализовать
Вообщем я увидел и такой вариант
Re: порт GSM-шлюза не дает статус Busy
Добавлено: 05 сен 2022, 22:27
Wapo
Увы dimondack если gsm на 4 канала рассматривать как транк - то да - группа подойдет. Но она не скажет КАКОЙ канал свободен, а какой занят (пара симок МТС и пара в Мегафоне - и куда гнать вызов?). Впрочем и сам шлюз можно именно в таком режиме подключить.
А, по большому счету, для астера что SIP/gsm1 что SIP/gsm2 одинаковы: вызов идет так SIP/gsm1/01... или SIP/gsm2/02.... и рулится диалпланом шлюза.