Métodos de envío de alertas

Existen varios métodos para enviar una alerta a un equipo Motorola en la red de Nextel. Muchas veces, enviar un mensaje por SMS al equipo es suficiente para notificar al usuario de algún evento. Sin embargo, existen un par de métodos para enviar notificaciones que no sólo transmiten la información sino que permiten, de manera sistemática, facilitarle al usuario una respuesta automatizada.Esto permite controlar el formato de entrada, ofrecer opciones apropiadas, controlar de manera más eficaz cuándo y cómo se recibió la alerta, y en general integrar de manera más completa a la notificación en un flujo de trabajo automático.

Usando UP.Notify con WAP se puede establecer un proceso de llamadas y respuestas eficaz y sencillo sin tener que escribir una aplicación Java o instalar un cliente en el equipo. Eso sí, se debe tener en cuenta que para que esto funcione el equipo debe estar dentro del área de cobertura.

Uso de UP.Notify

UP.Notify es una herramienta de la tecnología WAP que permite enviar una alerta de datos al equipo. En dicha alerta se envían dos datos:

  • Titulo de la alerta
  • URL

Cuando el usuario confirma que quiere ver la alerta, el navegador WAP del equipo va al URL que se envío en la alerta.

Esta facilidad permite desarrollar soluciones que eviten que el usuario tenga que estar activamente pidiendo actualizaciones, lo cual es ideal para situaciones en las cuales los datos deben ser empujados al usuario sin tener que instalar un cliente en el equipo.

Para enviar una alerta tipo UP.notify, sólo basta iniciar una sesión telnet al servidor HTTP apropiado de Nextel, al puerto determinado, y enviar un documento de XML con las instrucciones necesarias para indicarle al gateway que debe iniciar una alerta y el URL al que debe dirigir al navegador. La página en ese URL podría contener información sobre una orden te trabajo, una notificación de una rebaja en una tienda cercana, una alerta de seguridad, una noticia de último minuto, o cualquier otro tipo de contenido que sea importante informar a un usuario.

Como ejemplo muy sencillo, creemos una alerta que nos lleve a una página escrita en XHTML-MP que nos ofrecerá ciertas herramientas que, como desarrolladores, nos servirán. De igual manera podríamos dirigir el navegador a cualquier otra página con tal que tenga un formato apropiado (XHTML-MP o WML 1.3).

Antes de hacer cualquier cosa, hay dos datos que necesitamos saber:
- un identificador único para el usuario al que le enviaremos la alerta
- el tamaño completo del mensaje XML que enviaremos.

El identificador x-up-subno

Así como cada equipo habilitado en Datos tiene una IP privada y estática como identificador, también tiene un valor conocido como el subscriber id que es un identificador único para los servicios WAP. Este valor lo transmite el navegador Openwave en el encabezado HTTP de cada sesión que se abre, en el valor 'HTTP_X_UP_SUBNO' del encabezado.

El formato de un subscriber id es

1234567890-12345_net1.nextelinternational.com

Éste no tiene ninguna relación con ningún numero identificable por el usuario -- es decir, la única parte que puede hacer una correspondencia entre el subscriber id y un usuario es Nextel, o un desarrollador con permisos especiales para darle acceso a nuestras bases de datos.

Cada vez que se cambia la IP del equipo se pierde el subscriber y se asigna otro.

El subscriber id permite no sólo el envío de alertas usando UP.Notify, sino que también puede ser como un mecanismo adicional de control de acceso a una solución WAP en general.

Para obtener el subscriber id, tenemos una paradoja: necesitamos hacer que el equipo se conecte a un servidor para poder extraer el subscriber ID, pero no podemos enviar una alerta sin tener el subscriber id. Esto significa que el usuario debe iniciar una conexión a nuestro servidor antes que nosotros podamos enviarle una alerta--lo cual, si lo pensamos bien, es una ventaja y por diseño, ya que si fuese fácil obtener el subscriber ID, sería fácil enviarle mensajes no deseados a cualquier subscriptor.

Para un propósitos de prueba, si requiere obtener el subscriber id de su equipo, visite la dirección http://developer.nii.com/headers.php desde el navegador en el equipo, y de ahí podrá extraer el subscriber id de éste.

El tamaño del XML que vamos a enviar en la alerta

Antes de iniciar la sesión para enviar la alerta, debemos saber cuantos caracteres tiene el XML que vamos a enviar con la alerta. Esto significa que debemos crear el XML antes de establecer la conexión.

El XML que vamos a usar es el siguiente:

