"нестандартный" callback
Откуда: Казахстан, Петропавловск
Сообщений: 69
|
"нестандартный" callback
Здравствуйте. Используется внешний аналоговый GSM-шлюз, соединенный по FXO с платой openvox. Вот схема "идеального" для нас callback-а:
- клиент звонит нам на GSM-шлюз (аналоговый шлюз с выходом FXS), включается следующий алгоритм:
- если клиент позвонил и сбросил (2-3 гудка, БЕЗ ОТВЕТА НА ЗВОНОК), то активизируется callback
- если позвонил и продолжает звонить, то примерно через 3-5 секунд он попадает на очередь операторов, тут каллбэк не активен, вызов за его счет
Тут надо отметить следующее: входящий звонок с аналогового GSM-шлюз нельзя сбросить, не ответив на звонок, поэтому максимум, что можно сделать - это продержать его в предшествующем каллбэку обработчике минимальное время - к примеру, это может быть голосовое меню (условно) с пустым сообщением в 1 секунду, по истечению которого будет происходить обратный звонок.
Но в триксбоксе голосовое меню (или любой другой модуль) не может совершить эти 2 действия - направить звонок на очередь если клиент продолжает звонить (по неответу) и направить звонок на каллбэк в случае, если клиент оборвал свой звонок - БЕЗ ДОНАБОРА цифр. Поэтому сейчас я смог организовать калбэк след. образом:
-клиент звонит с сотового, во входящей маршрутизации использована 3-х секундная задержка,
-если клиент продолжает звонить, то попадает в голосовое меню с 2 вариантами исхода событий, тут ему проигрывается сообщение: "для соединения с оператором нажмите 0", если он нажимает, то попадает на очередь операторов (т.е. дозванивается),
-если во время сообщения ничего не нажимает, то его сбрасывает каллбэк и начинает отзвон. Снятие трубки происходит в момент захода в голосовое меню (по истечению 3-х секундной задержки), поэтому клиент может "маякнуть", не потратив не копейки, и алгоритм все равно приведет его в окончание голосового меню и на каллбэк.
Таким образом, логика диалплана частично реализуется с помощью звонящего клиента, а это не есть хорошо (зачем мне как клиенту для того, чтобы вызвать такси надо дополнительно нажимать какие то дополнительные кнопки?), к тому же оператор сотовой связи снимет с его счета больше денег за прослушивание более длинного сообщения, а это идет в разрез с концепцией данной акции: "Закажи такси с сотового телефона за наш счет"
Понятно, что надо вручную править диалплан. Вопрос в том, какую условную функцию диалплана и переменные использовать перед обратным звонком?
|
Откуда: Уфа
Сообщений: 5856
|
Re: "нестандартный" callback
переменных много и они разные, читайте мануалы и станет все понятно.
Вручную можно любую обработку написать
|
Откуда: Казахстан, Петропавловск
Сообщений: 69
|
Re: "нестандартный" callback
Подниму старую тему, повторив главное вышенаписанного если кому лень читать. Итак нужно организовать каллбэк по следующему сценарию:
- клиент звонит нам на GSM-шлюз (аналоговый шлюз с выходом FXS), включается следующий алгоритм:
- если клиент позвонил и сбросил (2-3 гудка, БЕЗ ОТВЕТА НА ЗВОНОК), то активизируется callback
- если позвонил и продолжает звонить, то примерно через 3-5 секунд он попадает на очередь операторов, тут каллбэк не активен, вызов за его счет
Решил использовать одно из значений переменной DIALSTATUS, а именно - CANCEL. С помощью модуля diaplan injection создаю следующие строки:
[injection-23]
include => injection-23-custom
exten => _.,1,Noop(Entering Injection: test)
exten => _.,n,Wait(5)
exten => _.,n,GotoIf($["${DIALSTATUS}" = "CANCEL"]?callback,1,1:)
exten => _.,n,Goto(from-did-direct,108,1)
exten => h,1,Macro(hangupcall,)
Направляю входящий звонок на этот контекст, но проверки DIALSTATUS, на значение CANCEL не происходит:
Spawn extension ....(дальше не помню, но показывает, что обрывается на строчке проверки условия)
При этом если продолжать звонить, то следующая команда Goto(from-did-direct,108,1) отрабатывается. Нашел похожую тему http://asteriskforum.ru/viewtopic.php?p=32386, перерыл все extension.conf-ы, но куда вставить опцию g в команде dial так и не нашел. Наставьте на путь истинный, заранее спасибо
|
Сообщений: 6521
|
Re: "нестандартный" callback
Merk: Итак нужно организовать каллбэк по следующему сценарию:
IMHO - не нужно.
include => injection-23-custom
exten => _Х.,1,Noop(Entering Injection: test)
exten => _Х.,n,Wait(5) - это зачем?
exten => _Х.,1,Noop(Dial status is ${DIALSTATUS}) вот тут Вам уже всё станет ясно
exten => _Х.,n,GotoIf($["${DIALSTATUS}" = "CANCEL"]?callback,1,1:)
exten => _Х.,n,Goto(from-did-direct,108,1)
|
Откуда: Казахстан, Петропавловск
Сообщений: 69
|
Re: "нестандартный" callback
Пятисекундная задержка для того, чтобы звонивший мог скинуть звонок ("маякнуть"), это необходимо. В противном случае, он дальше сразу попадает в очередь, где сам платит за звонок. Посмотреть, что пишет CLI смогу только завтра, уже не на работе. Но, полагаю, должен быть CANCEL если звонящий положил трубку до этого, нет?
|
Сообщений: 6521
|
Re: "нестандартный" callback
Нет. Он никогда не будет там CANCEL.
Вы никогда не получите ожидаемый результат с GSM-шлюз, соединенный по FXO.
Только с GSM-IP шлюз.
Примите за факт, не заставляйте доказывать.
Наберите в гугле Asterisk GSM gateway FXO status Answer и почитайте кучу криков о невозможности правильно тарифицировать такие звонки.
|
|