Страница 1 из 2
Возможна ли обработка SIP кодов в диалплане?
Добавлено: 09 янв 2014, 15:16
Sanek
Всех с прошедшими и наступающими праздниками!
Возник такой вопрос: возможно ли в диалплане астера "посмотреть" SIP-коды ответов и изменить поведение команды dial()?
Стоит такая задача: при исходящем звонке со * на SIP-GSM шлюз "обрезать" IVR моб. оператора и при "неудачном" дозвоне звонок либо отбить без открытия медиаканала либо завернуть в другой транк... но гугль внятного решения не подсказал, по этому обращаюсь к гуру-астерисковедам за подсказкой направления, в какую сторону копать.
Re: Возможна ли обработка SIP кодов в диалплане?
Добавлено: 09 янв 2014, 15:41
gosha
это не астериска задача. Поставьте камалио между астериском и шлюзом и проверяте на нем.
Re: Возможна ли обработка SIP кодов в диалплане?
Добавлено: 09 янв 2014, 16:15
Sanek
Т.е. на астере без дополнительных приблуд никак не получится? Просто не хочется городить несколько звеньев в каналах - надежность всего канала будет в надежности самого глючного звена...
Re: Возможна ли обработка SIP кодов в диалплане?
Добавлено: 09 янв 2014, 17:31
Aven
А как Вы собираетесь определять что там автоответчик оператора, а не живой голос?
Re: Возможна ли обработка SIP кодов в диалплане?
Добавлено: 10 янв 2014, 10:18
Sanek
Во первых определить, какие SIP коды шлются на астериск и на основании этих кодов поступивший звонок обрабатывать стандартно либо нестандартно (отбивать или рероутить).
Если я не ошибаюсь (но надо еще перепроверить), при успешном звонке идет такая последовательность:
100 Trying
100 Trying
...
183 Ringing
183 Session progress
и открывается медиаканал
При неуспешном звонке (попали на IVR оператора):
100 Trying
100 Trying
...
183 Ringing
и открывается медиаканал
Т.е. при успешном звонке после Ringing получаем Session progress а при неуспешном Session progress не получаем...
Re: Возможна ли обработка SIP кодов в диалплане?
Добавлено: 11 янв 2014, 01:37
tma
Sanek писал(а):Т.е. при успешном звонке после Ringing получаем Session progress а при неуспешном Session progress не получаем...
Каким по Вашему будет вызов на выключенный мобильный телефон? Успешным или неуспешным?
Сообщение сети Вы получите как раз в Session Progress... А если номер не сущесвтует, то получите Trying, а затем Not found без Ringing/Progress.
Re: Возможна ли обработка SIP кодов в диалплане?
Добавлено: 11 янв 2014, 14:45
Sanek
Согласен. Но первоначальный вопрос стоит так: можно ли в астериске во время совершения звонка получить коды ответа и изменить работу команды dial?
Т.е. отправили звонок и принудительно не открываем медиаканал (или шлем подменный КПВ) в течение определенного времени... далее на основании кодов ответа открываем медиаканал и устанавливаем соединение, либо прерываем исполнение команды dial и со звонком совершаем какие-то другие действия.
Re: Возможна ли обработка SIP кодов в диалплане?
Добавлено: 12 янв 2014, 11:42
tma
Я такого вообще никогда не видел. Если честно - извращение какое-то и относительно не только asterisk'а.
Как вариант, можно сделать Dial с временем в несолько секунд, а затем - ${HASH(SIP_CAUSE,${CDR(dstchannel)})}.
Но этот SIP_CAUSE как-то мягко говоря странно работает - когда хочет (впрочем как и многое другое).
Если терминатор (GSM-шлюз) открывает медиа-канал, то очень мало софта умеет после этого осуществлять перемаршрутизацию.
Один такой softswitch я знаю - это VOS, его китайский телеком использует насколько я знаю, ну и сделан в Китае.
Он даже умеет в случае, если терминатор отвалится, повторно его вызвать и вновь установить соединение без отключения оригинатора.
Теоретически такой функционал можно замутить на asterisk'е через конференции, но это будет извращение и лишняя нагрузка.
Re: Возможна ли обработка SIP кодов в диалплане?
Добавлено: 13 янв 2014, 15:02
Sanek
я такого тоже не видел, но слышал... У двоих терминаторов работает, но они молчат как партизаны на допросе
Для понимания задачи набросал примерный план по обработке звонков:
http://clip2net.com/s/6A6BH7
Как вариант, можно сделать Dial с временем в несолько секунд, а затем - ${HASH(SIP_CAUSE,${CDR(dstchannel)})}.
у меня вообще не работает - выдает пустое значение
и опять-же, если нарвемся на ИВР оператора - звонящий абонент его услышит (а нужно чтоб не слышал)
Код: Выделить всё
...
exten => _X.,n,Dial(${tech}/${endtrunk}/${prefixt}${EXTEN:${lenprefixp}})
exten => _X.,n,NoOp(************** DIALSTATUS= ${DIALSTATUS}******)
exten => _X.,n,NoOp(CDR(dstchannel)=${CDR(dstchannel)})
exten => _X.,n,NoOp(CodeDial=${HASH(SIP_CAUSE,${CDR(dstchannel)})})
...
и в логах получаю:
Код: Выделить всё
[2014-01-13 08:58:25] VERBOSE[16536][C-00016978] pbx.c: -- Executing [627#79202276798@pools:61] NoOp("OOH323/mera-78487", "CDR(dstchannel)=SIP/Voronezh-shatkov-81-02-00007dca") in new stack
[2014-01-13 08:58:25] VERBOSE[16536][C-00016978] pbx.c: -- Executing [627#79202276798@pools:62] NoOp("OOH323/mera-78487", "CodeDial=") in new stack
Re: Возможна ли обработка SIP кодов в диалплане?
Добавлено: 14 янв 2014, 00:48
tma
Sanek писал(а):если нарвемся на ИВР оператора - звонящий абонент его услышит
'r' в Dial "забъет" сообщение и будет генерировать ringing.