Monitorizar web con Python y Telegram 1

Hace tiempo decidí monitorizar este sitio web con Python y que enviase avisos a Telegram cuando estuviese caída. La infraestructura del sitio está formada por una combinación de contenedores y realmente me basta con saber si la web es accesible y algún método de reiniciar toda la infraestructura si se detecta un problema.

En esté artículo y el siguiente voy a explicar como lo he realizado, aunque debemos de tener en cuenta que por comodidad he creado un script en Python y no una aplicación. Los componentes que conforman la solución son: Un bot y un canal privado de Telegram y un script en Python que use python-bot-telegram y urllib3. Dicho script va a estar ejecutándose continuamente y se podrá desplegar como si fuese un servicio.

El código de este artículo es accesible en https://github.com/aescanero/disasterproject/tree/master/python

Dar de alta un bot en Telegram

El primer paso es la creación del bot de Telegram que utilizaremos en el script, para ello ya deberíamos disponer de una cuenta en Telegram y buscamos @BotFather para la creación del bot

Monitorizar web con Python y Telegram 1 1

Una vez accedemos al mismo nos saldrá un mensaje informativo sobre la utilidad principal de este bot y que no es otra que gestionar la creación, mantenimiento y eliminación de los bots de los usuarios de la plataforma.

Monitorizar web con Python y Telegram 1 2

Lo primero que vamos a hacer es iniciar en este bot con el comando “/start“:

Monitorizar web con Python y Telegram 1 3

Además de los mostrados, existe una larga lista de comando para gestionar los bots, a nosotros lo que nos interesa es crear uno, por lo que usamos el comando “/newbot“:

Monitorizar web con Python y Telegram 1 4

En este paso anterior nos pedirá primero un nombre descriptivo (en mi caso “disasterproject”, después el nombre del bot (debe acabar en “bot”, hemos seleccionado “disasterproject_bot”) y nos devolverá un mensaje de creación del bot donde tenemos después del texto “Use this token to access the HTTP API:” dos bloques de código separados por “:”, la cadena entera (incluyendo los “:”) es el token que se necesita para utilizar el bot.

Crear un canal privado y añadir el bot

Por ahora tenemos un bot y el token correspondiente, pero necesitamos un lugar donde el bot nos envíe la información que solamente nosotros debemos ver del mismo.

Es importante tener en cuenta que el bot es accesible vía comandos (/start, /status, etc.) y que los mismos se le van a enviar directamente en un chat.

El bot puede responder en ese mismo chat, pero por seguridad puede ser útil que nos responda en un canal controlado (por ejemplo si requerimos de un token temporal para la ejecución de un comando privilegiado), donde solo puedan acceder aquellos usuarios que hemos seleccionado anteriormente.

En Telegram esto es un canal privado y en el menú principal seleccionamos “Nuevo canal“, indicamos que nombre tendrá dicho canal, pasamos a la siguiente ventana donde indicaremos que el canal es privado y terminamos sin añadir a nadie.

Entramos en este nuevo canal y veremos que solo tenemos un usuario (nosotros):

Monitorizar web con Python y Telegram 1 5

Si pinchamos en el nombre del canal (Prueba en este caso) accedemos al menú de configuración del mismo:

Monitorizar web con Python y Telegram 1 6

Los bots solo pueden ser añadidos como administradores en los canales, por lo que pulsamos en Administradores:

Monitorizar web con Python y Telegram 1 7

Procedemos a añadir el “administrador” y buscaremos el bot a través de @nombredescriptivo, al añadirlo nos preguntará por los permisos que tendrá dicho bot:

Monitorizar web con Python y Telegram 1 8

Por seguridad es muy importante que el bot solo pueda publicar en el canal, ya que para comunicarnos con el bot lo haremos vía comando por la parte pública del mismo (a través de un chat).

Ahora falta un detalle, el identificador del canal, necesario para que el bot pueda enviar los mensajes. Para ello en el canal enviamos un mensaje como el siguiente:

/my_id @nombredescriptivo

Y en una consola ejecutamos: curl https://api.telegram.org/TOKEN/getUpdates, que nos devolverá un mensaje como el siguiente:

{"ok":true,"result":[{"update_id":XXXXXXXX,
"channel_post":{"message_id":XX,"chat":{"id":CHANNEL_ID,"title":"prueba","type":"channel"},"date":XXXXXXXXXX,"text":"/my_id @disasterproject_bot","entities":[{"offset":0,"length":6,"type":"bot_command"},{"offset":7,"length":20,"type":"mention"}]}}]}

Debemos apuntar el valor de elemento “id” (incluyendo el signo “-“) que nos permitirá que nuestro script pueda enviar mensajes al canal.

Crear el script en Python

En el siguiente artículo vamos a definir el como se implementa en un único script el bot del cual ya tenemos los principales datos (nombre del bot, token de acceso e identificador del canal) y que nos avisará de cuando está la web caída y nos permite reaccionar ante dicho evento.

Monitorizar web con Python y Telegram 1 9
Volver arriba