viernes, 8 de junio de 2012

Conectar Asterisk en RaspberryPi con Google Talk

y que puedan llamarnos nuestros contactos de Google

otro SuperPoder más!

Aprovechando que ya tenemos nuestro Asterisk a pleno rendimiento, vamos a facilitar y extender su uso, a Google Talk, de forma que podamos llamar a nuestros contactos de GTalk, desde nuestras extensiones sip e incluso desde el fijo de casa. Tambien puede ser al revés, podrán llamarnos a nuestra cuenta de GTalk y que suenen nuestras extensiones sip y/o el teléfono analógico.

Resulta interesante saber que Google es nuestro amigo (Don't be Evil!!) y nos deja conectar la cuenta de Gtalk a casi cualquier servicio de voz en software libre. Vamos a usar Jabber para hacer la conexión contra nuestra cuenta de Gtalk (la de Gmail). Primero es asegurarnos que tenemos nuestro Asterisk correctamente instalado y funcionando, pasaos por el post en cuestión y aseguraos. En mi caso voy a usar dos cuentas de GTalk:

  • CUENTA_CASA@gmail.com será la que registre en Asterisk
  • CUENTA_PERSONAL@gmail.com que será uno de los contactos

Registro

Empezamos editando:
vim /etc/asterisk/jabber.conf
Este es el contenido del mio:
[general]
autoregister=yes

[asterisk]
type=client
serverhost=talk.google.com
username=CUENTA_CASA@gmail.com/Talk
secret=clave_supersecreta
port=5222
usetls=yes
usesasl=yes
buddy=CUENTA_PERSONAL@gmail.com
statusmessage="El telefono de Friky"
timeout=100
Y ahora:
vim /etc/asterisk/gtalk.conf
Que tiene que parecerse más o menos a esto:
[general]
bindaddr=0.0.0.0
;externip=193.238.54.115     ; Tu IP publica
externhost=TU_HOST.dyndns.org
context=entrante-gtalk
allowguest=yes

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

[asterisk]
username=CUENTA_CASA@gmail.com
disallow=all
allow=alaw,ulaw
context=entrante-gtalk
connection=asterisk
Y poco más (para el registro). Para que veamos el efecto, la siguiente imagen es una captura del chat (GTalk) integrado de Gmail de CUENTA_PERSONAL@gmail.com:
Y ahora recargamos las configuraciones de Asterisk de la siguiente forma:
asterisk  -r
*CLI> core set verbose 10
*CLI> module reload
*CLI> jabber show connections

Jabber Users and their status:
       [asterisk] CUENTA_CASA@gmail.com/Talk     - Connected
----
   Number of users: 1
Parece que está bien, vemos ahora como cambia el chat:
Jejeje perfecto.

Uso de la cuenta de GTalk

Una vez que tenemos el registro comprobado, hay que darle utilidad, para ello editamos:
vim /etc/asterisk/extensions.conf
Y ponemos por ejemplo la siguiente configuración:
[globals]
gtw=sip/gateway
opc=tTrkKwW

[internos]
include => parkedcalls

exten => 1002,1,Dial(sip/1002,${TIMEOUT},${opc}) ; este es el telefono analogico
same => n,Goto(nulo,s,1)

exten => 100,1,Dial(sip/Juanmol,${TIMEOUT},${opc})
same => n,Goto(nulo,s,1)

[salientes]
exten => 112,1,Dial(${gtw}/112)

exten => _X.,1,NoOp(${CALLERID(num)} llamando a ${EXTEN})
same => n,Dial(${gtw}/${EXTEN},,tT)
same => n,Goto(nulo,s,1)

exten => 2244,1,Dial(Gtalk/asterisk/CUENTA_PERSONAL@gmail.com)
same => n,Goto(nulo,s,1)

[usuarios]
include => internos
include => salientes

[entrantes]
exten => s,1,NoOp(Ha llamado ${CALLERID(num)})
same => n,Dial(SIP/1002&SIP/Juanlu,${TIMEOUT},${opc})
same => n,Goto(nulo,s,1)

[entrante-gtalk]
exten => s,1,Answer()
same => n,Set(CALLERID(name)=${CUT(CALLERID(name),\@,1)})
same => n,NoOp(llamada entrante de ${CALLERID(name)} y por GTalk, flipa!)
same => n,Dial(sip/1002&sip/Juanmol)
same => n,Goto(nulo,s,1)

[nulo]
exten => s,1,Hangup()
exten => h,1,Hangup()
exten => _X,1,Hangup()
exten => _X.,1,Hangup()
Este dialplan (que habría que completar) viene más o menos a ser, que las llamadas entrantes del SPA3102 (la linea analógica) suenan en el teléfono analógico, conectado al mismo SPA y a la extensión sip/Juanmol que por ejemplo la tengo registrada en el Android. Las entrantes de GTalk siguen el mismo camino. Las salientes se realizan por la línea analógica. Para llamar a sip/Juanmol desde el teléfono analógico, marcaría 100 y para llamar a CUENTA_PERSONAL@gmail.com, llamaría al 2244, desde el analógico o desde sip/Juanmol
Que cosa más hermosa

6 comentarios:

  1. Llevaba tiempo detras de montar la centralita en casa... Muchas gracias por todo este conocimiento. Estoy disfrutando cmo un enano

    ResponderEliminar
  2. Muchas gracias por la info y tengo un aporte para quienes lean esto:

    Para grabar las llamadas entrantes a la cuenta de gtalk agregar

    exten => s,n,Set(CALLERID(name)=${CUT(CALLERID(name),\@,1)})
    exten => s,n,Set(Call_ID=${CUT(CALLERID(name),\@,1)})
    exten => s,n,Set(calltime=${STRFTIME(${EPOCH},,%C%y_%m_%d-%H:%M:%S)})
    exten => s,n,Set(calldir=/var/spool/asterisk/monitor)
    exten => s,n,MixMonitor(${calldir}/${Call_ID}-${calltime}.wav)

    a [entrante-gtalk]

    Es lo mismo para las salientes pero se modifica el identificador por el de la extencion..


    Saludos.

    ResponderEliminar
    Respuestas
    1. ¡¡¡MUCHO OJO!!! yo aun no había publicado nada de grabar las llamadas. Que cada uno consulte según su operador/país la legalidad de esto. NO ME HAGO RESPONSABLE DE LAS OPINIONES DE LOS COMENTARIOS, pero tampoco lo borro porque esta muy bien explicado ;)

      Eliminar
  3. Si eres tan burro como yo que si saber vas a la ultima y tienes Asterisk 11, vereis que en esta version no se modifica el jabber.con sino xmpp.conf.

    Si quereis mas información aqui teneis la solucion (aunque en inglés)
    https://wiki.asterisk.org/wiki/display/AST/Calling+using+Google

    ResponderEliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  5. Muy buenos días, estoy montando un sistema de alarma para casa, y me gustaría que las raspberry realizara una videollamada cuando salta la alarma. Ya tengo configurado asterisk con gtalk (ambas cuentas se ven correctamente), Ahora necesito saber ¿cómo puedo iniciar la videollamada desde la raspberry al otro contacto?

    ResponderEliminar