Enviar alertas desde Ensemble mediante Telegram

Esta es la traducción del artículo original.

"Telegram" es un popular programa de mensajería instantánea, que proporciona una API para la creación de bots. Las características de esta API le permiten crear bots con una amplia gama de funciones, incluida la recepción de pagos.
Con la ayuda del bot de Telegram, resolví una tarea sencilla: enviar alertas desde Ensemble hacia Telegram.

Ventajas: Cuando las alertas lleguen a su teléfono móvil, aparecerá una notificación, por lo que no es necesario que instale ninguna aplicación adicional (en contraste con la solución https://community.intersystems.com/post/sending-alerts-mobile-phone-using-pushover- httpoutboundadapter).

El bot podrá hacer más cosas al añadir nuevos comandos, por ejemplo, para administrar su Productividad o cuando desee resolver otras tareas en Iris, Ensemble o Cache.

 

Si quieres, puedes empezar a echar un vistazo al código - github project

En primer lugar, considere algunas de las características de Telegram cuando desee crear un bot :

  • Telegram es un mensajero muy popular debido a la seguridad que brinda. Por ejemplo, cuando un usuario comienza a chatear con un robot, éste no conoce el número de teléfono del usuario. Esto es bueno para el usuario, ya nadie podrá recopilar los números de teléfono. Además, es imposible enviar un mensaje con solo conocer el número de teléfono.

  • Telegram es compatible con 2 maneras de enviar actualizaciones (aquellos mensajes que los usuarios escriben a los robots) hacia su servidor:

    • Long polling. Para recibir actualizaciones de entrada, llame al método de la API después de cumplir con los intervalos de tiempo necesarios.

    • Webhook. Registre su URL, y siempre que haya una actualización para el bot, Telegram enviará una petición HTTPS POST a la URL que se especificó.

Ejecuté ambas opciones.

 

Cómo funciona este robot y qué se hace en Ensemble

  1. Cualquier interacción comienza con el envío del comando /start.
    La respuesta: será un mensaje de texto con un saludo y una lista de los comandos disponibles
     
  2. El usuario envía el comando /subscribe.
    La respuesta contiene un botón especial que le permite solicitar el número de teléfono del usuario. Esto es necesario para identificar al usuario y determinar cuáles son los mensajes que se le deben enviar.
     
  3. Al hacer clic en este botón el usuario confirma la autorización para enviar su número de teléfono. Ensemble verifica si este número se encuentra en el registro de empleados. Si es así, se guarda el número de identificación del chat.
     
  4. Cuando se produce un error en alguno de los componentes de producción de Ensemble, este automáticamente crea un mensaje de AlertRequest y lo envía a la operación empresarial Ens.Alert. Con la operación empresarial Ens.Alert busca a todos los empleados que tienen un número de identificación en el chat y les envía un mensaje sobre el problema a cada uno de ellos.
     
  5. El comando /alert (que envía la prueba Alert) también se proporciona para que lo pruebe.
 

Funciones

  1. Para almacenar el vínculo del número de teléfono del empleado y el número de identificación del chat en Ensemble, elegí la siguiente tabla. Las claves son los números de teléfono, los valores son los números de identificación del chat de Telegram. Cuando un usuario se registra para recibir notificaciones, el número de identificación del chat se actualiza.

  2. Para recibir las actualizaciones, primero se implementó el mecanismo Long poll. Hacer esto es muy sencillo en Ensemble, basta con añadir un servicio (Business Service) y especificar el intervalo de llamadas. Después de especificar el intervalo, Ensemble accederá a la API de Telegram para obtener las actualizaciones.
    La desventaja de este enfoque, es que el usuario puede notar un retraso entre el envío del comando y la respuesta del bot. Un punto a favor, es que no necesita proporcionar acceso al servidor de Ensemble desde Internet.
     

  3. La implementación de webhook no es un problema, ya que la manera de crear un servicio REST JSON en Cache se ha descrito muchas veces y en detalle. Pero al implementar webhook, debe tener en cuenta que Telegram sólo envía mensajes a través de HTTPS, por lo que debe configurar SSL en su servidor web (utilicé un certificado firmado por mi mismo) .

La secuencia de pasos para añadir una función específica en su producción

  1. Cree un bot con la ayuda de otro robot especial "BotFather"
    https://telegram.me/BotFather
    cuando lo haga recibirá un token
     
  2. Es necesario que cree una configuración de cliente SSL en Ensemble, ya que el mensaje se envíará a través de HTTPS.
     
  3. Importe las clases desde https://github.com/intersystems-community/TelegramAlerts (un paquete de Telegram):
    API.cls - métodos de implementación de las clases para trabajar con la API.
    TelegramOutboundAdapter.cls - adaptador de salida
    TelegramOperation.cls - operación (Business Operation) para enviar mensajes a Telegram 
    TelegramInboundAdapter.cls - adaptador de entrada
    TelegramService.cls - servicio (Business Service)
    Msg.TextRequest.cls, Msg.ButtonRequest.cls - clases de mensajes
    AlertOperation.cls - operación (Business operation) para enviar alertas
    RESTBroker.cls - REST-broker para webhook
     
  4. Genere una tabla de búsqueda en el portal

    (https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=ECONFIG_other#ECONFIG_other_lookup_tables) y añada una o más filas en él, además utilice un número de teléfono (sin +) como clave, con los números de teléfono de aquellos que necesiten recibir notificaciones.
     
  5. Añada y configure la operación empresarial TelegramOperation.cls a la producción. En su configuración, debe especificar TelegramToken y SSLConfiguration

    Para recibir notificaciones, debe realizar los pasos 6 ó 7.
     

  6. Si utiliza  long polling, añada y configure el servicio (Business Service) de TelegramService a su producción. Para ello debe especificar a TelegramToken, SSLConfiguration y TableName (busque el nombre de la tabla). Configure el intervalo de llamadas.
     
  7. Si utiliza webhook:

    • Cree una aplicación web y especifique la clase Telegram.RESTBroker.cls como un bróker.

    • Configure SSL en el servidor web.

    • Registre webhook, para esto necesita llamar al método SetWebhook de la clase Telegram.API

    • Añada el servicio (Business Service) TelegramService a su producción, especifique el parámetro TableName. Especifique a poolsize = 0.
       

  8. Añada AlertOperation.cls con el nombre Ens.Alert y configure los parámetros: TelegramToken, SSLConfiguration, TableName.
     

  9. ¡Listo!