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: usuario@servidor/[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: pkozlowski@servidor/trabajo y la otra en su casa: pkozlowski@servidor/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(
   'consultor@localhost', // 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

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP