VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

IAX2 и DTMF

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
akTula
Сообщения: 6
Зарегистрирован: 05 фев 2011, 17:16

IAX2 и DTMF

Сообщение akTula »

имеется IAX2 транк с провайдером, при получении входящего соединения выполняем:

iax.conf
[prov]
type = user
host = X.X.X>X
transfer=no
trunk=yes
context = incommingIAX
jitterbuffer=no


sip.conf
[incommingIAX]
exten => _7XXXXX,1,GoTo(incomming70,199,2)

[incomming70]
exten => 199,1,Answer
exten => 199,2,Set(TIMEOUT(digit)=5)
exten => 199,3,Set(TIMEOUT(response)=20)
exten => 199,4,Background(otvet70)
exten => 199,5,WaitExten(5)
...

соединение проходит успешно, фраза проговаривается, но донабор от пользователя не проходит.
если соединение делать по SIP - всё работает нормально.

дебаг iax2 показывает отсутствие пакетов с типом DTMF от провайдера
попытался загнать IAX в тот-же астериск по SIP, чтоб там проанализировался тон, но получил loop detected, Now forwarding и опять недетектящийся тон.

какие возможны варианты решения проблемы?
akTula
Сообщения: 6
Зарегистрирован: 05 фев 2011, 17:16

Re: IAX2 и DTMF

Сообщение akTula »

проблема как раз в том, что анализируя логи соединений инициируемых мной и провайдером - вижу разницу

когда идет соединение от меня - то
[Feb 5 18:28:07] DTMF[10708]: channel.c:2466 __ast_read: DTMF begin '2' received on SIP/1001-00000913
[Feb 5 18:28:07] DTMF[10708]: channel.c:2476 __ast_read: DTMF begin passthrough '2' on SIP/1001-00000913

Tx-Frame Retry[000] -- OSeqno: 013 ISeqno: 012 Type: DTMF_B Subclass: 2
Timestamp: 21594ms SCall: 19820 DCall: 02386 [X.X.X.X:4569]
то есть - услышали DTMF на канале, и был сгенерирован пакет с типом DTMF в iax обмене

при соединении по инициативе провайдера - пакетов с типом DTMF нет
при этом на слух - тональный сигнал слышен в обоих случаях.
akTula
Сообщения: 6
Зарегистрирован: 05 фев 2011, 17:16

Re: IAX2 и DTMF

Сообщение akTula »

провел следственный эксперимент
сделал в ответе на звонок приходящий по IAX от провайдера звонок на SIP шлюз, который скроссирован парой с другим шлюзом, принявшим звонок по аналоговой соотв паре, загнавший его в SIP и вернувший в тот-же астериск... так вот - в этом SIP траффике распознаывание DTMF - 100%.
то есть внутри голосового трафика в IAX - DTMF передаются без искажений, только asterisk их не анализирует,ожидая от провайдера служебный iax пакетов с типом DTMF, которых провайдер не генерирует.
как заставить asterisk ловить DTMF в голосовм траффике IAX так-же как и в RTP от SIP?
akTula
Сообщения: 6
Зарегистрирован: 05 фев 2011, 17:16

Re: IAX2 и DTMF

Сообщение akTula »

всё дело в том что оно штатным способом в IAX вообще не анализируется. в самой спецификации протокола написано что DTMF передается out of band то есть не внутри голосовго траффика, а отдельным IAX служебным пакетом. и ловля DTMF и генерация этих пакетов лежит на той стороне, которая заворачивает траффик в IAX

пока вижу два варианта - добиваться от провайдера генерации этих пакетов
или как-то выдернуть траффик из IAX в SIP и там уже нормально отловить пакеты.
но как корректно завернуть звонок сам на себя, так что при этом произошла перекодировка из IAX в SIP пока непонятно.
пока в chan_sip.c отключил проверку на loop, и научил его не отрубать звонки самому себе
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

Re: IAX2 и DTMF

Сообщение ded »

akTula писал(а):имеется IAX2 транк с провайдером, при получении входящего соединения выполняем:

iax.conf
[prov]
type = user
host = X.X.X>X
transfer=no
trunk=yes
context = incommingIAX
jitterbuffer=no


