Вход | Регистрация
Вы здесь: Главная / Форум / Главный форум по Asterisk / TrixBox, Elastix, FreePbx / "нестандартный" callback

"нестандартный" callback

Откуда: Казахстан, Петропавловск
Сообщений: 69

"нестандартный" callback

Здравствуйте. Используется внешний аналоговый GSM-шлюз, соединенный по FXO с платой openvox. Вот схема "идеального" для нас callback-а:

- клиент звонит нам на GSM-шлюз (аналоговый шлюз с выходом FXS), включается следующий алгоритм:
- если клиент позвонил и сбросил (2-3 гудка, БЕЗ ОТВЕТА НА ЗВОНОК), то активизируется callback
- если позвонил и продолжает звонить, то примерно через 3-5 секунд он попадает на очередь операторов, тут каллбэк не активен, вызов за его счет
Тут надо отметить следующее: входящий звонок с аналогового GSM-шлюз нельзя сбросить, не ответив на звонок, поэтому максимум, что можно сделать - это продержать его в предшествующем каллбэку обработчике минимальное время - к примеру, это может быть голосовое меню (условно) с пустым сообщением в 1 секунду, по истечению которого будет происходить обратный звонок.

Но в триксбоксе голосовое меню (или любой другой модуль) не может совершить эти 2 действия - направить звонок на очередь если клиент продолжает звонить (по неответу) и направить звонок на каллбэк в случае, если клиент оборвал свой звонок - БЕЗ ДОНАБОРА цифр. Поэтому сейчас я смог организовать калбэк след. образом:

-клиент звонит с сотового, во входящей маршрутизации использована 3-х секундная задержка,
-если клиент продолжает звонить, то попадает в голосовое меню с 2 вариантами исхода событий, тут ему проигрывается сообщение: "для соединения с оператором нажмите 0", если он нажимает, то попадает на очередь операторов (т.е. дозванивается),
-если во время сообщения ничего не нажимает, то его сбрасывает каллбэк и начинает отзвон. Снятие трубки происходит в момент захода в голосовое меню (по истечению 3-х секундной задержки), поэтому клиент может "маякнуть", не потратив не копейки, и алгоритм все равно приведет его в окончание голосового меню и на каллбэк.
Таким образом, логика диалплана частично реализуется с помощью звонящего клиента, а это не есть хорошо (зачем мне как клиенту для того, чтобы вызвать такси надо дополнительно нажимать какие то дополнительные кнопки?), к тому же оператор сотовой связи снимет с его счета больше денег за прослушивание более длинного сообщения, а это идет в разрез с концепцией данной акции: "Закажи такси с сотового телефона за наш счет"

Понятно, что надо вручную править диалплан. Вопрос в том, какую условную функцию диалплана и переменные использовать перед обратным звонком?
2009-11-23 22:06

Avatara of switch
Откуда: Уфа
Сообщений: 5856

Re: "нестандартный" callback

переменных много и они разные, читайте мануалы и станет все понятно.
Вручную можно любую обработку написать
http://www.lynks.ru - Решения телефонии, мини-АТС, VoIP на основе Trixbox и Asterisk
2009-11-23 22:12

Откуда: Казахстан, Петропавловск
Сообщений: 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 так и не нашел. Наставьте на путь истинный, заранее спасибо
2009-12-04 18:05

Сообщений: 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)
2009-12-04 18:18

Откуда: Казахстан, Петропавловск
Сообщений: 69

Re: "нестандартный" callback

Пятисекундная задержка для того, чтобы звонивший мог скинуть звонок ("маякнуть"), это необходимо. В противном случае, он дальше сразу попадает в очередь, где сам платит за звонок. Посмотреть, что пишет CLI смогу только завтра, уже не на работе. Но, полагаю, должен быть CANCEL если звонящий положил трубку до этого, нет?
2009-12-04 18:46

Сообщений: 6521

Re: "нестандартный" callback

Нет. Он никогда не будет там CANCEL.
Вы никогда не получите ожидаемый результат с GSM-шлюз, соединенный по FXO.
Только с GSM-IP шлюз.
Примите за факт, не заставляйте доказывать.
Наберите в гугле Asterisk GSM gateway FXO status Answer и почитайте кучу криков о невозможности правильно тарифицировать такие звонки.
2009-12-04 18:52

Добавить страницу в закладки:  Delicious Google Slashdot Yahoo Yandex.ru Reddit Digg Technorati Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Myscoop.ru 100zakladok.ru