<?xml version="1.0"?>
<!DOCTYPE ALERT PUBLIC "-//PHONE.COM//DTD ALERT 1.0//EN"
"http://www.phone.com/dtd/alert1.xml">

<ALERT LABEL="UP SUBNO" COUNT="1" HREF="http://developer.nii.com/waptools.wml" URGENCY="HIGH" />
</xml>

La primera hilera determina que éste es un documento tipo XML. La segunda indica qué debemos usar el DTD definido por Openwave (antes conocido como phone.com) para leer el XML. La tercera hilera en sí define la alerta:

LABEL
define el texto que se le mostrará al usuario cuando vea la alerta en su equipo.
URGENCY
Especifica qué actividades debe ejecutar el equipo -- los resultados varían de equipo en equipo, así que recomendamos usar HIGH para causar una alerta visual y generar un tono cuando el equipo reciba la alerta.
COUNT
Es un parámetro opcional que se puede usar para comunicar estado, pero en general no tiene mucha utilidad en los equipos iDEN
HREF
Si el valor de HREF es uno que se vio en una alerta anterior, el equipo, en vez de añadir una nueva alerta al buzón de recibo, reemplaza la alerta anterior; por lo tanto, si se desea mantener un registro en el equipo de alertas enviadas, el valor HREF debe permanecer en blanco.

Este XML tiene un total de 221 caracteres.

Envío de la alerta

Primero, debemos establecer una sesión con el servidor de Nextel para UP Notify. Abrimos una sesión directa al servidor con telnet al puerto 4445

telnet net1.nextelinternational.com 4445

y de ahí enviamos los comandos que establecerán y controlarán la sesión HTTP que usaremos para enviar el XML al servidor (valga decir que el servidor no dará ninguna confirmación luego de ingresar cada uno de estos comandos):

POST /ntfn/add HTTP/1.0

Este comando establece la sesión HTTP al servicio que procesa las alertas entrantes.

Luego, siguen algunos encabezados:

Accept: text
Content-type: application/vnd.uplanet.alert
Content-length: 185
x-up-upnotifyp-version: upnotifyp/3.0

Estos tres indican que enviaremos texto de tipo alerta version 3.0, con un contenido total de 221 caracteres (el tamaño total del XML que enviaremos).

Luego siguen los demás encabezados

x-up-subno:
0000000000-000000_net1.nextelinternational.com

Donde se reemplazan los ceros con el subscriber id que obtuvimos anteriormente.

x-up-ntfn-channel:push
x-up-ntfn-ttl: 0

Esto le indica el servidor que debe enviar la transacción al equipo, y que debe intentar hacerlo el tiempo especificado en ttl antes de darse por vencido. Un valor de cero indica que debe esperar el máximo de tiempo permitido por el sistema.

Content-Location: http://developer.nii.com/waptools.wml

El encabezado Content-Location contiene el URL al que debe ser dirigido el usuario -- es aquí donde pondría ud. el URL de su propia página WML con la información correspondiente.

Luego de todos los encabezados, debemos incluir una línea en blanco antes de incluir el contenido del XML:

<?xml version="1.0"?>
<!DOCTYPE ALERT PUBLIC "-//PHONE.COM//DTD ALERT 1.0//EN"
 "http://www.phone.com/dtd/alert1.xml">

<ALERT LABEL="UP SUBNO" COUNT="1" HREF="" URGENCY="HIGH" />
</xml>

Falta enviar dos líneas en blanco para confirmar que está completa la transmisión de datos.

El servidor confirmará el éxito indicando lo siguiente

HTTP/1.0 204 No Content 
x-upnotify-response-status: 0 
Content-Length: 0 
x-up-upnotifyp-version: upnotifyp/3.0 

Una respuesta sin contenido es una respuesta exitosa, por más que parezca contradictorio. Si recibimos contenido, éste indicará el tipo de error que se generó -- por ejemplo, si no existe ningún usuario con el subscriber id indicado:

HTTP/1.0 400 Invalid subscriber ID 0000000000-000000_net1.nextelinternational.com
Content-Type: text/html 
x-upnotify-response-status: 205 
Content-Length: 148 
x-up-upnotifyp-version: upnotifyp/3.0   
<HTML>
  <TITLE>Error</TITLE>
  <BODY>
    <H1>Error 400: Invalid subscriber ID 0000000000-000000_net1.nextelinternational.com</H1>
  </BODY>
</HTML>

El usuario recibirá, en caso de éxito, una alerta en su equipo que, al verla, lo dirigirá a la página indicada.