Asterisk - JABBER_STATUS funcion

Hasta la versión 1.4 de asterisk, jabberstatus era una aplicación que podíamos usar de esta forma:

JabberStatus(Jabber,ScreenName,Variable)

Jabber: la etiqueta que hemos configurado en en el archivo jabber.conf en la carpeta /etc/asterisk

ScreenName: la cuenta de la que queremos conocer el estatus (si està conectado o no)

Variable: en nombre de la variable donde vamos a almacenar dicho estatus

El el caso de un usuario de googletalk un ejemplo podría ser este:

Jabberstatus(gtalk,fulano@gmail.com,variable)

Poniendo esta línea en nuestro dialplan (archivo extensions.conf en la carpeta /etc/asterisk) conoceremos el estatus de nuestro amigo fulano@gmail.com

Los posibles valores son:

  • 1 - En línea
  • 2 - Chateando o disponible para chatear
  • 3 - no presente (Away)
  • 4 - XAway
  • 5 - No disturbar
  • 6 - No conectado (Offline)
  • 7 - No presente en nuestra lista de amigos

Hagamos un ejemplo: queremos llamar un amigo pero antes de gastar nuestra plata en una llamada a un fijo o a un celular queremos averiguar si él está conectado a googletalk y si es así llamarlo directamente a su cuenta de googletalk ahorrándonos los costos de la llamada. Como hacemos?

Usando la aplicación Jabberstatus en nuestro dialplan.

Aquí va un ejemplo:

exten => 100,1,Jabberstatus(gtalk,fulano@gmail.com,varia)
exten => 100,n,Gotoif($[${varia} < 4]?google:celul)
exten => 100,n(google),Dial(
gtalk/gtalk/fulano@gmail.com,30,r)
exten => 100,n,Congestion(3)
exten => 100,n,Hangup
exten => 100,n(celul),Dial(SIP/justvoip/00573003333333,45,r)
exten => 100,n,Hangup

En este ejemplo asignamos a la variable varia el estatus de nuestro amigo fulano@gmail.com Si el valor de la variable es inferior a 3 (es decir que nuestro amigo o está en línea, o chateando o no presente pero conectado) lo llamamos directamente a su cuenta de googletalk, sino al celular).

Otra forma de usar Jabberstatus podría ser que si nuestro amigo no está conectado le enviamos un SMS al celular para que se conecte a googletalk y después de un rato intentamos volver a llamar.

En extensions.conf seria (usando el proveedor Justvoip para el envió de  los SMS):

exten => 100,1,Jabberstatus(gtalk,fulano@gmail.com,varia)
exten => 100,n,Gotoif($[${varia} < 4]?google:sms)
exten => 100,n(google),Dial(gtalk/gtalk/fulano@gmail.com,30,r)
exten => 100,n,Congestion(3)
exten => 100,n,Hangup
exten => 100,n(sms),Set(smsto=${CURL(
https://myaccount.justvoip.com/clx/sendsms.php?username=nombre.usuario&p... al googletalk)})
exten => 100,n,Hangup

Si nuestro amigo no está conectado al googletalk, le enviamos un SMS para decirle que lo haga. Después de un rato volvemos a marcar la extensión 100 y miramos si por fin está en línea.

En la versión 1.6 de asterisk la aplicación Jabberstatus se volvió una función y la sintaxis para usarla ya no es la misma. Esta es la sinopsis de la función

  -= Info about function 'JABBER_STATUS' =-

[Syntax]
JABBER_STATUS(<sender>,<buddy>[/<resource>])

[Synopsis]
Retrieve buddy status

[Description]
Retrieves the numeric status associated with the specified buddy (jid). If the
buddy does not exist in the buddylist, returns 7.
Status will be 1-7.
             1=Online, 2=Chatty, 3=Away, 4=XAway, 5=DND, 6=Offline
             If not in roster variable will be set to 7

Vamos a ver como cambia nuestro dialplan usando la función en lugar de la aplicación:

exten => 10000,1,Set(varia=${JABBER_STATUS(gtalk,fulano@gmail.com/talk)})
exten => 10000,n,Gotoif($[${varia} < 4]?google:celul)
exten => 10000,n(google),Dial(
gtalk/gtalk/fulano@gmail.com,30,r)
exten => 10000,n,Congestion(3)
exten => 10000,n,Hangup
exten => 10000,n(celul),Dial(SIP/justvoip/00573003333333,45,r)
exten => 10000,n,Hangup

Como pueden ver la primera línea cambia sustancialmente... La ultima parte /talk define el recurso como lo hemos configurado en jabber.conf (la parte en negrita)

[gtalk]
type=client
serverhost=talk.google.com
username=voztovoiceorg@gmail.com/talk
secret=contraseña
priority=10
port=5222
usetls=yes
usesasl=yes
statusmessage=Asterisk Server
timeout=100

Para que todo funcione tenemos que haber configurado nuestra centralita con una cuenta gmail y que nuestro Asterisk esté conectado con el servidor de GoogleTalk; además las personas que queremos llamar deben estar en nuestra lista de amigos.

Todo lo que hemos visto hasta ahora funciona en el mismo modo con un servidor jabber que no sea googletalk (ejemplo Openfire). Como que muchos clientes SIP ahora incorporan también un cliente Jabber, podemos usar esta opción para averiguar si un usuario tiene abierto su cliente SIP y si así es llamarlo directamente a su extensión.

Nada mal, verdad?

Un saludo

 

Etiquetas: 

Suscribirse a Comentarios de "Asterisk - JABBER_STATUS funcion" Suscribirse a VozToVoice - Todos los comentarios