Kannel utiliza la licencia BSD.
Kannel fue en primer lugar una pasarela WAP, pero amplió sus funcionalidades posteriormente para dar soporte a WAP usando SMS como transporte de los datos y para obtener páginas web.
El código ahora es bastante estable, estando reconocido y certificado por el WapForum como una pasarela que se ajusta a los estándares WAP. Detrás de Kannel hay un numeroso grupo de desarrolladores y colaboradores. La empresa que comenzó a desarrollar Kannel se llamaba WapIt. Recientemente tuvo problemas económicos y cerró. Desde entonces, se está tratando de crear una fundación que dé apoyo al mantenimiento del desarrollo de Kannel, pero las últimas noticias que aparecen en el sitio web de Kannel son del mes de Junio de este año...
Kannel es un proyecto grande, con una estructura detallada que le convierte en "demasiado complejo" para algunas instalaciones. Sin embargo, su objetivo principal es la escalabilidad y alta disponibilidad desde su planteamiento inicial.
Básicamente, en una instalación mínima, aparece lo que en Kannel denominan "BearerBox", el componente que comunica con el centro servidor de mensajes (SMSC) o un teléfono WAP que puede sustituirlo en parte. Con este BearerBox comunican los otros componentes, "SMSBox" y "WAPBox", que se encargan de acceder a los servidores HTTP que tienen el contenido que se deseea acceder, y que realizan las conversiones/compresiones que establece el protocolo WAP para el envío de los mismos a los teléfonos.
En una instalación orientada a SMS, desde el teléfono celular se envía un mensaje que es recibido por el SMSC u otro teléfono móvil, que recibe el mensaje para pasárselo al BearerBox; el mensaje es encaminado al SMSBox, que accede a una página web (puede ser un cgi que genere la página dinámicamente, para ejecutar comandos o lanzar programas, por ejemplo) y el resultado es devuelto al BearerBox de nuevo para ser devuelto al teléfono.
Kannel está orientado principalmente al trabajo directo con centros servidores de mensajes (SMSC) e implementa muchos protocolos de acceso a SMSCs de diferentes fabricantes. Es en la conexión directa con un SMSC cuando se obtienen los mejores resultados de rendimiento; sin embargo, no siempre se tiene disponible una conexión de este tipo con la red GSM, por lo que también implementa conexión mediante modem GSM o teléfono móvil con modem incorporado.
Alamin utiliza la licencia GPL.
Alamin nació inicialmente con el objetivo de poder lanzar sencillas lineas de comando desde un teléfono móvil. En Marzo de 1998 se implementó un servicio que monitorizaba un buzón de correo y recibía sus mensajes, interpretaba su contenido y realizaba alguna acción, devolviendo un resultado también por correo electrónico. El acceso al teléfono móvil se realizaba mediante una pasarela sms/email. Esta pequeña pasarela estaba realizada en Perl y sus especificaciones se pueden encontrar en http://andressh.alamin.org/SSJP/. Este servicio no llegó a ser puesto en marcha en ninguna instalación real.
Posteriormente, a mediados de 1999, el proyecto Gnokii permitió acceso directo a la red GSM. Ya existian los modems GSM, pero estaban muy poco extendidos, eran caros y difíciles de conseguir.
Alamin utilizó primero Gnokii como medio de acceso a la red GSM, y, al evitar usar otra pasarela a más bajo nivel, se ganó en fiabilidad. En mayo de 2000 se pusieron en marcha las primeras instalaciones en explotación de Alamin.
Alamin se compone principalmente de dos componentes: el manejador de mensajes (gsgmdd, Message Distpatcher) y el núcleo que gestiona las peticiones desde la red IP (gsgcmd, Core Module).
El Core Module es el que centra la gestión del servicio, el control de acceso de las peticiones desde la red IP, despliega los alias en los números que corresponda y prepara las solicitudes para ser enviadas. La comunicación entre los clientes de la red IP y el Core Module se realiza mediante el protocolo smsqp, que utiliza por defecto el puerto 11201/tcp para su comunicación. Este protocolo no está terminado de especificar, ya que se está desarrollando con Alamin.
El Message Dispatcher se encarga de la entrega de los mensajes desde las colas de prioridades al dispositivo GSM, comprueba la existencia de mensajes entrantes y lanza programas externos para el tratamiento de los mensajes que han llegado. Inicialmente, el Message Dispatcher utilizaba Gnokii para realizar estas tareas, pero ahora ya usa comunicación directa con modems GSM mediante comandos AT. En el momento actual de desarrollo, sólo se permite un dispositivo GSM por cada Message Dispatcher. En sucesivas versiones se podrá utilizar multiples dispositivos GSM, tablas de rutas para decidir por dónde se envía un mensaje, y su arquitectura será cambiada para facilitar que se puedan añadir de forma sencilla nuevos "controladores" para otros dispositivos GSM o para utilizar otras pasarelas en cascada (http, accesos directos a SMSC, protocolos de otras pasarelas, etc.)
Adicionalmente a estos dos componentes van a ser añadidos otros que implementan diferentes protocolos para permitir que otras aplicaciones, directamente, sin cambios, accedan a la red GSM. Uno de ellos, que ya está incluido en la distribución de la pasarela y que implementa el protocolo SMTP, es gsgsmtpd (SMTP interface). De esta forma, la pasarela traduce directamente mensajes de correo a SMS.
Están pendientes de implementación otros protocolos, como POP, que permitirá que desde cualquier cliente de correo se puedan recibir mensajes SMS convertidos a mensajes de correo electrónico. También está pendiente de implementar el modo PDU en el envío de mensajes para modems GSM. Sólo se soporta, temporalmente, el modo texto. El modo PDU en el envío de mensajes SMS mediante comandos AT permite enviar caracteres no imprimibles, es decir, no solo letras, números y algunos caractéres especiales, si no que cualquier valor desde 0 a 255 puede ser utilizado. Es necesario para el envío de mensajes en formatos avanzados o el envío de melodias y logotipos.
El cliente de Alamin es un sencillo programa en Perl de linea de comando que puede tener sus opciones de configuracion en un fichero o indicarlas en la propia llamada al programa:
andres@pruebas:~$ gsgc --help Usage: gsgc [--version|--help] gsgc [--configfile config_file_name] [--debug|--nodebug] [--verbose|--noverbose] [--copyright|--nocopyright] [--port port_number] [--host host_name] [--syslog facility|--nosyslog] [--priority 1-9] [--smsc short_message_service_center_number] [--user username] [--password secret_password] [[--send dest_number[,more_dests]... message_content] ] andres@pruebas:~$ gsgc --user andres --password clave \ --host smsgate.dominio.com --priority 5 \ --send 612345678 "mensaje de prueba" Message sent. |
En el ejemplo, --user andres --pasword clave se usan para identificarse de cara a la pasarela. Si no se especifican, se realiza una conexion anónima. Según esté configurada la pasarela, puede permitirse/denegarse el envío a determinados números dependiendo el usuario que trate de realizarlo. El parámetro --host smsgate.dominio.com especifica el nombre del equipo en el que está alojada la pasarela. Finalmente, --priority 5 indica que debe ser utilizada la cola de prioridad 5. Estas colas permiten, por ejemplo, enviar masivamente mensajes por una prioridad baja e intercalar posteriormente mensajes más urgentes por una cola de mayor prioridad, adelantando estos mensajes a los anteriores en la salida hacia la red GSM. El parámetro --send 612345678 "mensaje de prueba" solicita el envío de la cadena que aparece entre comillas al número de teléfono indicado.
Mientras, en el servidor el mensaje es recibido, tras comprobar que la conexión se realiza desde un equipo permitido, con un usuario y contraseña validos (la contraseña no viaja por la red, de forma similar a como CHAP lo hace), el mensaje se coloca en la cola correspondiente y, finalmente, es enviado al dispositivo GSM. En caso de que haya algún problema durante el envío, el mensaje se reintentará enviar según se haya indicado en la tabla de reintentos, en el fichero de configuración.
En el siguiente extracto de syslog se registra el dialogo entre el cliente (gsgc) y el Core Module (gsgcmd), hasta que el mensaje queda encolado. Las lineas Received indican el mensaje que la pasarela envía al cliente, y las Sending las que el cliente envía a la pasarela:
Sep 15 18:48:26 pruebas gsgc[13]: Starting Alamin GSM SMS Gateway - Client Sep 15 18:48:26 pruebas gsgc[13]: Received: OK Alamin GSM SMS Gateway Sep 15 18:48:26 pruebas gsgc[13]: Received: READY Sep 15 18:48:26 pruebas gsgc[13]: Sending: send 5 - default <list> Sep 15 18:48:26 pruebas gsgc[13]: Sending: 612345678 Sep 15 18:48:26 pruebas gsgc[13]: Sending: <EOL> Sep 15 18:48:26 pruebas gsgc[13]: Sending: mensaje de prueba<EOM> into queue 5 message 00004891-14660.sms.txt Sep 15 18:48:26 pruebas gsgc[13]: Received: WAIT Sending to 612345678 Sep 15 18:48:26 pruebas gsgc[13]: Received: OK Message to 612345678 queued Sep 15 18:48:26 pruebas gsgc[13]: Received: READY Sep 15 18:48:26 pruebas gsgc[13]: Sending: CLOSE Sep 15 18:48:26 pruebas gsgc[13]: Received: OK Closing Sep 15 18:48:26 pruebas gsgc[13]: Received: BYE |
El cliente, al estar escrito en Perl, puede correr en cualquier plataforma con intérprete de perl y sockets. Está siendo desarrollado un applet Java para permitir su uso directamente desde clientes que dispongan de navegador de internet y máquina virtual Java.
SMSLink utiliza la licencia GPL.
SMSLink es similar en muchos aspectos a Alamin, pero tiene ciertas diferencias de arquitectura.
En principio, sólo hay un proceso corriendo, y lanza nuevos hilos para cada petición de envío de mensaje recibido de la red IP. El acceso concurrente al dispositivo GSM se gestiona mediante un sistema de bloqueos y semáforos.
Permite el uso de multiples dispositivos GSM desde su comienzo. Para la recepción de mensajes, existe la opción de almacenar los mensajes entrantes o pasárselos a un programa que los procese.
Los dispositivos GSM soportados son todos los que soporten comandos AT extendidos, esto es, modems GSM y teléfonos con modem incorporado. Tanto el modo PDU como el modo texto están disponibles para el envio de mensajes.
En este momento no incorpora todavía gestión de colas, prioridades, usuarios y permisos por usuario. Estas son las deficiencias con respecto a Alamin, sin embargo, Alamin solo puede manejar un dispositivo GSM, y en caso de ser un modem, no puede usar el modo PDU para envío de mensajes con melodias y logotipos.
SMSTools utiliza la licencia GPL.
La filosofía general de la aplicación es la misma que Alamin y SMSLink. Tan solo hay diferencias en detalles de implementación.
Soporta hasta 32 dispositivos GSM simultaneos. Gestiona una cola por cada dispositivo y se pueden establecer rutas de manera que ciertos mensajes se envien solo por un dispositovo determinado.
También permite establecer qué programa debe ser lanzado cada vez que se recibe o se envía un mensaje.
No resulta muy flexible en redes con problemas de transmisión o en momentos de mucha carga de la red, ya que la configuracion de reintentos no resulta flexible.
Tampoco, como SMSLink, incorpora todavía gestión de colas, prioridades, usuarios y permisos por usuario.
Existen multitud de programas que permiten el envío de mensajes cortos, de uno en uno, sin gestión de colas, prioridades, etc. y que no incluyen gestión de la contención en el acceso al dispositivo GSM ni reintentos en caso de fallo en el envío. Su función principal es enviar un mensaje accediendo físicamente al dispositivo GSM (Chat, Gnokii) o conectar con otra pasarela de mensajería (Esms, Smssend, Smsclient), por lo que podriamos considerarlos solo la parte cliente de una pasarela.
Muchos de estos programas se usan como "interfaz de acceso a la red GSM" desde otras pasarelas más complejas, como es el caso de Gnokii y Chat, que son utilizados por Alamin.
Pero en ocasiones, las necesidades de comunicación no requieren demasiada complejidad y cualquiera de estos sencillos programas son suficientes para notificar de un evento ocurrido en una red o recibir un comando simple que sea pasado a bash desde un SMS como "/etc/init.d/apache start".
No aparecen aquí todos los existentes, pero sí algunos:
Chat. El programa que muchos conocemos para el marcado del número en un modem. Al igual que existen modems para Red Telefónica Básica (RTB) existen modems GSM, que utilizan la red GSM para realizar su transmisión. Dado que la red GSM es digital y dispone de servicios adicionales, los comandos AT con los que se gobierna un modem convencional de RTB han sido extendidos para los modems GSM y existen nuevos comandos (normalmente identificados por un caracter de más "+" tras la cadena de atención, "AT"), que nos permiten enviar un mensaje, leer los mensajes recibidos, borrar un mensaje, establecer opciones como caducidad, modo de transferencia, etc. En resumen, las mismas funciones que podemos realizar desde el teclado de un teléfono móvil. La siguiente linea de comando para chat elige el modo texto para los mensajes SMS y comprueba los nuevos mensajes que hayan llegado.
El siguiente ejemplo muestra una llamada a Chat en la que se establece un tiempo de 20 segundos de espera a la respuesta del modem y varios pares de parametros en los que el primer elemento del par es el texto que Chat espera recibir y al que responde con el segundo par:
/usr/sbin/chat -v -e TIMEOUT 20 '' '^EAT+CMGF=1' \ OK 'AT+CMGL="ALL"' OK '' </dev/ttyS0 >/dev/ttyS1 |
Sep 17 16:48:25 pruebas chat[11767]: timeout set to 20 seconds Sep 17 16:48:25 pruebas chat[11767]: send (^EAT+CMGF=1^M) Sep 17 16:48:26 pruebas chat[11767]: expect (OK) Sep 17 16:48:26 pruebas chat[11767]: ^EAT+CMGF=1^M^M Sep 17 16:48:26 pruebas chat[11767]: OK Sep 17 16:48:26 pruebas chat[11767]: -- got it Sep 17 16:48:26 pruebas chat[11767]: send (AT+CMGL="ALL"^M) Sep 17 16:48:26 pruebas chat[11767]: expect (OK) Sep 17 16:48:26 pruebas chat[11767]: ^M Sep 17 16:48:26 pruebas chat[11767]: AT+CMGL="ALL"^M^M Sep 17 16:48:26 pruebas chat[11767]: OK Sep 17 16:48:26 pruebas chat[11767]: -- got it Sep 17 16:48:26 pruebas chat[11767]: send (^M) |
TIMEOUT 20 '' 'AT+CMGF=1' OK 'AT+CSCA="+34609090909",145' OK 'AT+CMGS="612345678"' '>' 'texto del mensaje^Z' OK '' |
Sep 17 17:00:17 pruebas chat[12]: timeout set to 20 seconds Sep 17 17:00:17 pruebas chat[12]: send (AT+CMGF=1^M) Sep 17 17:00:17 pruebas chat[12]: expect (OK) Sep 17 17:00:17 pruebas chat[12]: AT+CMGF=1^M^M Sep 17 17:00:17 pruebas chat[12]: OK Sep 17 17:00:17 pruebas chat[12]: -- got it Sep 17 17:00:17 pruebas chat[12]: send (AT+CSCA="+34609090909", 145^M) Sep 17 17:00:18 pruebas chat[12]: expect (OK) Sep 17 17:00:18 pruebas chat[12]: ^M Sep 17 17:00:18 pruebas chat[12]: AT+CSCA="+34609090909",145^M^M Sep 17 17:00:18 pruebas chat[12]: OK Sep 17 17:00:18 pruebas chat[12]: -- got it Sep 17 17:00:18 pruebas chat[12]: send (AT+CMGS="612345678"^M) Sep 17 17:00:18 pruebas chat[12]: expect (>) Sep 17 17:00:18 pruebas chat[12]: ^M Sep 17 17:00:18 pruebas chat[12]: AT+CMGS="612345678"^M^M Sep 17 17:00:18 pruebas chat[12]: > Sep 17 17:00:18 pruebas chat[12]: -- got it Sep 17 17:00:18 pruebas chat[12]: send (texto del mensaje^Z^M) Sep 17 17:00:19 pruebas chat[12]: expect (OK) Sep 17 17:00:23 pruebas chat[12]: texto del mensaje^Z^M^M Sep 17 17:00:23 pruebas chat[12]: +CMGS: 28^M Sep 17 17:00:23 pruebas chat[12]: ^M Sep 17 17:00:23 pruebas chat[12]: OK Sep 17 17:00:23 pruebas chat[12]: -- got it Sep 17 17:00:23 pruebas chat[12]: send (^M) |
Gnokii. Requiere teléfono móvil compatible, habitualmente Nokia, aunque recientemente han sido soportados modelos de otros fabricantes. Permite tanto envío como recepción de mensajes.
#!/bin/bash echo Enviando un mensaje... echo "texto del mensaje" | gnokii --sendsms 616333444 echo Comprobando mensajes nuevos en las posiciones 1 a 14... gnokii --getsms ME 1 14 |
Esms. Esms es un pequeño programa que envía mensajes SMS a teléfonos móviles de España a través de Internet. Puede enviar mensajes a móviles de Airtel, Amena y Movistar.
El envío de los mensajes SMS puede realizarse gratuitamente a través de las páginas de los operadores y portales, pero esms presenta una serie de ventajas, como son que no tiene límite de envío, permite enviar tantos mensajes como se desee, que los mensajes largos se fragmentan en varios trozos que se envían uno a uno en orden, que permite almacenar los números de teléfono, y que acepta los mensajes de la entrada estándar. El uso canónico sería:
fortune -s love | esms mi_novia |
Necesita algunos modulos Perl, como LWP, HTML::Parser y HTML::TreeBuilder.
SMSSend. Este programa es un "kit" que permite utilizar múltiples y diferentes pasarelas SMS externas. Realmente el no envía el mensaje, si no que se lo pasa a otra pasarela. Podriamos llamarlo "multicliente", ya que permite actuar de cliente de casi cualquier otra pasarela SMS.
Resulta sencillo ampliar sus posibilidades de utilización de otras pasarelas inicialmente no previstas, con scripts que se ajusten a las necesidades de conexión de dichas pasarelas. Incluye definiciones de alias de teléfonos (como una libreta de direcciones de correo) para no tener que recordar los números.
SMSClient. Muy similar al anterior, básicamente puede establecer comunicación con centros de envío de mensajes para móviles GSM y buscapersonas automáticos, así como pasarelas de correo a SMS de las que ofrecen los operadores de telefonía.