Jump to content
Калькуляторы

Goip+Asterisk. Проблемы с распознаванием DTMF

Здравствуйте!

 

Столкнулся с такими проблемами при настройке связки Goip+Asterisk. Goip регистрируется на сервере Asterisk. Я звоню на шлюз по GSM. Он кидает на IVR, где осуществляется донабор номера. Так вот сигналы DTMF цифр 4 и 5 (да только эти ))) не распознаются сервером. Что за..? Наткнулся на кучу статей и рекомендаций в гугле. Вот одна из них:

 

http://subnets.ru/blog/?p=1278

 

Перепробовал все что можно. за исключением инструкций по смене частот кодов и перекомпиляции сервера (Asterisk работает на NAS Synology).

Склоняюсь к мысли, что дело все-таки в несогласованности используемых кодеков. Т.к. с очень древнего мобильного телефона все отлично работает) Поэтому было принято решение отправлять набираемый номер смсками, но и тут возникли проблемы, о которых я написал в соседней ветке.

 

Может есть еще у кого идеи?

 

Кстати вот так Сервер собирает и обрабатывает DTMF:

 

[dtmf-analys]

exten => s,1,SayDigits(0) [0-чтобы знать что мы в нужном контексте]

; exten => s,n,Answer()

exten => s,n,Wait(1)

exten => s,n(collect),Read(digito,,9)

exten => s,n,SayDigits(${digito})

exten => s,n,GoTo(collect)

exten => s,n,Hangup

; exten => t,1,Goto(s,1)

Share this post


Link to post
Share on other sites

Добрый день,

в * разрешили донабор? кодеки согласованы?

Дебаг в студию...

Share this post


Link to post
Share on other sites

Настройки на сервере:

    [users](!)
           type=friend
           host=dynamic
           nat=yes
           canreinvite=no
           transport=udp
           qualify=yes
           disallow=all
           allow=alaw
           allow=ulaw
           callgroup=1
           pickupgroup=1
           deny=0.0.0.0/0.0.0.0
           permit=172.126.0.0/255.255.255.0
   [230](users)
           username=230
           secret=1234
           fromuser=230
           insecure=port,invite
           context=default
           dtmfmode=rfc2833

 

Вот что происходит:

 

      == CDR updated on SIP/230-00000078
       -- Executing [0@menu:1] Goto("SIP/230-00000078", "dtmf-analys,s,1") in new stack
       -- Goto (dtmf-analys,s,1)
       -- Executing [s@dtmf-analys:1] SayDigits("SIP/230-00000078", "0") in new stack
       -- <SIP/230-00000078> Playing 'digits/0.alaw' (language 'en')
       -- Executing [s@dtmf-analys:2] Answer("SIP/230-00000078", "") in new stack
       -- Executing [s@dtmf-analys:3] BackGround("SIP/230-00000078", "beep") in new stack
       -- <SIP/230-00000078> Playing 'beep.alaw' (language 'en')
       -- Executing [s@dtmf-analys:4] Wait("SIP/230-00000078", "1") in new stack
       -- Executing [s@dtmf-analys:5] Read("SIP/230-00000078", "digito,,9") in new stack
       -- Accepting a maximum of 9 digits.
   [Mar 22 16:33:41] DTMF[20485]: channel.c:4151 __ast_read: DTMF begin '1' received on SIP/230-00000078
   [Mar 22 16:33:41] DTMF[20485]: channel.c:4155 __ast_read: DTMF begin ignored '1' on SIP/230-00000078
   [Mar 22 16:33:41] DTMF[20485]: channel.c:4066 __ast_read: DTMF end '1' received on SIP/230-00000078, duration 100 ms
   [Mar 22 16:33:41] DTMF[20485]: channel.c:4135 __ast_read: DTMF end passthrough '1' on SIP/230-00000078
   [Mar 22 16:33:42] DTMF[20485]: channel.c:4151 __ast_read: DTMF begin '2' received on SIP/230-00000078
   [Mar 22 16:33:42] DTMF[20485]: channel.c:4155 __ast_read: DTMF begin ignored '2' on SIP/230-00000078
   [Mar 22 16:33:42] DTMF[20485]: channel.c:4066 __ast_read: DTMF end '2' received on SIP/230-00000078, duration 100 ms
   [Mar 22 16:33:42] DTMF[20485]: channel.c:4135 __ast_read: DTMF end passthrough '2' on SIP/230-00000078
   [Mar 22 16:33:43] DTMF[20485]: channel.c:4151 __ast_read: DTMF begin '3' received on SIP/230-00000078
   [Mar 22 16:33:43] DTMF[20485]: channel.c:4155 __ast_read: DTMF begin ignored '3' on SIP/230-00000078
   [Mar 22 16:33:43] DTMF[20485]: channel.c:4066 __ast_read: DTMF end '3' received on SIP/230-00000078, duration 100 ms
   [Mar 22 16:33:43] DTMF[20485]: channel.c:4135 __ast_read: DTMF end passthrough '3' on SIP/230-00000078
   [Mar 22 16:33:47] DTMF[20485]: channel.c:4151 __ast_read: DTMF begin '6' received on SIP/230-00000078
   [Mar 22 16:33:47] DTMF[20485]: channel.c:4155 __ast_read: DTMF begin ignored '6' on SIP/230-00000078
   [Mar 22 16:33:47] DTMF[20485]: channel.c:4066 __ast_read: DTMF end '6' received on SIP/230-00000078, duration 100 ms
   [Mar 22 16:33:47] DTMF[20485]: channel.c:4135 __ast_read: DTMF end passthrough '6' on SIP/230-00000078
   [Mar 22 16:33:51] DTMF[20485]: channel.c:4151 __ast_read: DTMF begin '7' received on SIP/230-00000078
   [Mar 22 16:33:51] DTMF[20485]: channel.c:4155 __ast_read: DTMF begin ignored '7' on SIP/230-00000078
   [Mar 22 16:33:51] DTMF[20485]: channel.c:4066 __ast_read: DTMF end '7' received on SIP/230-00000078, duration 100 ms
   [Mar 22 16:33:51] DTMF[20485]: channel.c:4135 __ast_read: DTMF end passthrough '7' on SIP/230-00000078
   [Mar 22 16:33:52] DTMF[20485]: channel.c:4151 __ast_read: DTMF begin '8' received on SIP/230-00000078
   [Mar 22 16:33:52] DTMF[20485]: channel.c:4155 __ast_read: DTMF begin ignored '8' on SIP/230-00000078
   [Mar 22 16:33:52] DTMF[20485]: channel.c:4066 __ast_read: DTMF end '8' received on SIP/230-00000078, duration 100 ms
   [Mar 22 16:33:52] DTMF[20485]: channel.c:4135 __ast_read: DTMF end passthrough '8' on SIP/230-00000078
   [Mar 22 16:33:56] DTMF[20485]: channel.c:4151 __ast_read: DTMF begin '9' received on SIP/230-00000078
   [Mar 22 16:33:56] DTMF[20485]: channel.c:4155 __ast_read: DTMF begin ignored '9' on SIP/230-00000078
   [Mar 22 16:33:56] DTMF[20485]: channel.c:4066 __ast_read: DTMF end '9' received on SIP/230-00000078, duration 100 ms
   [Mar 22 16:33:56] DTMF[20485]: channel.c:4135 __ast_read: DTMF end passthrough '9' on SIP/230-00000078
       -- User entered '1236789'
       -- Executing [s@dtmf-analys:6] SayDigits("SIP/230-00000078", "1236789") in new stack
       -- <SIP/230-00000078> Playing 'digits/1.alaw' (language 'en')
       -- <SIP/230-00000078> Playing 'digits/2.alaw' (language 'en')
       -- <SIP/230-00000078> Playing 'digits/3.alaw' (language 'en')
       -- <SIP/230-00000078> Playing 'digits/6.alaw' (language 'en')
       -- <SIP/230-00000078> Playing 'digits/7.alaw' (language 'en')
       -- <SIP/230-00000078> Playing 'digits/8.alaw' (language 'en')
       -- <SIP/230-00000078> Playing 'digits/9.alaw' (language 'en')
       -- Executing [s@dtmf-analys:7] Goto("SIP/230-00000078", "collect") in new stack
       -- Goto (dtmf-analys,s,5)
       -- Executing [s@dtmf-analys:5] Read("SIP/230-00000078", "digito,,9") in new stack
       -- Accepting a maximum of 9 digits.
       -- User entered nothing.
       -- Executing [s@dtmf-analys:6] SayDigits("SIP/230-00000078", "") in new stack
       -- Executing [s@dtmf-analys:7] Goto("SIP/230-00000078", "collect") in new stack
       -- Goto (dtmf-analys,s,5)
       -- Executing [s@dtmf-analys:5] Read("SIP/230-00000078", "digito,,9") in new stack
       -- Accepting a maximum of 9 digits.
       -- User entered nothing.
       -- Executing [s@dtmf-analys:6] SayDigits("SIP/230-00000078", "") in new stack
       -- Executing [s@dtmf-analys:7] Goto("SIP/230-00000078", "collect") in new stack
       -- Goto (dtmf-analys,s,5)
       -- Executing [s@dtmf-analys:5] Read("SIP/230-00000078", "digito,,9") in new stack
       -- Accepting a maximum of 9 digits.

 

