Arrancamos este nuevo proyecto mostrando algo muy sencillo pero que puede ser de gran utilidad para realizar monitorizaciones de cualquier servidor Linux de una manera muy rápida creando los controles  adecuados y adaptándolos al siguiente script.

Antes de nada, será necesario obtener cierta información utilizando la propia aplicación de Telegram, concretamente necesitaremos nuestro UserID y el API Key del bot que crearemos a continuación.

Obtener el API Key

El API Key será la clave que utilizaremos para identificar a nuestro bot y poder realizar las operaciones que necesitemos con el mismo.

Para obtener nuestro API Key necesitamos crear un Bot, trámite muy sencillo que realizaremos mediante la cuenta de Telegram apodada @BotFather, simplemente hacemos una búsqueda con el buscador de la aplicación e iniciamos una conversación con él.

Una vez iniciada la interacción con BotFather podremos mandarle comandos, concretamente el que nosotros necesitaremos será /newbot, para crear un nuevo bot. En ese momento nos realizará dos preguntas, la primera nos solicita el nombre que queremos que tenga el bot y la segunda será el nombre de usuario que tendrá el bot. Como requisito, será necesario que el nombre de usuario finalice con “bot”, es decir en caso de que el nombre esté libre, podemos asignar por ejemplo como nombre de usuario a nuestro Bot “pruebaBot” , pero no “prueba”.

Tras realizar estos simples pasos, BotFather nos devolverá nuestra API Key, que consiste en una clave de 45 caracteres que utilizaremos más adelante. (Para este ejemplo consideraremos zzzzzzzzz:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_z)

Obtener el UserID

El UserID será necesario para indicarle a Telegram a qué chat tendrá que enviar los mensajes que le indiquemos, puede ser  nuestro usuario personal, un grupo o incluso un canal. Desde mi punto de vista la mejor opción para ello será crear un canal, dado que será un lugar donde únicamente recibiremos mensajes, que es precisamente la finalidad de estos.

Una vez tengamos creado el canal es necesario añadir a nuestro Bot como administrador para que pueda enviar mensajes al mismo. Esto lo podemos hacer accediendo a la rueda dentada que encontraremos al pulsar sobre el título de nuestro canal. Una vez ahí, tras pinchar en Administradores podremos añadir a nuestro Bot.

Una vez dados estos pasos previos, la manera más sencilla de obtener el UserID de nuestro canal es acceder a la versión web de Telegram, pinchar en la lista de chats sobre nuestro canal. y fijarnos en la URL en la barra de direcciones del navegador. La dirección debería de tener un formato similar al siguiente (siendo x e y carácteres numéricos):

https://web.telegram.org/#/im?p=cxxxxxxxxxx_yyyyyyyyyyyyyyyyyyy

Como podemos observar, en la URL nos aparece un parámetro p. Concretamente lo que necesitaremos serán los números que van precedidos de la letra c. Es decir, en este ejemplo xxxxxxxxxx. Tras obtener dicho número, únicamente tenemos que poner delante del mismo un -100, con lo que en este caso nuestro UserID sería -100xxxxxxxxxx.

El script

#!/bin/bash
USERID="-100xxxxxxxxxx" #Chat al que queremos enviar el mensaje.
KEY="zzzzzzzzz:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_z" #API Key generada por BotFather.
TIMEOUT="10" #Timeout de la petición a la API.
URL="https://api.telegram.org/bot$KEY/sendMessage" #URL de la API para enviar mensajes.
LOG="envio_telegram_`date "+%d%m%Y"`.log" #Log de envío de mensajes.
SONIDO=0 #Cuando SONIDO es 0, suena notificación, si es 1, es silenciosa.
FECHA_EJEC="$(date "+%d %b %H:%M:%S")" #Generamos fecha y hora de ejecución.
#Condicional para enviar sonido o no con la notificación. Segundo parámetro.
if [[ $2 -eq 1 ]] ; then
	SONIDO=1
fi
TEXTO="<b>$FECHA_EJEC:</b>\n<pre>$1</pre>" #Texto a enviar. Fecha de ejecución y primer parámetro del script.
curl -s --max-time $TIMEOUT -d "parse_mode=HTML&disable_notification=$SONIDO&chat_id=$USERID&disable_web_page_preview=1&text=`echo -e "$TEXTO"`" $URL >> $LOG 2>&1 #Realizamos la petición a la API con la información recopilada.
"echo" >> $LOG #Introducimos línea nueva en el log.

Uso del script

El uso del script es muy sencillo. Se le puede pasar uno o dos parámetros.

  • Parámetro 1: Texto a enviar.
  • Parámetro 2: Notificación con sonido o no. [0-1]

El primer parámetro es obligatorio, en caso del segundo podemos indicarle de manera explícita o no si queremos enviar sonido junto a la notificación. Por defecto se enviará sonido a todas las notificaciones (0).

Notificación activada por defecto:

./msg_telegram.sh "Texto de prueba"

Notificación activada de manera explícita:

./msg_telegram.sh "Texto de prueba" 0

Notificación desactivada:

./msg_telegram.sh "Texto de prueba" 1

Ejemplos de uso

No necesariamente tenemos que introducir como primer parámetro un texto de manera literal, sino que podemos ejecutar comandos como veremos a continuación. De esta manera podremos enviar por ejemplo el contenido de un fichero, o el resultado de la ejecución de un comando.

Enviar el contenido de un fichero (con sonido)

./msg_telegram.sh "`cat fichero.log`"

Enviar el resultado de la ejecución de algún comando (sin sonido)

./msg_telegram.sh "`ps -ef | grep root`" 1

Información adicional

Para disponer de más información respecto el funcionamiento de los bots de Telegram así como para adaptar el script anterior a otras necesidades, se puede consultar en este enlace la documentación de la API de Telegram.