Integración de Elastix con Gtalk

Nota: Este es un artículo que escribí hace mucho tiempo y encontré olvidado en mi computador. Hoy decidí liberarlo, pero con todos los cambios que ha realizado Google no estoy seguro si esto continúe funcionando. Esperemos que sí.

También aprovecho para agradecer a mi buen amigo Juan Pablo Bustos, gran maestro de Asterisk, quien me ayudó a probar que todo funciona perfectamente.

Instalar soporte para GTalk en Elastix es una tarea realmente sencilla: No hay que hacer mucho pues la versión de Asterisk que viene a partir de Elastix 2.2, ya trae el soporte para hablar GTalk compilado. Lo que explicaremos aquí será más bien cómo configurarlo para poder recibir llamadas en nuestro Elastix usando una cuenta GTalk.

Antes de comenzar debemos tener una cuenta de Google a la mano. En este caso usaremos la cuenta elastixcookbook@gmail.com

A continuación el contenido del archivo /etc/asterisk/jabber.conf


[general]
debug=yes
autoprune=yes
autoregister=yes

[gtalk]
type=client
serverhost=talk.google.com
username=elastixcookbook@gmail.com
secret=clavesecreta123456789
port=5222
usetls=yes
usesasl=yes
buddy=example@gmail.com
statusmessage=Asterisk Server
timeout=100

Ahora el contenido del archivo /etc/asterisk/gtalk.conf


[general]
context=from-gtalk
allowguest=yes

[guest]
disallow=all
allow=ulaw
context=from-gtalk

[elandivar]
username=elandivar@gmail.com
disallow=all
allow=ulaw
context=from-gtalk
connection=gtalk

[bustosjuan]
username=bustosjuan@gmail.com
disallow=all
allow=ulaw
context=from-gtalk
connection=gtalk

Al final de nuestro archivo /etc/asterisk/extensions_custom.conf añadimos los siguientes contextos.

[from-gtalk]
exten => s,1,NoOp( Call initializated from Google Talk )
exten => s,n,Set(CALLERID(name)="GTalk")
exten => s,n,Dial(SIP/5212,30)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(5212@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(5212@default,b)
exten => s,n,Hangup()

[to-gtalk]
exten => 10001,1,Dial(gtalk/gtalk/elandivar@gmail.com)
exten => 10001,n,Congestion(3)
exten => 10001,n,Hangup
exten => 10002,1,Dial(gtalk/gtalk/bustosjuan@gmail.com)
exten => 10002,n,Congestion(3)
exten => 10002,n,Hangup
exten => _*1XXXXXXXXXX,1,Dial(gtalk/gtalk/+${EXTEN:1}@voice.google.com)
exten => _*1XXXXXXXXXX,n,Congestion(3)
exten => _*1XXXXXXXXXX,n,Hangup

Dentro del contexto to-gtalk lo que le estoy diciendo a Asterisk es que si marco 10001 inicie una llamada al contacto elandivar@gmail.com y si marco 10002 inicie una llamada al contacto bustosjuan@gmail.com

Ojo: No olvidar incluir los contextos from-gtalk y to-gtalk, dentro del contexto from-internal-custom. En MI CASO, este contexto queda así.


[from-internal-custom]
exten => 1234,1,Playback(demo-congrats)
exten => 1234,2,Hangup()
exten => h,1,Hangup()
include => from-gtalk
include => to-gtalk

Finalmente reiniciamos Asterisk y a probar.

Si ingreso a Gmail e inicio sesión con mi cuenta elandivar@gmail.com, veré que el usuario elastixcookbook@gmail.com se encuentra en línea. Esto quiere decir que el usuario se registró correctamente desde Elastix!. Incluso puedo enviarle mensajes o iniciar una llamada con él.

Si inicio una llamada, esta timbrará en la extensión 5212, tal como he especificado en el archivo /etc/asterisk/extensions_custom.conf

Screen Shot 2014-03-10 at 12.44.31 AM

Bueno, los dejo. Tengo una llamada de Google sonando en mi teléfono 🙂

phone_gtalk

1 comentario

  1. Alfredo Pastor   •  

    Maestro… Eh logrado que la conexión sea todo un éxito con su tutorial. Lo único que no logro hacer funcionar es el audio. Eh parado el iptables en mi servidor, pero al parecer no hay conflictos por ahí. Quizá tenga que abrir los puertos en mi router o el nateo lo realiza gtalk?
    Espero que me de una mano.

    Saludos,
    Alfredo.

Deja un comentario