Contenido del curso

Fine-tuning de modelos de OpenAI

Cómo leer mensajes de Telegram con Python

Resumen

Procesar mensajes de Telegram con Python te permite leer en tiempo real lo que escriben los usuarios a tu bot y reaccionar desde tu propio código. Aquí aprendes a construir la función get_updates con la librería requests, iterar la respuesta JSON y extraer datos como el username, el id y el texto del mensaje.

Cómo configuro la función getUpdates en Python

La idea es sencilla: pides a la API de Telegram las actualizaciones más recientes y las imprimes cada cierto tiempo. Para eso necesitas un archivo nuevo y dos librerías muy ligeras.

Dentro de Visual Studio Code crea el archivo get_updates.py e importa al inicio requests y time. La primera te permite hacer peticiones HTTP a la API de Telegram. La segunda controla la pausa entre cada consulta para no saturar el servicio.

La estructura base de la función queda así:

python import requests import time

def get_updates(token, offset=None): url = f"https://api.telegram.org/bot{token}/getUpdates" params = {"offset": offset} if offset else {} response = requests.get(url, params=params) return response.json()

El endpoint getUpdates es el método oficial de Telegram para recibir mensajes nuevos. Cada token está asociado a un bot distinto, así que esa cadena identifica a quién pertenece la conversación. El parámetro offset lo dejas en None al principio porque aún no sabes desde qué mensaje retomar.

¿Qué hace getUpdates en Telegram? Es un método de la Bot API que devuelve un JSON con los mensajes recientes enviados a tu bot. Lo consultas por HTTP usando tu token como identificador.

Cómo leer e iterar la respuesta JSON de Telegram

La respuesta de Telegram llega como un JSON con una clave result que contiene una lista de actualizaciones. Cada actualización trae el mensaje, el remitente y un update_id único.

Para consultar de forma continua creas una segunda función con un ciclo while True y una pausa de un segundo entre llamadas. Si quieres consultar con menos frecuencia, puedes usar dos, tres o cinco segundos.

python def print_new_messages(token): offset = None while True: updates = get_updates(token, offset) if "result" in updates: for update in updates["result"]: message = update["message"] id = message["from"]["id"] username = message["from"]["first_name"] text = message["text"] print(f"Usuario: {username} ({id})") print(f"Mensaje: {text}") print("---") offset = update["update_id"] + 1 time.sleep(1)

Dentro del bucle iteras cada update dentro de result y accedes a tres datos clave del objeto message:

  • from.id: el identificador único del usuario que envió el mensaje.
  • from.first_name: el nombre que la persona configuró al crear su cuenta de Telegram.
  • text: el contenido literal que escribió al bot.

Después imprimes esos valores con print y un f-string para que cada mensaje aparezca con formato claro de usuario, id y texto.

Por qué necesito el offset y la variable de entorno

El offset evita que leas el mismo mensaje dos veces. Cada update trae un update_id y, al sumarle uno, le dices a Telegram que la próxima consulta empiece desde el siguiente mensaje pendiente.

Sin esa actualización, el bucle imprimiría una y otra vez el mismo contenido. Por eso, justo antes de cerrar el for, asignas offset = update["update_id"] + 1.

¿Para qué sirve el offset en getUpdates? Marca el punto desde el que Telegram debe entregarte mensajes nuevos. Al pasar update_id + 1 evitas duplicados en cada consulta.

El token, por su parte, es información privada. Si lo expones, cualquiera puede controlar tu bot. La buena práctica es guardarlo como variable de entorno, por ejemplo TELEGRAM_TOKEN, y leerla desde Python con os.environ. Al final del script llamas print_new_messages(token) pasando esa variable para arrancar la escucha en vivo.

¿Por qué usar variables de entorno para el token? Porque el token identifica a tu bot y permite enviar o leer mensajes en su nombre. Mantenerlo fuera del código evita filtraciones al subirlo a un repositorio.

Con esta base ya tienes el procesamiento de entrada resuelto: capturas el usuario, su id y el texto cada segundo, listos para alimentar la lógica de tu bot. ¿Cómo conectarías esta función con la lógica principal de tu proyecto? Cuéntame en los comentarios qué tipo de bot quieres construir.