Повторюсь: если звонить с очень древнего мобильного телефона, все корректно работает. Также если звонить со софтфонов. Проблема только при звонке с мобильного на Goip. Пробовал разные типы DTMF - не помогло.

post-126279-090028900 1427020987_thumb.jpg

post-126279-006209600 1427020997_thumb.jpg

post-126279-091509200 1427021004_thumb.jpg

Share this post


Link to post
Share on other sites

Доброго времени суток.

 

Никогда не работал с "Goip".

 

Могу лишь предположить, что при звонке со "старенького" мобильного ТА

передача DTMF происходит в голосовом канале (dtmf in band),

"прозрачно" пробегая на Asterisk в кодеке G711.

Это приводит к успешной обработке звукового сигнала IVR'ом.

 

Современные мобильные ТА, возможно отдают DTMF в телефонной сигнализации

(dtmf out of band), не генерируя звукового сигнала.

 

При этом Ваш "Goip шлюз" не может корректно распознать сигнализацию оператора

и передаёт на Asterisk (в dtmfmode=rfc2833), что ему почудилось.

 

Для эксперимента:

 

1. Между "Goip шлюз" и Asterisk оставьте только голосовой кодек G711 (A-Law).

2. В файле конфигурации Asterisk "sip.conf" установите значение "dtmfmode=auto"

(см. "General" конфигурацию).

3. После этого переберите DTMF параметры на "Goip шлюз" с совершением звонка

(мобильный ТА современного поколения).

 

Если не помогает, соедините "Goip шлюз" вместо Asterisk с какие-нибудь VoIP шлюзом

(AddPac или D-Link (в режиме dtmf in band)) вывод на аналоговый ТА, терминируя на него звонок.

Ответьте на звонок, далее наберите (мобильный ТА современного поколения) DTMF

- Вы должны услышать характерный зуммер цифры.

 

Если Вы его не слышите, а слышите шелест или треск, попробуйте поменять прошивку на "Goip шлюз".

 

Вы должны услышать набор цифры, что решить проблему.

Либо же будет корректно обрабатываться сигнализация (dtmf out of band),

но это Вы поймете, только вернув соединение "Goip шлюз" и Asterisk.

Share this post


Link to post
Share on other sites

В GoIP измени параметр в разделе Configurations/Advance VoIP/ DTMF Signaling = Outband и Outband DTMF type = RFC2833

Share this post


Link to post
Share on other sites

Здравствуйте, коллеги.

 

Тоже есть GOIP-4 в хозяйстве.

 

Тоже долго не мог настроить передачу DTMF .

 

У меня заработало только  dtmf=inband с разрешенными кодеками alaw&ulaw .

 

По-другому не заработало, время дебажить не было. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this