Столкнулся с такими проблемами при настройке связки Goip+Asterisk. Goip регистрируется на сервере Asterisk. Я звоню на шлюз по GSM. Он кидает на IVR, где осуществляется донабор номера. Так вот сигналы DTMF цифр 4 и 5 (да только эти ))) не распознаются сервером. Наткнулся на кучу статей и рекомендаций в гугле. Вот одна из них:
http://subnets.ru/blog/?p=1278
Перепробовал все что можно. за исключением инструкций по смене частот кодов и перекомпиляции сервера (Asterisk работает на NAS Synology ).
Настройки на сервере:
- Код: выделить все
[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.
Так обрабатываются нажатия:
- Код: выделить все
[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)
Замечание: если звонить с очень древнего мобильного телефона, все корректно работает. Также если звонить со софтфонов внутри сети. Проблема только при звонке с мобильного на Goip. Пробовал разные типы DTMF - не помогло. Может ли дело быть в частотах DTMF?