sábado, 25 de junho de 2011

Discando interativamente para contas Google Talk (Asterisk + XMPP)


Objetivo

Possibilitar a realização de chamadas de voz para contas Google Talk de forma interativa utilizando um servidor Asterisk conectado a um servidor XMPP.

Requisitos

Servidor Asterisk integrado com um servidor XMPP (Openfire, ejabberd, Prosody, etc...) e com o Google Talk. Saiba como realizar esta integração aqui.

O procedimento

O contexto aqui proposto é bastante simples e atende somente um ramal (já que envia a mensagem para um usuário específico). Você pode aprimorá-lo utilizando AEL ou AGI possibilitando assim estender o recurso para todos usuários de seu domínio XMPP.

O contexto funciona da seguinte maneira: o usuário disca para o número *48255* (*GTALK*) e recebe uma mensagem em seu cliente XMPP solicitando o destino da chamada. Após informar o endereço Google Talk do destinatário o Asterisk realiza a "discagem" e o usuário de imediato já passa a escutar o tom de chamada, como em qualquer outra ligação realizada.

O contexto:
[togtalk]
exten => *48255*,1,Answer() ; atende a chamada
same => n,Set(CANAL=${CUT(CHANNEL,,1)}) ; Armazena o canal que efetuou a chamada
same => n,NoOp(Discando Gtalk de ${CANAL}) ; Mensagens no asterisk
same => n,NoOp(Mandando mensagem para marcelo@xmpp.dominio.com.br) ; Mensagens no Asterisk
same => n,JabberSend(xmpp,marcelo@xmpp.dominio.com.br,Discando Google Talk - Informe a conta de destino) ; Envia msg para o usuário solicitando o endereço GTalk do destinatário
same => n,Set(OPCAO=${JABBER_RECEIVE(xmpp,marcelo@xmpp.dominio.com.br,30)}) ; Aguarda 30 segundos pela resposta do usuário
same => n,JabberSend(xmpp,marcelo@xmpp.dominio.com.br,Discando para ${OPCAO}) ; Envia msg para o usuário informando para onde irá discar
same => n,Dial(gtalk/asterisk-gtalk/${OPCAO}) ; Realiza a chamada
same => n,HangUp
Finalizando

Como podemos observar trata-se de um recurso muito útil e de fácil implementação. 

Caso você desenvolva um contexto mais elaborado não deixe de compartilhá-lo através dos comentários.

:-)

UPDATE 30/05/2012

Segue exemplo de configuração do jabber.conf:

[asterisk-gtalk]
type=client
serverhost=talk.google.com
username=myuser@gmail.com/Talk
secret=mysecret
port=5222
usetls=yes
usesasl=yes
statusmessage="Asterisk Server"
timeout=100