Procesamiento de Mensajes en Telegram con Python

Clase 19 de 24Curso de Desarrollo de Chatbots con OpenAI

Contenido del curso

Fine-tuning de modelos de OpenAI

Resumen

Construir un bot de Telegram que lea y procese los mensajes de los usuarios en tiempo real es más accesible de lo que parece. Con apenas dos librerías de Python — requests y time — es posible conectarse a la API de Telegram, extraer cada mensaje entrante y mostrar datos como el nombre del usuario, su ID y el texto enviado. A continuación se desglosa paso a paso cómo lograrlo.

¿Cómo se estructura la función get updates para consultar la API de Telegram?

El punto de partida es crear un archivo llamado get_updates.py e importar las dependencias necesarias [0:18]:

python import requests import time

Después se define la función get_updates, que recibe el token del bot como parámetro. Este token es el identificador único que Telegram asigna a cada bot y nunca debe compartirse públicamente [0:40].

Dentro de la función se construye la URL base con formato f-string:

python def get_updates(token, offset=None): url = f"https://api.telegram.org/bot{token}/getUpdates"

El parámetro offset se envía inicialmente como None. Su propósito es indicarle a Telegram cuál fue el último mensaje procesado, de modo que en la siguiente consulta solo devuelva mensajes nuevos [1:12].

Se arma un diccionario de parámetros y se realiza la petición HTTP:

python params = {"offset": offset} if offset else {} response = requests.get(url, params=params) return response.json()

La respuesta llega en formato JSON, una estructura que contiene la clave result con la lista de actualizaciones pendientes [2:08].

¿Cómo se leen e imprimen los mensajes del usuario en tiempo real?

Para consultar Telegram de forma continua se crea la función print_new_messages. Dentro de ella se ejecuta un bucle while True que, cada segundo, llama a get_updates y recorre los resultados [2:30].

python def print_new_messages(token): offset = None while True: updates = get_updates(token, offset) if updates.get("result"): for update in updates["result"]: message = update["message"] user_id = message["from"]["id"] username = message["from"]["first_name"] text = message["text"]

print(f"Usuario: {username}") print(f"ID: {user_id}") print(f"Mensaje: {text}") print("-" * 30) offset = update["update_id"] + 1 time.sleep(1)

¿Qué datos se pueden extraer de cada mensaje?

Cada objeto dentro de result contiene una clave message que agrupa toda la información relevante [3:15]:

  • fromid: identificador numérico único del usuario que envía el mensaje.
  • fromfirst_name: nombre configurado por el usuario en su cuenta de Telegram.
  • text: contenido textual del mensaje recibido.

Estos campos permiten identificar quién escribe y qué dice, datos esenciales para cualquier lógica de respuesta automática.

¿Por qué se utiliza el offset y time.sleep?

El offset se actualiza sumando +1 al update_id del último mensaje procesado [4:50]. Así se evita recibir mensajes duplicados en la siguiente iteración.

La función time.sleep(1) introduce una pausa de un segundo entre cada consulta [5:10]. Esto previene saturar la API de Telegram y es especialmente importante cuando el bot se ejecuta desde una computadora local. Si se prefiere un ritmo más relajado, el valor puede cambiarse a 2, 3 o incluso 5 segundos.

¿Cómo se ejecuta el bot de forma segura?

El token debe tratarse como información sensible. La práctica recomendada es almacenarlo como variable de entorno en lugar de escribirlo directamente en el código [5:35]:

python import os

TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN") print_new_messages(TELEGRAM_TOKEN)

Al correr el script, el bot comienza a escuchar mensajes entrantes y los muestra en consola con el formato definido. Si no hay errores, cada segundo se verifica si llegó algo nuevo y se imprime de inmediato.

Con esta base funcional ya es posible procesar la entrada del usuario y preparar la integración con la función principal del proyecto. ¿Qué tipo de respuestas automáticas te gustaría implementar en tu bot? Comparte tus ideas en los comentarios.