Cómo desarrollar un sistema de envío de mensajes a Telegram para los aplicativos, servicios y sistemas de nuestra organización. Nos será útil para enviar mensajes de aviso por Telegram cuando finaliza una copia de seguridad, cuando se produce una alerta en nuestro sistema de monitorización, como Pandora FMS y para cualquier otro tipo de notificación. Realizaremos este sistema independientemente del lenguaje de programación de los aplicativos, del sistema operativo de los servidores y del propio sistema de monitorización.

Requisitos para montar un sistema de notificaciones por Telegram para todos los aplicativos, sistemas y servicios

A continuación indicamos los requisitos previos para montar un sistema de notificaciones y avisos por Telegram en nuestra organización. El desarrollo de dicho sistema se implementa para que sea válido para cualquier servidor (con cualquier sistema operativo), para cualquier aplicativo (software de nuestra organización) y para cualquier sistema de monitorización (como Pandora FMS). Se basará en la lectura de una tabla de mensajes, cuando se inserte un registro en esta tabla, el sistema enviará el mensaje con los datos introducidos. Por ello, cualquier dispositivo/sistema/aplicativo/servicio que pueda insertar un registro en una tabla MySQL/MariaDB podrá enviar mensajes de Telegram.

Servidor de base de datos MySQL o MariaDB

Para el envío de mensajes de notificación/aviso a un chat de Telegram usaremos como base de datos MySQL Server (válido también para MariaDB y, con unas pequeñas modificaciones, para otros sistemas de bases de datos como PostgreSQL, Oracle, Firebird, SQLite, …). Por lo tanto, necesitaremos disponer de un servidor de bases de datos MySQL Server / MariaDB, sea sobre Windows o Linux, es indiferente.

Dispondremos de una tabla de MySQL que será donde cualquier aplicativo/sistema/servicio pueda insertar un registro. Una vez insertado, el sistema realizará el envío del mensaje por Telegram. El SQL para crear la tabla mensajes_telegram será:

Por otro lado, necesitaremos obligatoriamente una tabla de usuarios donde tendremos, al menos, el campo de ID de Chat de Telegram, para que el sistema de envío sepa a qué chat enviar el mensaje. Este ID de chat de Telegram irá asociado a cada usuario que pueda recibir mensajes de Telegram. De esta forma, en el insert que se realice en la tabla anterior mensajes_telegram, desde los aplicativos/servicios/sistema externos, indicaremos el código del usuario al que se le enviará el mensaje (codigousuario de la tabla mensajes_telegram). Y el campo de la tabla usuario que almacenará el ID del chat lo llamaremos id_chat_telegram.

Entender el punto anterior es muy importante porque con él enlazamos la tabla de usuarios de nuestra organización, que puede estar en cualquier servidor de base de datos, con la tabla de mensajes de envío a Telegram, que puede estar también en otro servidor de base de datos o en el mismo. El requisito es que el código de usuario, clave primaria de la tabla «usuario», sea el que introduzcamos en el insert del registro de la tabla mensajes_telegram, en el campo codigousuario.

El SQL de la creación de la tabla usuarios será el siguiente:

Los campos anteriores para la tabla «usuario» son un ejemplo, puede haber más o menos. Los que necesitaremos para el envío de mensajes por Telegram serán el «codigo» (código identificativo único del usuario) y el «id_chat_telegram» (ID del Chat de Telegram al que se enviará el mensaje). Por seguiridad, usaremos el campo «verificado» para comprobar que podemos enviar mensajes al usuario. Dicho campo debe tener el valor «S», verifiado = «S».

Bot de Telegram

Necesitaremos disponder de un Bot de Telegram. Cada usuario que queramos que pueda recibir mensajes de Telegram habrá agregado este Bot a su Telegram particular, en este Bot (en el chat con el Bot) será donde reciba los mensajes de notificaciones/avisos/alarmas.

En el siguiente enlace indicamos cómo crear un Bot de Telegram y obtener el token de seguridad:

Obtener el ID del Chat de Telegram de cada usuario con el Bot

Una vez que tengamos el Bot de Telegram creado, cada usuario que vaya a recibir mensajes debe buscar dicho bot y abrir un chat con él, por ejemplo en nuestro caso el bot se llama «ProyectoA», así que lo buscaremos en el buscador principal de Telegram y haremos clic sobre él:

Obtener el ID del Chat de Telegram de cada usuario con el Bot

Pulsaremos en «Iniciar» en el Bot de nuestra organización:

Obtener el ID del Chat de Telegram de cada usuario con el Bot

A partir de ahora tendremos un chat con el Bot, en el que recibiremos los mensajes de notificación. Cada usuario tendrá el suyo propio.

Para el funcionamiento del sistema de notificaciones, necesitaremos el ID del este chat. Para obtener el ID del chat podremos usar el comando «ID» que hemos programado en el siguiente punto. Nuestro propio sistema de envío de mensajes de Telegram también permite leer «comandos» que se introduzcan en el bot, por ello, si un usuario introduce el mensaje «ID» el sistema le devolcverá el ID de chat. Pero si no tenemos aún montado el sistema, para obtener el ID de chat, podremos hacerlo de diferentes formas, a continuación las comentamos en el siguiente artículo:

De esta forma, Telegram asignará un identificador a este chat, único, que será el que anotemos en la tabla de usuario, en el campo id_chat_telegram. Cada usuario tendrá su ID de chat asociado.

Sistema de envío de mensajes a chat de Telegram con Visual Studio .Net C# C Sharp

Para el desarrollo del programa de consola (línea de comandos, símbolo de sistema) que estará continuamente leyendo la tabla de mensajes de Telegram (mensajes_telegram) usaremos el lenguaje de programación C# (C Sharp) y como entorno de programación usaremos Microsoft Visual Studio Community 2019.

Realizaremos una aplicación de consola, para ello abriremos Visual Studio y en Crear un proyecto elegiremos «Aplicación de consola (.NET Framework):

Sistema de envío de mensajes a chat de Telegram con Visual Studio .Net C# C Sharp

Escogeremos un nombre para el proyecto, por ejemplo «SistemaEnvioMensajesTelegram» y una carpeta donde lo almacenaremos. También seleccionaremos la versión de .Net Framework con la que trabajaremos, por ejemplo «.NET Framework 4.7.2»:

Sistema de envío de mensajes a chat de Telegram con Visual Studio .Net C# C Sharp

A continuación mostramos el código fuente de cada clase que necesitaremos para esta aplicación. Lo incluimos completo en esta descarga. Casi todas las clases son las mismas que las mostradas en este artículo:

Por ello no las explicaremos, directamente mostramos el nombre de la clase para agregarla y el código C#.

  • EscribirLog.cs
  • CifrarDescifrarTexto.cs
  • LeerGuardarDatosConfiguracion.cs. Para el funcionamiento de esta clase necesitaremos agregar la referencia «System.Configuration», lo podemos hacer desde el menú «Proyecto» – «Agregar referencia»:
Sistema de envío de mensajes a chat de Telegram con Visual Studio .Net C# C Sharp
  • BD.cs. Esta clase, que será la que lea y actualice la tabla de mensajes_telegram de un servidor MySQL Server / MariaDB, requerirá de una referencia a la librería Mysql.data.dll (que incluimos en la descarga del código fuente de la aplicación).
Sistema de envío de mensajes a chat de Telegram con Visual Studio .Net C# C Sharp
  • ComandosBot.cs. Esta clase no es necesaria para este proyecto, pero sirve como ejemplo para dotar al programa, además de la opción de enviar mensajes de Telegram, también de leer mensajes enviados al Chat del Bot y poder realizar tareas en función del mensaje recibido. Como ejemplo, cuando se escribe al bot el mensaje «ID», el programa enviará un mensaje con el ID del Chat de Telegram:

El programa principal Program.cs requerirá también de la referencia a la DLL Telegram.Bot.dll, que incluimos también en la desacarga del código fuente de la aplicación.

Sistema de envío de mensajes a chat de Telegram con Visual Studio .Net C# C Sharp

Y tendrá el siguiente código fuente C#:

Para el correcto funcionamiento de la aplicación que envía los mensajes de Telegram necesiará el fichero XML de configuración SistemaEnvioMensajesTelegram.exe.config, que tendrá los datos de conexión con el servidor MySQL. Un ejemplo del contenido de este fichero:

Funcionamiento de la aplicación de envío de mensajes a chat de Telegram

El funcionamiento de la aplicación es sencillo, ejecutando la aplicación conectará con el Bot de Telegram indicado en el token y permanecerá a la espera de recibir mensajes. Esta acción no es importante en la aplicación. Por otro lado, la aplicación ejecutará un hilo cada 15 segundos que lee de la tabla mensajes_telegram, del servidor de MySQL Server indicado en el fichero de configuración, y si encuentra un registro que no haya sido enviado, lo envía al chat de Telegram asignado al usuario.

Como ejemplo del funcionamiento real, ejecutaremos la aplicación:

Funcionamiento de la aplicación de envío de mensajes a chat de Telegram

Una vez iniciada la aplicación, si insertamos un registro en la tabla mensajes_telegram del servidor de MySQL:

Funcionamiento de la aplicación de envío de mensajes a chat de Telegram

Transcurridos los 15 segundos, el temporizador de la aplicación leerá el registro insertado en la tabla mensajes_telegram y realizará el envío del mensaje a Telegram, al chat del Bot del usuario, en nuestro caso del Bot ProyectoA:

Funcionamiento de la aplicación de envío de mensajes a chat de Telegram

Con este sistema, cualquier dispositivo, servicio o sistema que pueda insertar un registro en una tabla MySQL, o bien que pueda llamar a otro programa o herramienta que lo haga, podrá notificar por Telegram incidencias, alarmas, alertas, avisos, información, indicadores, estado de sensores, etc..

El sistema también puede leer mensajes que se envíen al Bot, para hacerlo interactivo y bidireccional, de forma que el usuario pueda hacer mandatos de acciones al sistema. Por ejmplo, hemos programado la acción «ID», si se introduce el mensaje «id» [1] en el chat del bot de Telegram, el sistema le devolverá un mensaje con el ID del chat de Telegram [2]:

Funcionamiento de la aplicación de envío de mensajes a chat de Telegram

Como ejemplo de uso práctico de este sistema, a continuación mostramos cómo dotar a Pandora FMS de envío de alertas por Telegram.

Notificación de alertas por Telegram en Pandora FMS

Si queremos usar este sistema de envío de mensajes a Telegram para dotar al sistema de monitorización Pandora FMS de alertas por Telegram, seguiremos los pasos que indicamos a continuación.

En cuanto dispongamos de la tabla mensajes_telegram en el servidor de MySQL/MariaDB al que tenga acceso también el sistema de envío de mensajes, como hemos indicado anteriormente, procederemos a crear una acción en Pandora FMS que ejecute un comando Linux para insertar un registro en esta tabla.

Desde la consola de administración web de Pandora FMS, pulsaremos en el menú «Alertas» [1] – «Comandos» [2]:

Notificación de alertas por Telegram en Pandora FMS

Pulsaremos en «Crear» para agregar una nueva acción:

Notificación de alertas por Telegram en Pandora FMS

Introduciremos los datos de la nueva acción. El más importante es el comando [2], donde introduciremos un comando Linux que insertará un registro en el servidor de MySQL, en la tabla mensajes_telegram:

Donde:

  • 192.168.1.100: IP del servidor de base de datos MySQL que contiene la tabla mesajes_telegram.
  • usu_my: nombre de usuario del servidor MySQL con permisos para insertar registros en la tabla mensajes_telegram.
  • Contraseña_my: contraseña del usuario anterior.
  • bd_my: nombre del catálogo/base de datos.
  • 3306: puerto de conexión de MySQL.
  • _field1_, _field2_: serán parámetros que Pandora FMS sustituirá por valores que indiquemos en la acción, que definiremos más adelante.

El comando anterior, podremos probarlo antes de agregarlo a Pandora FMS, en la línea de comandos de Linux:

Notificación de alertas por Telegram en Pandora FMS

El comando insertará un registro en la tabla mensajes_telegram:

Notificación de alertas por Telegram en Pandora FMS

Si funciona, lo agregaremos a Pandora FMS. El campo «codigousuarioa» y el campo «mensaje» lo pasaremos en el comando de Pandora FMS como parámetro, introduciendo «_field1_» en el valor de «codigousuarioa» y «_field2_» en el valor de «mensaje». Estos parámetros serán reemplazados por los datos que indiquemos en la acción (lo explicamos a continuación):

Notificación de alertas por Telegram en Pandora FMS

Una vez creado el comando de alerta, crearemos la acción o acciones en Pandora FMS, para ello pulsaremos en el menú «Alertas» – «Acciones»:

Notificación de alertas por Telegram en Pandora FMS

Pulsaremos en «Crear»:

Notificación de alertas por Telegram en Pandora FMS

Y crearemos una nueva acción, por ejemplo «Mensaje_Telegram_Adm_Sistemas» [1], eligiendo el comando creado anteriormente «Mensaje_Telegram» [1]. Y rellenando el campo 1, en nuestro caso el código de usuario de la aplicación con valor «3» [2] y el campo 2, en nuestro caso el mensaje a enviar [3]. Este mensaje será el que Pandora FMS envíe cuando se produce una alerta en un sensor. Un ejemplo de mensaje a enviar:

Y en el texto de recuperación [4] de la alerta. Este texto será el que Pandora FMS envíe cuando la alerta se recupere, cuando el sensor pasa a estado normal:

Crearemos la acción de la alerta personalizada a nuestro gusto y pulsaremos en «Crear». En nuestro caso la llamaremos «Mensaje_Telegram_Adm_Sistemas». Esta acción enviará un mensaje al técnico de nuestra organización Administrador de Sistemas, con código de usuario de la tabla usuario «3»:

Notificación de alertas por Telegram en Pandora FMS

Por último, agregaremos la acción de alerta al agente (servidor/dispositivo) y al módulo (sensor/sonda) que deseemos. Por ejemplo, si queremos que Pandora FMS nos avise mediante mensaje de Telegram cuando el servicio de una aplicación en un servidor se detiene. Accederemos al agente, en nuestro caso el servidor PCPROG y pulsaremos en «Gestionar»:

Notificación de alertas por Telegram en Pandora FMS

Pulsaremos en «Alertas»:

Notificación de alertas por Telegram en Pandora FMS

Agregaremos la alerta, si no existe, para el módulo que deseemos. En nuestro caso, para el módulo «Servicio_Oracle» elegiremos la acción «Mensaje_Telemgram_Adm_Sistemas» creada anteriormente. Elegiremos el tipo de plantilla, en nuestro caso cuando el módulo pasa a estado crítico (Critical condition) y pulsaremos en «Añadir alerta»:

Notificación de alertas por Telegram en Pandora FMS

Una vez agreada la alerta, si el módulo en cuestión pasa a estado crítico, porque en este caso se detenga el servicio monitorizado, Pandora FMS ejecutará la acción asociada e insertará un registro en la tabla mensajes_telegram con los datos de la alerta:

Y nuestro sistema de envío de mensajes a Telegram se encargará de enviarlo al técnico asignado y recibirá también otro mensaje cuando se haya solucionado la situación de alerta:

Notificación de alertas por Telegram en Pandora FMS

De esta forma, tendremos un valor añadido para las notificaciones de alertas/alarmas/avisos desde nuestro sistema de monitorización. La gran ventaja de que nos lleguen avisos a Telegram es que gracias a las notificaicones pop-pup estaremos siempre al tanto de cualquier problema en nuestros servicios/servidores/dispositivos.

Descarga del código fuente y la aplicación completa que envía mensajes a Telegram leyendo en una BD MySQL

A continuación os dejamos enlace a la descarga del código fuente completo en C Sharp, desarrollado con Visual Studio .Net Community 2019 (incluye ejecutable, XML y todas las DLL necesarias para el correcto funcionamiento):