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

asterisk не понимает DTMF при исходящем на транке Мультифона

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

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

haosith
Сообщения: 6
Зарегистрирован: 27 окт 2016, 12:04
Откуда: Смоленск

asterisk не понимает DTMF при исходящем на транке Мультифона

Сообщение haosith »

Приветствую всех!
Имеется следующая проблема на asterisk 13.11.2 (чистом, без FreePBX и прочего, из неродных модулей тока chan_dongle):

В цепочке " SIP-телефон => asterisk => Мультифон (транк) => сотовый " все участники процесса имеют заданный dtmfmode=inband, а SIP-телефон имеет соответствующую настройку для передачи тонов в inband. Однако сигналы DTMF принимаются asterisk'ом только со стороны этого самого SIP-телефона (в консоли появляются соответствующие сообщения), а нажатия со стороны сотового игнорируются. При прослушивании записи отчетливо слышно тоны как со стороны SIP-телефона, так и мобильника без искажений и эха. Трансферы, функции IVR отрабатывают только у SIP-телефона.

В обратной цепочке " сотовый => Мультифон (транк) => asterisk => SIP-телефон " сигналы DTMF обрабатываются нормально в обе стороны и точно также слышны в голосовом потоке. Трансферы, функции IVR отрабатываются четко у обоих.

Кодеки используются alaw, ulaw, gsm в транке и пользователях.

Код: Выделить всё

disallow = all
allow = alaw,ulaw,gsm
Успешный DTMF, принимаемый с входящего по транку Мультифона имеет следующий вид

Код: Выделить всё

[2016-10-27 12:29:49] DTMF[15402][C-00000049]: channel.c:4057 __ast_read: DTMF begin '1' received on SIP/trunk_1-0000016e
[2016-10-27 12:29:49] DTMF[15402][C-00000049]: channel.c:4068 __ast_read: DTMF begin passthrough '1' on SIP/trunk_1-0000016e
[2016-10-27 12:29:50] DTMF[15402][C-00000049]: channel.c:3971 __ast_read: DTMF end '1' received on SIP/trunk_1-0000016e, duration 306 ms
[2016-10-27 12:29:50] DTMF[15402][C-00000049]: channel.c:4012 __ast_read: DTMF end accepted with begin '1' on SIP/trunk_1-0000016e
[2016-10-27 12:29:50] DTMF[15402][C-00000049]: channel.c:4041 __ast_read: DTMF end passthrough '1' on SIP/trunk_1-0000016e
Что делалось для решения:
1. Выставлялся один кодек из вышеперечисленной тройки на связанных с проблемой устройствах и самом астериске. - не помогло.
2. На всякий случай вместо SIP-телефона, чтобы 100% исключить проблему оконечного устройства и вообще какое-либо его влияние, подкладывался простенький IVR, для создания исходящего на сотовый вызова использовался originate - ничего не изменилось.
3. Обильно гуглилось, но все рекомендуемые настройки наподобие relaxdtmf=yes и иже с ними уже находятся в конфиге изначально, применялись еще на стадии когда при входящих с мобильника IVR не получало тоны никак вообще.

ТП мультифона отсылает к настройке asterisk о всеми вопросами на основании того, что (привожу примерный ход диалога):
- Мы вам голос передали?
- Ага.
- Тон слышите?
- в принципе слышим.
- Вот и разбирайтесь со своими сигналами и АТС, развелись тут умники, мы тут не при делах.

Собственно, не совсем понятно куда на самом деле копать в этой ситуации, буду рад любой помощи и совету.
april22
Сообщения: 2187
Зарегистрирован: 09 июл 2012, 09:47

Re: asterisk не понимает DTMF при исходящем на транке Мульти

Сообщение april22 »

в пире с мультифоном что стоит про DTMF ?
Своими вопросами , вы загоняете меня в ГУГЛЬ.
haosith
Сообщения: 6
Зарегистрирован: 27 окт 2016, 12:04
Откуда: Смоленск

Re: asterisk не понимает DTMF при исходящем на транке Мульти

Сообщение haosith »

во всем: транке, устройствах, пирах, глобальных настройках - стоит inband
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: asterisk не понимает DTMF при исходящем на транке Мульти

Сообщение ded »

в пире с мультифоном поставьте для теста RFC2833, включите дебаг DTMF чтобы зелёненькими видно было, и позвоните со своего мобильного в ИВР, чтобы понажимать цифры и посмотреть в CLI.
Ставить inband везде-везде совсем не обязательно.
haosith
Сообщения: 6
Зарегистрирован: 27 окт 2016, 12:04
Откуда: Смоленск

Re: asterisk не понимает DTMF при исходящем на транке Мульти

Сообщение haosith »

Уважаемый ded, я очень уважаю Ваш опыт, но тут я немного не понимаю суть проверки входящим звонком: при моём звонке в IVR с мобильного - на текущий момент dtmf там читается, так как МегаФон мне его присылает в голосовом потоке.

Возможно, что я непонятно объяснил суть вопроса, попробую иначе:
Мне нужно чтобы астериск сам мне звонил, проигрывал сообщение (состояние ящика и сервера через ориджинейт и макрос) и давал выбор опций.
Скрипт вызова и макрос я сделал, но упёрся в проблему:

Если звонок исходит из астериска через транк Мультифона, то dtmf при их явном присутствии в голосовом потоке (на слух тоны четкие) никак не воспринимаются.

Если я звоню сам с мобильного в тот же самый макрос через тот же самый транк - dtmf понимаются нормально.

Если я беру SIP-телефон вместо макроса и делаю исходящий на сотовый и принимаю входящий с сотового - от SIP-телефона dtmf в голосе всегда читаются астериском и тоны слышны в динамике сотового.

При записи разговоров MixMonitor все тоновые сигналы с обеих сторон ясно различимы.

Дебаг dtmf и лог-файл показывают то же самое:
Звонок с сотового - dtmf в обе стороны
Звонок на сотовый - dtmf с сотового не воспринимается от слова никак.

Когда я ставил dtmfmode=rfc2833 в транке примерно год назад - dtmf на входящих вызовах работать переставали, на исходящих не проверял. У МегаФона что-то изменилось с этого времени? ТП утверждает что они поддерживают dtmf только в режиме inband.

Извиняюсь, если не понял совет насчёт rfc2833 в полной мере. Я конечно же попробую этот вариант, просто не совсем понимаю что это мне даст.
haosith
Сообщения: 6
Зарегистрирован: 27 окт 2016, 12:04
Откуда: Смоленск

Re: asterisk не понимает DTMF при исходящем на транке Мульти

Сообщение haosith »

Попробовал проставить в транке dtmfode=rfc2833, для исходящих звонков ничего не изменилось - при звонке на сотовый с него нет dtmf.
Для входящих - dtmf с сотового перестали пониматься астериском.
haosith
Сообщения: 6
Зарегистрирован: 27 окт 2016, 12:04
Откуда: Смоленск

Re: asterisk не понимает DTMF при исходящем на транке Мульти

Сообщение haosith »

Проблема все ещё актуальна...

Может есть какие-то альтернативные методы? Непонятно, кто виноват - сам астериск или все таки Мультифон.

Есть какая-то возможность проверить, какой в точности кодек используется со стороны МегаФона? Может оператор на исходящих звонках использовать отличный от входящих звуковой кодек?
whoim
Сообщения: 766
Зарегистрирован: 26 ноя 2013, 23:25
Откуда: Краснодар
Контактная информация:

Re: asterisk не понимает DTMF при исходящем на транке Мульти

Сообщение whoim »

Код: Выделить всё

username=7938...
type=peer
secret=...
qualify=yes
nat=yes
insecure=port,invite
host=multifon.ru
fromuser=7938...
fromdomain=multifon.ru
dtmfmode=auto
disallow=all
defaultuser=7938...
context=from-trunk
canreinvite=no
allow=alaw
при таких данных dtmf есть, ковыряйте клиента
облачные и локальные сервера asterisk/freepbx/a2billing/crm с полной техподдержкой. skype: whoim2, sipuri: whoim@asterisk.ru
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: asterisk не понимает DTMF при исходящем на транке Мульти

Сообщение ded »

Очень много букв.
Конечно может! Почему Вы об этом спрашиваете на форуме, вместо того, чтобы проверить при установлении вызова
SIP-телефон => asterisk => Мультифон (транк) => сотовый
когда у Вас нажатия кнопок на SIP-телефоне видны

Код: Выделить всё

[2016-10-27 12:29:49] DTMF[15402][C-00000049]: channel.c:4057 __ast_read: DTMF begin '1' received on SIP/trunk_1-0000016e
[2016-10-27 12:29:49] DTMF[15402][C-00000049]: channel.c:4068 __ast_read: DTMF begin passthrough '1' on SIP/trunk_1-0000016e
[2016-10-27 12:29:50] DTMF[15402][C-00000049]: channel.c:3971 __ast_read: DTMF end '1' received on SIP/trunk_1-0000016e, duration 306 ms
[2016-10-27 12:29:50] DTMF[15402][C-00000049]: channel.c:4012 __ast_read: DTMF end accepted with begin '1' on SIP/trunk_1-0000016e
[2016-10-27 12:29:50] DTMF[15402][C-00000049]: channel.c:4041 __ast_read: DTMF end passthrough '1' on SIP/trunk_1-0000016e
а нажатия кнопок на сотовом - не видны.
Вам надо посмотреть
sip show channels
чтобы увидеть какими кодеками связаны оба плеча такого вызова. Если на плече к мультифону будет gsm, то понятно, почему не ловятся DTMF.
Также может быть, что на этом плече выбирается не тот dtmfmode= при таком звонке, берётся дефолтный из sip.conf секции [general]
И Вы тоже могли бы увидеть это в диалоге INVITE со стороны Мультифона если в sdp будет виден
m=audio 12346 RTP/AVP 101
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
то всё у вас по RFC2833, где передаются цифры 0-9, *, #, A, B, D, E, и Flash.
а никакой не inband,
whoim писал(а):при таких данных dtmf есть, ковыряйте клиента
Ты заметил, что у него при входящих то dtmf есть, а при исходящих - нет (со стороны Мультифона)
haosith
Сообщения: 6
Зарегистрирован: 27 окт 2016, 12:04
Откуда: Смоленск

Re: asterisk не понимает DTMF при исходящем на транке Мульти

Сообщение haosith »

Вот что выходит при звонке наружу:

Код: Выделить всё

CLI> sip show channels
Peer             User/ANR         Call ID          Format           Hold     Last Message    Expiry     Peer
193.201.229.35   8920xxxxx77      7b6b3e8274299e3  (alaw)           No       Tx: ACK                    trunk_1
192.168.1.34     506              67329962-5064-5  (alaw)           No       Rx: ACK                    506
2 active SIP dialogs
Несколько раз пробовал - всегда alaw, видать проблемы не с кодеками. На n-ном звонке включил дебаг и вот инвайт, прилетающий по Dial в транк Мультифона:

Код: Выделить всё

INVITE sip:8920ххххх77@multifon.ru SIP/2.0
Via: SIP/2.0/UDP 192.168.х.х:5060;branch=z9hG4bK6caa0245;rport
Max-Forwards: 70
From: "Вова" <sip:7930ххххх00@multifon.ru>;tag=as0c9a8d94
To: <sip:8920ххххх77@multifon.ru>
Contact: <sip:7930ххххх00@192.168.х.х:5060>
Call-ID: 7abef8485cd333222ef27cb325d66bb8@multifon.ru
CSeq: 102 INVITE
User-Agent: Asterisk PBX
Date: Wed, 02 Nov 2016 06:33:47 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Content-Type: application/sdp
Content-Length: 297

v=0
o=root 969432796 969432796 IN IP4 192.168.х.х
s=Asterisk PBX 13.11.2
c=IN IP4 192.168.х.х
t=0 0
m=audio 10566 RTP/AVP 8 0 3 101
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:3 GSM/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=maxptime:150
a=sendrecv
я попробовал задать rfc2833 по транкам и секции general - ситуация не изменилась, ну разве что пропали DTMF на входящих. Задал SIPDtmfMode(inband) в контексте входящих звонков, не меняя sip.conf с rfc2833 - ессно, на входящих DTMF появились.

Искренне хочу понять, что я делаю не так - кодеки правильные, вроде как инвайт на плече показывает что там rfc2833 (если я верно понял ded'а), но чтобы и куда я там не подставлял - никакие DTMF не приходят что inband, что rfc2833.
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH