Hola buenas tardes,
Desde hace un tiempo me surge alguna duda con respecto a:
- Cómo funciona la negociación del método DTMF a usar
- Si es posible que un terminal pueda usar un método dtmf u otro según al destinatario al que se quiera llamar (al igual que se puede hacer con la "negociación" de codecs.
Digamos que trabajo con unos teléfonos analógicos los cuales pueden realizar comunicaciones de voz (llamada a otro teléfono) y comunicaciones de datos(llamada a un modem conectado a un pc).
¿Qué es lo que trato de conseguir?
- Por una parte cuando se realicen comunicaciones de voz desde mi teléfono necesito que se use el método dtmf "rfc2833" ya que trato de usar el codec g729 para llamadas de voz, y el método dtmf inband no me vale sobre g729(si no me confundo)
- Por otra parte cuando se realicen comunicaciones de datos desde mi teléfono necesito que se use el codec g711 y el método dtmf "inband", ya que sino fallan las comunicaciones de datos (no entiendo el por qué, pero al parecer el protocolo que usan los teléfonos analógicos para comunicarse con los modems debe de usar tonos dtmf en algún momento, y sino se usa dtmf "inband" la comunicación resulta fallida).
Este es mi dialplan resumido:
exten => _*00*.,1,NoOp()
same => n, Set(SIP_CODEC=alaw)
same => n,Dial(SIP/GXW4104P1/991${EXTEN:4},30)
same => n,Hangup()
exten => _9876.,1,NoOp()
same => n,Dial(SIP/proveedorvoip/${EXTEN:4},60)
same => n,Hangup()
Y este es mi sip.conf:
[telefonos_analogicos](!)
type=friend
context=outgoing
host=dynamic
language = es
dtmfmode=auto
disallow=all
allow=g729
allow=alaw
qualify=yes
canreinvite=no
busylevel=1
call-limit=1
[GXW4104P1]
defaultuser=GXW4104P1
type=friend
host=dynamic
dtmfmode=inband
language = es
qualify = yes
disallow=all
allow=alaw
context=default
canreinvite=no
insecure=port
secret=
[voipdiscount]
type = peer
secret =
defaultuser =
fromuser =
host =
fromdomain =
language = es
dtmfmode=rfc2833
insecure = invite
canreinvite = no
nat = force_rport,comedia
qualify = no
disallow=all
allow=g729
Cuando realizo las llamadas de datos salgo a través de un GXW4104(FXO) y cuando realizo las llamadas de voz a través de internet.
Dispongo de un gateway GXW4232 para conectar mis teléfonos analógicos.
El GXW4104 lo tengo configurado de manera que solo se usa el codec ALAW y el método dtmf in audio
El GXW4232 lo tengo configurado de manera que la negociación DTMF esté activada. Si tengo como prefered DTMF en primera opción IN AUDIO y en segunda opción RFC2833 las comunicaciones de datos fallan ya que al parecer trata de establecerlas usando rfc2833 a pesar de tener como primera opcion IN AUDIO y de usar dtmfmode=auto. Si tengo como prefered DTMF en las 3 opciones IN AUDIO establece las comunicaciones usando dtmf inband si o si y no fallan las comunicaciones de datos pero a cambio no puedo usar mas que dtmf in audio, lo cual bajo g729 no funciona de forma correcta.
He probado creo que todas las combinaciones posibles (las más y las menos lógicas) y no consigo que funcionen de forma correcta las comunicaciones de datos y voz a la vez.
Hasta ahora lo mejor que he podido conseguir es que las comunicaciones de datos funcionen al 100% y las de voz funcionen pero con posibles problemas de dtmf. Lo curioso es que si establezco comunicación con otra centralita Asterisk que dispongo, al entrar al menú IVR y marcar el número de la extensión, la centralita llamante no detecta los tonos DTMF pero sí los detecta la centralita llamada (en la consola de la centralita llamante no aparecen los tonos DTMF pero sí aparecen en la centralita llamada).
un saludo y gracias por vuestra ayuda
Miguel Sanz