Danielside

informática softwarelibre divagaciones música

Envío de SMS para contactos XMPP offline

Los que me sigan habitualmente sabrán de mi nula afinidad con whatssap y similares. Por una larga serie de motivos que no voy a entrar a detallar ahora, no he usado ni usaré nunca esta cosa.

Comprendo también que mis decisiones no deben ir en -excesivo- detrimento de las opciones de los demás, así que cuando me hice con un antiguo pero excelente Samsung Galaxy S2 y le instalé el sistema 100% libre Replicant (http://www.replicant.us/) pensé que era el momento de comunicarme con otros humanos, pero claro, a mi manera.

Al contar con un servidor virtual propio (ver Me voy a mi nube I y II) puedo instalar un servidor XMPP propio. Así no me tengo que preocupar de quien cotilleará mis mensajes. Para disquisiciones sobre este protocolo ver la basura que es whatssap y el peligro de los monopolios y darse un paseo por una buena web para estos temas, que es Comunícate libremente (https://comunicatelibremente.wordpress.com/).

Teniendo mi propio servidor, ya soy libre de usar el cliente que me dé la gana para mis comunicaciones, de los muchos que hay disponibles para todas las plataformas. En nuestro caso, optamos por el maravilloso Conversations.

El problema

Hasta aquí todo más o menos normal en la vida del entusiasta que se aloja sus propias aplicaciones y elige sus herramientas, libres por supuesto. Pero otro de los requisitos es que no quiero llevar la conexión de datos permanentemente activada. Yo solo activo los datos cuando los necesito para consultar algo. Con este requisito, perdía la inmediatez de que me pudieran hablar por Conversations/XMPP en cualquier momento. Y pensé ¿qué red está siempre disponible? pues la red GSM, y por la red GSM van esos denostados mensajes cortos que tanto nos ayudaron una vez.

La solución

Lo que entonces me planteé fue crear un puente entre XMPP y SMS, de manera que si un contacto en mi servidor no tiene ninguna sesión abierta, reciba un SMS y se conecte, y la verdad es que está funcionando muy bien.

Para el servidor de XMPP, opté por Prosody. Este servidor está escrito en LUA, un interesante lenguaje interpretado, y se puede extender mediante módulos en ese mismo lenguaje. Es muy fácil de poner en funcionamiento y fácil de configurar y extender.

Yo no tenía ni idea de LUA y la documentación me parecía bastante pobre, pero rebuscando entre los módulos encontré mod_offline (/usr/lib/prosody/modules/mod_offline.lua). Lo que hace este módulo es guardar en el almacenamiento de Prosody -que es sqlite por defecto, o mysql- los mensajes que no se han podido entregar porque el destinatario no estaba conectado en ese momento. Y pensé que modificar este módulo era la mejor manera.

Hice las modificaciones mirando un poco de la documentación y tirando de documentación de LUA y sus librerías. De esa manera, conseguí que el destinatario no conectado recibiera un correo electrónico de notificación, ese era el primer paso.

Solo faltaba un puente entre el correo electrónico y SMS. Al principio de las comunicaciones SMS, allá por la segunda mitad de los 90, recuerdo que que cada usuario tenía una dirección de correo electrónico a la que enviabas un mensaje y éste recibía un SMS en su móvil. He podido ver que eso sigue existiendo en algunos países, pero claro, en Españistan la máxima es estafar y drenarte la pasta de todas las maneras posibles, así que lo quitaron.

Así que buscando aquí y allá encontré el servicio Textlocal (http://www.textlocal.es/), que te da 100 sms por 9€ y funciona muy bien. Para cada receptor que configures en el panel, te da una dirección de correo número@sms.textlocal.es y el SMS llega en un momento.

Código y configuración

Tanto los correos como los SMS se envían a la dirección y teléfono que tiene configurados cada usuario en su VCARD. Me da que Conversations no modifica la VCARD estándar de XMPP cuando haces cambios en el perfil, por lo cual lo más recomendable es hacerlo desde cualquier cliente como Gajim, Psi, Pidgin, etc.

Lo que hay que configurar en el módulo es básicamente el servidor de correo que procesará los envíos y usuario y contraseña. Hay que tocar lo que viene entre CONFIG y /CONFIG para que funcione con tu propio entorno.

Para instalarlo tenéis que pegarle el cambiazo por el mod_offline.lua que viene en /usr/lib/prosody/modules/. Este módulo nuevo sigue haciendo lo que hacía antes, por lo cual no recomendaría cargarlo aparte, ya que habría dos módulos haciendo lo mismo, que es entregar los mensajes enviados mientras el receptor estaba desconectado.

El nuevo módulo hace eso y además notificar con correo electrónico y sms. La diferencia está en que solo se notifica el primer mensaje que se envió mientras el receptor estaba desconectado, esto está motivado porque los sms tienen un precio y no hace falta que se reciban todos. Sin embargo, cuando se conecte, el módulo entregará la totalidad de los mensajes enviados.

Os dejo con el código en github.


Archivado en categoría(s) GNU/Linux, Internet, Software Libre

Enlace permanente



Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *