LiveChat – Jabber en nuestra aplicación web

Actualmente, Jabber puede no ser el protocolo más popular que exista para estas cosas, pero posee toda una serie de ventajas, entre las cuales podemos mencionar: la comunicación en forma de secuencia de paquetes XML, una especificación abierta y bien documentada, disponibilidad de numerosos tipos diferentes de clientes y servidores y la posibilidad de cooperar con otras redes de mensajería.

En esta página podemos encontrar una lista de librerías que brindan un soporte para Jabber. Para prácticamente todo lenguaje de programación es posible encontrar al menos una implementación apropiada. En el caso de PHP, podemos escoger entre dos soluciones diferentes: ClassJabberPHP y phpjabberclass. Aunque los nombres son casi idénticos, la primera de estas librerías parece ser un producto más maduro, además de poseer una documentación superior. Por estas razones haremos uso de ClassJabberPHP para nuestro proyecto.

. Informaciones básicas acerca de Jabber

La palabra “Jabber” comprende una cantidad de elementos que conforman toda una infraestructura para el intercambio rápido de mensajes (en inglés instant messaging). Esta infraestructura está compuesta principalmente por el protocolo mismo (Jabber) y por diversos productos que lo implementan: clientes de mensajería y servidores que hacen de intermediarios en el intercambio de mensajes.

Una de las principales ventajas de Jabber es la de ser abierto: no sólo son públicas todas sus especificaciones, sino que hasta los mismos paquetes que sirven para el transporte de los mensajes son legibles, pues su formato es XML, por lo que no es difícil hacer un seguimiento de la información transmitida (la mayor parte de los clientes de Jabber incluyen alguna herramienta de tipo consola XML), lo que a su vez facilita enormemente la construcción de clientes y servidores.

La red Jabber tiene una arquitectura distribuida, lo que quiere decir que no existe un servidor central que medie en el intercambio de mensajes. De manera similar a como sucede con el correo electrónico, muchos servidores diferentes colaboran entre sí para llevar los mensajes de un usuario a otro.

Los identificadores de usuario en Jabber (JabberID, JID) se parecen mucho a las direcciones de correo electrónico: [email protected]/[recurso]. El fragmento [recurso] informa al servidor Jabber de la ubicación del cliente de mensajería que estamos utilizando en este momento. Por ejemplo, el autor del artículo puede usar dos direcciones, una en su trabajo: [email protected]/trabajo y la otra en su casa: [email protected]/casa.

Es interesante observar cómo, a pesar de ser relativamente nuevo, han empezado a aparecer diversos mitos alrededor del protocolo. Uno de los que con mayor frecuencia puede uno encontrarse (nacido de la inexactitud) es el de que la comunicación en Jabber no puede llevarse a cabo más que sobre SSL. La verdad es que, si bien es cierto que muchos clientes de Jabber implementan el soporte de capa segura, no se debe olvidar que la comunicación entre servidores nunca es cifrada.

. Nuestros primeros mensajes

¡Pero basta ya de toda esa teoría! En el Listado 1 podemos ver un ejemplo de envío de mensajes Jabber desde un script en PHP. El fragmento de programa presentado no debería ser difícil de analizar: primero incluimos el fichero que contiene la definición de la clase y creamos una nueva instancia de ésta. Una vez especificados los valores de los parámetros (server, port, username, password, resource) estamos listos para establecer conexión con el servidor Jabber y autorizarnos (con los métodos $JABBER->Connect y $JABBER->SendAuth). Si no tenemos ningún problema durante la negociación de la conexión podremos finalmente pasar al envío de los mensajes. El método SendMessage() es uno de los que utilizaremos con mayor frecuencia, por lo que vale la pena que nos detengamos un momento para mirar más de cerca sus parámetros:

  • destinatario o, más exactamente, su identificador (JID),
  • tipo del mensaje – determina el contexto del mensaje enviado; puede tomar uno de los siguientes valores: normal (mensaje simple), chat o groupchat (conversación más extensa con uno o varios usuarios) y headline (noticia, enviada por lo general de manera automática por un servidor en el que se ha subscrito un servicio concreto),
  • identificador del mensaje – si entregamos NULL al método, la clase ClassJabberPHP le asignará uno automáticamente antes de enviarlo,
  • el mensaje propiamente dicho, en forma de array asociativo con las siguientes entradas:
  • subject (opcional) – tema,
  • body – cuerpo del mensaje,
  • thread (opcional) – identificador del hilo de conversación, el cual permite agrupar una serie de mensajes como pertenecientes a una misma conversación.
Listado 1: Envío de mensajes a la red Jabber
<?php

require('lib/jabber/class.jabber.php');

$JABBER = new Jabber;

$JABBER->server         = 'localhost';
$JABBER->port           = '5222';
$JABBER->username       = 'www_send';
$JABBER->password       = 'www_send';
$JABBER->resource       = 'ClassJabberPHP';

$JABBER->Connect() or die('¡No puedo conectarme!');
$JABBER->SendAuth() or die('¡No puedo autorizarme!');

session_start();

$JABBER->SendMessage(
   '[email protected]', // JabberID del destinatario
   'normal',                // tipo de mensaje
   NULL,                    // identificador
   array(
      "subject" => 'Hello World!',
      "body" => 'Hello World con ClassJabberPHP!',
      "thread" => session_id(),
      )
   );

$JABBER->Disconnect();

?>

En la Figura 1 puede verse el resultado de la ejecución del script del Listado 1.

Figura 1: Envío de un nuevo mensaje desde un script PHP

Ahora no nos será difícil escribir un script que envíe el formulario de contacto a través de Jabber, en lugar de escribirlo en una base de datos o convertirlo en un mensaje de correo electrónico, como veníamos haciendo hasta ahora. Gracias a esto, los mensajes llegarán directa y casi inmediatamente al escritorio del destinatario.

No obstante, nuestro formulario adolece aún de los defectos mencionados al principio del artículo, a saber:

  • no sabemos si el destinatario está actualmente en línea y si podrá responder rápido a la pregunta,
  • el destinatario no tiene una posibilidad real de responder a la pregunta, pues el script PHP (que es el verdadero cliente Jabber) deja de existir en la memoria una vez ha sido ejecutado.

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.