sip.conf
[incommingIAX]
exten => _7XXXXX,1,GoTo(incomming70,199,2)

[incomming70]
exten => 199,1,Answer
exten => 199,2,Set(TIMEOUT(digit)=5)
exten => 199,3,Set(TIMEOUT(response)=20)
exten => 199,4,Background(otvet70)
exten => 199,5,WaitExten(5)
...
Это явно не sip.conf, как указано, а extensions.conf
akTula писал(а):но как корректно завернуть звонок сам на себя, так что при этом произошла перекодировка из IAX в SIP пока непонятно.
Принимайте IAX транк в спец контекст где

exten => _X.,1,Dial(SIP/${EXTEN}@localhost)

или чуть сложнее - содайте специальный SIP пир localhost.
akTula
Сообщения: 6
Зарегистрирован: 05 фев 2011, 17:16

Re: IAX2 и DTMF

Сообщение akTula »

ded писал(а): Это явно не sip.conf, как указано, а extensions.conf
ну да, точно :)
ded писал(а):
akTula писал(а):но как корректно завернуть звонок сам на себя, так что при этом произошла перекодировка из IAX в SIP пока непонятно.
Принимайте IAX транк в спец контекст где

exten => _X.,1,Dial(SIP/${EXTEN}@localhost)
в Dial(SIP... - принимал. получаем loop detected и принимается в результате не SIP а IAX
я в первоначальном сообщении это писал -
"попытался загнать IAX в тот-же астериск по SIP, чтоб там проанализировался тон, но получил loop detected, Now forwarding и опять недетектящийся тон."
ded писал(а): или чуть сложнее - содайте специальный SIP пир localhost.
а вот про специальный пир - если можно поподробнее
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

Re: IAX2 и DTMF

Сообщение ded »

loop detected - ответ вполне ясный. Петля создана на уровне логики extensions.conf а не на уровне технологий. Пришедший звонок запетлёван через Goto. Мы тут этого не видим, так как приведён не весь диал план. Где-то там includes наставлены?
iax.conf
[prov]
type = user
host = X.X.X>X
transfer=no
trunk=yes
context = incomming70
jitterbuffer=no

extensions.conf
[incomming70]
exten => _7XXXXX,1,Dial(SIP/${EXTEN}@localhost)
Принятый через IAX2 звонок уйдёт в SIP/localhost и принимается в SIP какой контекст?

В нём и прописать:
exten => _7XXXXX,1,Answer
exten => _7XXXXX,2,Set(TIMEOUT(digit)=5)
exten => _7XXXXX,3,Set(TIMEOUT(response)=20)
exten => _7XXXXX,4,Background(otvet70)
exten => _7XXXXX,5,WaitExten(5)
akTula
Сообщения: 6
Зарегистрирован: 05 фев 2011, 17:16

Re: IAX2 и DTMF

Сообщение akTula »

ded писал(а):loop detected - ответ вполне ясный. Петля создана на уровне логики extensions.conf а не на уровне технологий. Пришедший звонок запетлёван через Goto. Мы тут этого не видим, так как приведён не весь диал план. Где-то там includes наставлены?
iax.conf
[prov]
type = user
host = X.X.X>X
transfer=no
trunk=yes
context = incomming70
jitterbuffer=no

extensions.conf
[incomming70]
exten => _7XXXXX,1,Dial(SIP/${EXTEN}@localhost)
Принятый через IAX2 звонок уйдёт в SIP/localhost и принимается в SIP какой контекст?

В нём и прописать:
exten => _7XXXXX,1,Answer
exten => _7XXXXX,2,Set(TIMEOUT(digit)=5)
exten => _7XXXXX,3,Set(TIMEOUT(response)=20)
exten => _7XXXXX,4,Background(otvet70)
exten => _7XXXXX,5,WaitExten(5)
в [default] принимается

именно так и было сделано.
диалплан был бехз всяких инклюдов, чисто для отладки, самый что ни есть простой для решения проблемы
в версии астериска 1.4.39 - DTMF не детектились, в 1.8.2.3 - работает, но почему-то в ней не отображается в консоли определенный DTMF, хотя в logger.conf явно указано

console => notice,warning,error,dtmf
но это уже мелочи :)
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH