Para codificar la aplicación, necesitas configurar el entorno Python. Instalarás las siguientes bibliotecas a través de la terminal:
Creo que pyTelegramBotAPI es la mejor biblioteca de Python para las API de Telegram, ya que proporciona todas las herramientas para construir fácilmente un chatbot complejo. Se podría trabajar directamente con las API de Telegram, pero no es necesario reinventar la rueda aquí. Los paquetes pymongo y dnspython son necesarios para conectarse a MongoDB con Python. Para que el Bot comprenda las fechas, usaré dateparser.
Si estás leyendo esto, supongo que ya conoces Flask (ten en cuenta que si no planea implementar su bot, no lo vas a necesitar).
Ahora que está todo listo, toca comenzar.
Interfaz (Telegram Bot)
Puedes empezar a codificar el Bot. En primer lugar, llama a la instancia de pyTelegramBotAPI e inserta el TOKEN de la API de Telegram proporcionado por BotFather:
En segundo lugar, conéctate a la base de datos usando pymongo y la cadena de MongoDB Atlas:
Luego, definirás un diccionario vacío que tiene la tarea de almacenar información temporal del usuario (como la identificación del usuario):
Ahora, revisarás los comandos principales previamente definidos (iniciar, guardar, …) y escribir las acciones apropiadas para el Bot. Comienza con “/ start”, el comando que se ejecuta automáticamente cuando comienzas a chatear con el Bot por primera vez. Deja que el Bot comience con un mensaje de bienvenida y una sugerencia de qué hacer a continuación:

¿Hay detalles que no reconoces? Deja que te ayude:
Fácil ¿verdad? Pero eso fue solo un calentamiento. Ahora, el comando “/ save” será bastante más complicado, ya que implica una conversación de preguntas y respuestas:

Como puedes ver, esta vez utilicé bot.reply_to () en lugar de bot.send_message (). Mientras que el segundo envía un mensaje general en el chat, el primero envía un mensaje en respuesta a una entrada específica. Lo estoy usando porque esta es una conversación real entre el usuario y el Bot: el usuario pide guardar información, el Bot responde a eso y espera que el usuario responda. El nuevo mensaje del usuario será procesado por bot.register_next_step_handler () como entrada para la función save_event (), que ahora definirás y luego codificarás.
Siguiendo el ejemplo anterior, quiero salvar el cumpleaños de mi madre. Con ese fin, escribo “mamá: 15 de octubre”. El Bot tiene que reconocer el nombre del evento, “mamá” y la fecha “15 de octubre” en el texto. Después de eso, la información debe almacenarse, considerando tanto los casos de usuarios que regresan (ya en la base de datos, por lo que necesitamos actualizar los eventos del usuario) como los nuevos (deben agregarse en la base de datos).
En términos de Python:
Ten en cuenta que utilicé dateparser para reconocer fechas legibles por humanos. Esto permite al usuario escribir la fecha en diferentes formatos:
De manera similar, puede crear las otras funciones para verificar y eliminar los eventos en la base de datos (proporcionaré el código completo al final del artículo, o puede consultar el enlace de GitHub al comienzo de este tutorial).
¿Qué pasa si el usuario envía algunos textos aleatorios no vinculados a ningún comando específico? El Bot no hará nada si no incluimos este tipo de evento. Por lo tanto, anticiparé 2 tipos de situaciones a las que el Bot responderá adecuadamente (saludos y mensajes de agradecimiento) y todos los demás casos a los que el Bot responderá con un mensaje estándar.

Manten esta parte bastante básica porque no es el enfoque principal de este tutorial, pero se podrían usar técnicas de PNL más avanzadas para hacer que el chatbot sea más inteligente y conversador.
Dicho esto, nuestro Bot ya tiene la habilidad suficiente para ejecutarlo y probarlo. Puedes simplemente agregar la siguiente línea al final de tu código y ejecutar todo el script.
Ahora tu Bot está en funcionamiento, alojado en tu computadora portátil. Puedes jugar con él en Telegram. Si no planeas implementar tu bot, puedes detenerte aquí, ya que el resto del artículo explica los pasos para la implementación.
Back-end (aplicación Flask)
Comienza creando un nuevo proyecto de aplicación en Heroku, una plataforma en cloud como servicio que permite implementar una aplicación PoC con solo una cuenta gratuita. Puedes vincular tu proyecto de GitHub e implementar una de las ramas.
Por el momento, aún no estamos listos para implementar la aplicación. Solo necesitamos la dirección web de la aplicación generada por Heroku. Guárdalo; lo necesitarás pronto.
Vuelve a la codificación y comienza agregando una nueva aplicación del lado del servidor con flask al script de Python que has editado hasta ahora:
Tienes que configurar un webhook, una metodología común en el desarrollo web para pasar información en tiempo real de una aplicación a otra. Gracias al webhook, Telegram Bot envía datos en tiempo real a la aplicación Heroku.
Entonces ahora tu Bot lo tiene casi todo, todavía necesita la última y más importante función: el recordatorio. Chatea y guarda la información, pero el objetivo principal de esta aplicación es enviar alertas automáticamente. Por lo tanto, voy a crear un programador que verifique los eventos de hoy cada vez que se ejecute y envíe recordatorios de eventos.
Cuando se ejecuta la aplicación, este programador se ejecutará en un thread diferente al de la aplicación principal del matraz. En otras palabras, la aplicación tendrá dos cosas sucediendo a la vez: las funcionalidades del chatbot y el recordatorio programado. Puede poner esas 2 acciones principales al final de la secuencia de comandos, y cuando se ejecute el código completo, harán que todo funcione.
Finalmente, es el momento de implementar la aplicación. Antes de continuar, mostraré la estructura de mi repositorio:
No necesariamente tienes que mantener la misma estructura de repositorio, pero definitivamente necesitas los 2 archivos que Heroku requiere: los requisitos.txt, que puedes crear desde la terminal
y el Procfile (sin extensión), que contiene el comando que se ejecutará después del despliegue
Con respecto a las claves de Telegram y MongoDB, debes ponerlas en Heroku como variables de configuración (las llamaré “telegram_key” y “mongodb_key”):
El archivo config.py en la carpeta de configuración tiene el trabajo de recuperar y usar las claves cuando la aplicación se ejecuta en Heroku. Aquí está el código completo en config.py:
Y aquí está el código completo en telegram_bot.py, el script principal con el bot y la aplicación en el que has estado trabajando en todo este tutorial:
Genial, ahora lo despliegas en Heroku:
Ahora deberías tener la aplicación web Heroku en funcionamiento y poder usar el Bot en Telegram. ¡Pruébalo!
Por último, pero no menos importante, establecerás un Cron-Job para hacer ping a la dirección web de Heroku. Eso hará que la página se vuelva a cargar, la aplicación se reinicie y el recordatorio programado se ejecutará en su thread.
Así que mañana, cuando nos despertemos, encontraremos un mensaje con los eventos del día.