Páginas

23 de febrero de 2014

Enviar Mensajes por Telegram mediante Línea de Comandos

Telegram es una aplicación sobradamente conocida (aunque con muy pocas semanas de vida en este momento). Tiene la ventaja de su cliente de código abierto. Esto ha permitido desarrollar una versión CLI, basada en línea de comandos.

Su funcionamiento normal sería ejecutarla y te genera una especie de CLI, un entorno con comandos especiales (y, ¡ojo!, con autorellenado usando el tabulador). Pero tampoco voy a hablar de esto exactamente.

Se me ha ocurrido que ciertos automatismos en algunos servidores podrían enviar mensajes de Telegram directamente. Por ejemplo, en mi empresa de por las mañanas usamos Zabbix para controlar nuestras redes y servidores. Muchos mensajes los envía mediante correo electrónico pero los verdaderamente importantes y urgentes, querríamos que los enviara por otro método (y además, no usara Internet, pues en caso de fallar la línea, esta opción dejaría de existir).

Usar SMSs es un rollo horrible y no acabamos de encontrar una solución realmente buena.

Pero acabo de encontrarla y antes aún de implementarla en mi empresa, voy a compartirla.

Se trata de escribir un script que permita ser llamado por Zabbix para hacer el envío de mensajes. Toda la explicación se basa en un sistema Ubuntu (funciona en 12.04 y 13.10, al menos).

Pasos

Requerimientos

Instalamos las dependencias
sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev git build-essential
Le  damos un shell al usuario "zabbix", accedemos con dicho usuario y vamos a "su" carpeta home:ç
sudo chsh -s /bin/bash zabbix
sudo su zabbix
cd ~
Descargamos el código fuente
git clone https://github.com/vysheng/tg.git && cd tg
Lo compilamos
./configure
make

Primera configuración

/var/lib/zabbix/tg/telegram -k /var/lib/zabbix/tg/tg-server.pub
Nos pedirá el número de teléfono móvil, al que enviará un SMS y tendremos que ponérselo. Ya podemos hacer pruebas. Toda la información de los comandos internos la tenéis en inglés en inglés y en español.

Una vez hecho, salimos (comando "quit") y generamos el script de envío (por ejemplo con sudo gedit /usr/lib/zabbix/alertscripts/tg.sh). Pero antes, salimos del usuario -de sistema- "zabbix":
exit

Scripts

Yo al script le he llamado tg.sh y lo dejo en /usr/lib/zabbix/alertscripts:
Usando bash:
#!/bin/bash
now=$(date)
to=$1
subject=$(echo $@ | cut -d " " -f 2-)
tgpath=/var/lib/zabbix/tg
LOGFILE="/var/log/zabbix/tg.log"
cd ${tgpath}
${tgpath}/telegram -k ${tgpath}/tg-server.pub -W <<EOF
msg $to $subject
safe_quit
EOF
echo "$now Recipient=$to Message="$subject"" >> ${LOGFILE}
echo "Finished" >> ${LOGFILE}

Recordad darle luego permisos de ejecución:
sudo chmod +x /usr/lib/zabbix/alertscripts/tg.sh
NOTA: Muchas gracias a Valentin Kivachuk por mejorar el script.

Forma de uso

La sintaxis es:
/usr/lib/zabbix/alertscripts/tg.sh Usuario Texto
Usuario (o nombre de grupo) debe ser cumpliendo mayúsculas y minúsculas y en vez de espacios, poner el subrayado (o guión bajo): Juan_Sinnombre o Curso_1972.
También se puede usar el ID de usuario (accesible mediante el comando de telegram contact_list): por ejemplo #9876543.

Para los chats encriptados sería: !_Juan_Sinnombre.

Ejemplos de llamada al script:
tg Juan_Sinnombre Hola
tg Curso_1972 "Se os avecinan novedades"
tg !_JuanSinnombre "Esto es un mensaje con alto encriptado"

Espero que pueda seros de utilidad.

No hay comentarios:

Publicar un comentario