SMS HTTP Gateway Interface: Enviando SMS desde tu equipo


Los mensajes de texto SMS es una de las vías de comunicación más antiguas que existen desde el establecimiento de las redes GSM. No obstante, hasta ahora ha sido un recurso poco flexible para el usuario final y tan solo ha sido explotado por medianas o grandes empresas. La limitación principal se debe a la separación entre las dos redes, Internet y GSM. Existen servicios que se encargan de crear un puente o “Gateway” entre estas dos redes; éstos ofrecen una API para desarrollar interfaces personalizadas o aplicaciones que permitan el envío de SMS a través de Internet. El servicio contratado para este artículo es SMSTrend de One-eteré, que ofrece varias APIs distintas según sea el lenguaje o conexión que se desee implementar.

En este artículo presentamos un sencillo pero versátil script en Perl que simplifica el envío de SMS desde consola haciendo uso de la API HTTP del servicio contratado. Además, están implementadas otras opciones como el envío programado y su cancelación, la comprobación del crédito y del historial. Enviar mensajes de texto será tan fácil como escribir en la consola:

Código :

$ sms send +34610123456 "Cuerpo del mensaje"

Este script se comunica mediante HTTP y envía las variables por POST. Para ello, hace uso de las librerías LWP y HTTP de Perl. En el siguiente fragmento de código se muestran los elementos principales de la comunicación, el script completo se encuentra en el repositorio: https://github.com/hvpareja/CPAN-SMSTrend

Código :

#!/usr/bin/perl -w
# Chapter 0: ----------------------------------------------------------
# Headers, dependences and options ------------------------------------
# You can choose between the following actions:
# 1. Send a new message
# 2. Check status for a given message (order_id needed - see below -)
# 3. Cancel a programed sending
# 4. View message history
# 5. Check the remaining credit
# 6. Configure SMSTrend account
# 7. View help
# For future versions we will be able to receive SMS, but not yet
# 0.1 Headers
# Library to handle HTTP packets
use HTTP::Request::Common qw(POST);
# User Agent definition to send HTTP request
use LWP::UserAgent;

[...]

# Chapter 5: ----------------------------------------------------------
# HTTP Request building -----------------------------------------------
# Build HTTP headers
my $ua  = LWP::UserAgent->
new();
my $req = POST($url, [
                      "login"         => $login,
                      "password"      => $password,
                      "sender"        => $sender,
                      "message_type"  => $message_type,
                      "recipient"     => $recipient,
                      "message"       => $message,
                      "scheduled_delivery_time"  => $sheduled_delivery_time,
                      "order_id"                 => $order_id,
                      "from"                     => $from,
                      "to"                       => $to
                      ]);
# ---------------------------------------------------------------------
# Chapter 6: ----------------------------------------------------------
# HTTP Request sending ------------------------------------------------
# Send the 
petition and wait for response
my $response = $ua->request($req)->as_string();
# ---------------------------------------------------------------------

[...]

# Chapter 8: ----------------------------------------------------------
# Output communication info and end program ---------------------------
# Put in standar output the interpetation (failed and why or success)
print $response;
exit;
# ---------------------------------------------------------------------

El único inconveniente de este sistema es que no se puede evadir el pago de los mensajes de texto, sin embargo, puede ser una inversión muy útil para aquellos usuarios que quieren implementar sistemas de notificación en su trabajo. Además, puede ser un buen punto de partida para crear aplicaciones de difusión de información o incluso un recurso de emergencia para enviar mensajes masivos a un grupo grande de destinatarios. Un ejemplo de un envío masivo de mensajes de texto, donde cada teléfono está guardado en un fichero de texto:

Archivo: amigos.txt

612123456
612143457
690673458
605123459
676143410
612163411

En la consola:

Código :

$ for numero in $(<amigos.txt); do 
> sms send +34$numero "Feliz Navidad"
> done

Cada día, cualquier persona recibe un gran volumen de información a través de Internet. El uso correcto de un sistema como este, ya sea por parte de un particular o de una empresa, puede llegar de forma más directa al usuario final, atravesando un casi-olvidado atajo y evitando el saturado tráfico de información en las redes sociales.

[EDITO (8 Noviembre de 2012)] He liberado una nueva versión del script en el que se implementa una nueva opción: el envío de mensajes masivos.

Con esta nueva opción no se necesita ejecutar el bucle explicado más arriba, en el que cada sms enviado requería una petición HTTP. Ahora, con una sola conexión, podremos enviar sms a la lista completa, de la siguiente forma:

$ sms fsend amigos.txt "Feliz Navidad"

La única diferencia es que es necesario que cada número de teléfono tenga el prefijo de pais (+34 en el caso de España) ya en el archivo de texto.

Referencias:

      1. SMSTrend:

http://www.enviarmensajessms.es/gatewaysms.htm

      2. GitHub Repository:

https://github.com/hvpareja/CPAN-SMSTrend