SMS Gateway con Raspberry Pi y Gammu

Como sabemos, un gateway SMS permite a una computadora enviar y recibir mensajes de texto SMS. En este tutorial voy a explicar como podemos convertir nuestra Raspberry Pi en un SMS Gateway con lo cual las posibilidades de las aplicaciones Web que tengamos alojadas en ella crecen enormemente, ya que podrán enviar y recibir mensajes de texto.

Para realizar este proyecto necesitamos:

  • Raspberry Pi 3
  • Teléfono celular; yo usaré un Galaxy Pocket NEO (puedes ver los dispositivos compatibles aquí)

Preparar la Raspberry

Si la Raspberry es nueva, hacemos lo de costumbre: cambiar la contraseña del usuario pi, expandir el sistema de archivos, actualizar repositorios, instalar actualizaciones. Más info de como hacerlo está disponible aquí.

Antes de continuar nos aseguramos que nuestro celular esté en esta lista, para asegurarnos que es compatible con gammu.

También nos aseguramos que sea reconocido por la Raspberry Pi, para ello usamos el comando lsusb.

Instalar Gammu

Gammu es el software necesario para hacer de la Raspberry Pi un Gateway SMS, para instalarlo hacemos lo siguiente:

# apt-get install gammu

# apt-get install gammu-smsd

gammu-smsd es opcional y nos servirá para manejar los mensajes recibidos, pero dicho tema no está incluido en este tutorial.

Configurar Gammu

Antes de continuar, nos aseguramos que gammu reconoce nuestro celular conectado a la Raspberry. Para ello escribimos el comando

$ gammu --identify

Y gammu debe contestar algo como esto:

Warning: No configuration file found!
Advertencia: No se pudo leer la configuración. ¡Utilizando parámetros predeterminados!
Dispositivo : /dev/ttyACM0
Fabricante : Broadcom
Modelo : unknown (Wedge)
Firmware : S5310LUBANC1
IMEI : 3562810595XXXXX
IMSI de la SIM : 3340201244XXXXX

Si es capaz de decirnos el fabricante, IMEI, modelo y puerto al que está conectado podemos continuar.

Solo falta realizar la configuración, para hacerla de forma automática  escribimos gammu-detect y se debe mostrar algo como esto:

; Archivo de configuración generado por gammu-detect.
; Por favor revisa el manual de Gammu para más información.

[gammu]
device = /dev/ttyACM0
name = samsung GT-S5310L
connection = at

Estos son los valores que gammu detecta de manera automática, a continuación ejecutamos gammu-config para que queden guardados en la configuración.

En los apartados Port y Connection nos aseguramos que estén los valores que obtuvimos con gammu-detect (ver figura)

Ahora estamos listos para enviar nuestro primer mensaje

Probando

Para comprobar que somos capaces de enviar SMS vía Gammu, escribimos lo siguiente:

$ gammu sendsms TEXT número_de_destino -text "Texto del SMS"

Y Gammu debe responder algo como esto:

Enviando SMS 1/1...esperando respuesta de la red..Aceptar, referencia de mensaje=-1

Instalación de Apache y PHP

Usaremos PHP5 sobre un servidor Apache para crear una interfaz web para enviar los SMS, que incluye la página de administración.

Empezamos a instalar con

# apt-get install apache2

Si la instalación fue correcta debemos ver el típico It Works desde cualquier navegador en la misma red local que la Raspberry si accedemos a la IP de esta.

Ahora instalamos PHP5 y algunas de sus librerías con

# apt-get install php5
# apt-get install libapache2-mod-php5

Por último reiniciamos Apache

# service apache2 restart

Para que todo funcione debemos garantizar que el usuario www-data tiene permisos para abrir el dispositivo y enviar los mensajes de texto, para ello lo añadimos como sudoer sin contraseña:

$ sudo visudo

Y en el archivo sudoers agregamos:

www-data ALL=NOPASSWD: /usr/bin/gammu

Guardamos y salimos

Revisión técnica: Cuando ejecutamos gammu-config en los pasos anteriores, se generó el archivo de configuración de gammu para el usuario pi. Debemos de generar uno para el usuario root. Basta con ejecutar de nuevo gammu-config anteponiendo sudo.

Ejemplo de archivos PHP para enviar un mensaje de texto

Lo que sigue es crear un ejemplo sencillo de envío de mensajes, para ello necesitamos 2 archivos: index.php y sendsms.php.

En index.php lo único que ponemos es un formulario con 2 campos, uno para el número y otro para el mensaje.

Código de index.php

Código de index.php

En sendsms.php estará la llamada a gammu mediante la funcion exec de PHP.

Código de sendsms.php

Código de sendsms.php

La línea que envía el mensaje es esta:

$gammuResponse = exec('echo "'. $msj .'" | sudo gammu sendsms TEXT '. $number .'', $output, $intResponse);

Se observa que llamamos a gammu y guardamos la respuesta en la variable $gammuResponse para mostrarla después, independientemente si se tuvo éxito en el envío o no.

Cuando gammu se termina de ejecutar devuelve al sistema operativo un cero si todo salió bien, ese valor de retorno lo guardamos en la variable $intResponse y más tarde lo usamos para saber si se tuvo éxito en el envío o no.

El formulario

El formulario

Envío de mensaje OK

Envío de mensaje OK

Revisión técnica: Este ejemplo es con la finalidad de echar un primer vistazo al funcionamiento de gammu con PHP. Ponerlo tal cual en un ambiente de producción puede resultar peligroso, ya que no se filtran los datos que escribe el usuario; corresponde a cada quien (si decide implementarlo) realizar las técnicas de filtrado necesarias a los datos que envía el usuario.

Hasta aquí el tutorial. no olvides seguirme en Twitter: @underdog1987

 

Anuncios

2 comentarios en “SMS Gateway con Raspberry Pi y Gammu

  1. Genial!!! … Solamente tengo una duda, en caso que con el comando $ gammu –identify … No me llegue a reconocer nada, y por otra parte con $gammu-detect si me llegue a reconocer el dispositivo y el puerto en uso.
    Sera problema de drivers??? al ser linux???… o es que hay una tabla de smartphones valida para este tipo de conexiones, estaria muy agradecido en saberlo. Tengo un galaxy S5 modelo SM-G900M… Agradeceria una respuesta pronto. Gracias!!! 😀

    • underdog1987 dijo:

      Hola, de hecho sí hay problema con teléfonos Samsung (y otras marcas) de gama media y alta.
      A mi, gammu me ha funcionado mejor con teléfonos viejitos, o actuales de gama baja.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s