Marcos P.

Tecnológicamente Inquieto...

Creando un bot de Telegram


Telegram-y-Pyrogram

Sé que ha pasado un tiempo pero acá vamos a arrancar otra vez, no tengo excusa, así es la vida.

Les voy a poner un poco en contexto, en la empresa que trabajo tenemos un software de facturación y manejo de clientes, un software hecho prácticamente a medida por otra empresa local. Se nos daba la situación de que se estaba realizando un trabajo doble, se registraban los datos de los clientes y se trasladaba manualmente esta misma información a los empleados encargados de visitarles, con el consiguiente gasto de tiempo, recursos y dinero.

Los requisitos

Estando como "encargado" del área de informática se montó, entre otras cosas que les contaré en próximos artículos, un servidor de Firebird, que es la base de datos que utiliza el software de facturación. Teniendo este servicio aislado del software principal, se me ocurrió que podría ahorrar al menos la mitad del trabajo automatizando el envío de datos a los empleados a través de un bot de telegram, mejor dicho un userbot que es una cuenta de usuario que actúa como si fuera un bot. Lo ideal hubiera sido que fuese un bot, pero la casuística lo requería así.

El software da un identificador a los clientes y a la cita, generando una relación entre ambos, así cuando hacemos una consulta de la cita la base de datos también devuelve los datos del cliente. La persona que asignaba los clientes a los empleados tendrían que escribir el comando ENVIAR al TECNICO ID-CITA1 ID-CITA2 ... y el bot enviaría un mensaje con los datos del cliente más un enlace a Google maps con la dirección del mismo. Con esto en mente me tocó elegir con qué framework iba a desarrollar el userbot.

Empezamos a trabajar con Pyrogram

Terminé eligiendo Pyrogram, ya había creado bots con otro framework, pero este era en ese momento el que mejor soporte daba a los userbot con la API MTProto, y tenía un poco más clara la documentación, además de que era bastante usado. Así que primero lo primero, elegir el nombre: ParteBot. Segundo probar como funciona el framework para enviar y recibir comandos, pero resulta que a diferencia de los bots el protocolo MTProto no puede crear botones y comandos al estilo /start, así que mi solución fue escribir los comandos en el chat de mensajes guardados, que el bot esté a la escucha, analice el mensaje y responda a los empleados con los datos. Esto último fue mucho más fácil.

Lo siguiente fue estudiar cómo estaba estructurada la base de datos, en un principio usé FlameRobin para windows y linux, pero últimamente logré configurar desde linux y mac DBeaver a este último aunque lo utilicé poco le veo mucho potencial. No me costó mucho encontrar la relación entre el cliente y la cita y extraer los datos con python, lo que me volvió loco fue encontrar la codificación que usaba la base de datos, el ISO8859_1, que supongo que será un estándar de algún windows que el módulo fdb no detectaba automáticamente ó que al ser linux no se utiliza.

Y digo linux porque el userbot iba a correr dentro de un contenedor docker de python en el servidor. Así que una vez comprobado de que todo funciona me tocó descubrir cómo hacer para iniciar sesión desde dentro del contenedor. Pyrogram ofrece una interfaz de línea de comando que te permite insertar el código de inicio de sesión que envía telegram al usuario, opté por poner al userbot en bucle a leer el archivo de configuración hasta obtener un inicio de sesión correcto.

Los resultados

Telegram-Userbot

Con todo esto listo la magia empezó a surgir, en un principio no le tenían mucha fe, pero cada vez que telegram hace de las suyas y se cae el bot el encargado se lleva las manos a la cabeza. Ja! (ñ_ñ).

No hago un detalle exhaustivo del código porque no es un proyecto muy largo y con 5 minutos de lectura se puede entender perfectamente. Sentado frente al teclado habré estado solo unas horas, me pasé más tiempo investigando la estructura de la base de datos y aprendiendo a utilizar la interfaz de Pyrogram, no es de lejos la mejor app hecha con pyrogram, pero es efectiva y funciona. Cualquier duda me escriben por los medios de contacto y podría llegar a hacer un video tal vez u otro articulo explicando un poco más las entrañas de la bestia (ñ_ñ).