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:
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:
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"]
Cada objeto dentro de result contiene una clave message que agrupa toda la información relevante [3:15]:
from → id: identificador numérico único del usuario que envía el mensaje.
from → first_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]:
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.
A mi me dolió más haha, luego noté que se me desconfiguró la identación al agrandar la letra, ¡pido perdón!
haha no problem!, cosas que pasan. Buen curso profe!
Preparando la entry del user
Dejo mi codigo con comentarios si alguien se perdio po que significa cada linea:
import requests
import time
def get_updates(token, offset=None): # definimos url
url = f"https://api.telegram.org/bot{token}/getUpdates" # asignamos params desde offset
params ={"offset": offset}if offset else{} # obtenemos la respuesta http GET response = request.get(url,params =params) # devolvemos en un JSONreturn response.json()def print_new_messages(token): # el siguiente por default no existe
offset =None # Para que haga peticiones siempre
whileTrue: # obtenemos respuestas
updates =get_updates(token,offset) # validamos que hayan resultados desde http GETif"result"inupdates: #imprimimos todas las respuestas
for update in updates["result"]: message = update["result"] id = message["from"]["id"] username = message['from']["first_name"] text = message.get("text")print(f"Usuario: {username}({id})")print(f"Mensaje: {text}")print("-"*20) # Pasar al siguiente
offset = update["update_id"]+1 time.sleep(1)token ="TELEGRAM_TOKEN"print_new_messages(token)
Excelente, Paolo, gracias por compartir.
Gracias!
Que tal la opción de ver primero el resultado final para ir entendiendo mejor lo que se esta haciendo en cada línea de código?
por que telegram y no whatapp? ,nos guste o no la mayoria de la gente usa whatapp ahi estan los clientes
yo estaba esperando que el curso estuviera enfocado whatsapp, realmente los usuarios finales no usan tanto telegram como si lo hacen con whatsapp. 😅
mm quizas con lo compleja que es la api de WA, da para un curso completo, por su parte TG es un tema de 3 clases :sunglasses:
message = update['result']
#me marca un error de clave, lo resolví así:
message = update['message']
Gracias por el aporte me sirvió.
¿Por qué el usuario debe terminar en bot?
Telegram impone esta regla por motivos de transparencia y seguridad. Al obligar a que el identificador termine con la palabra bot (como asistente_bot o VentasBot), los usuarios humanos saben inmediatamente que están interactuando con un programa automatizado y no con una persona real. Esto ayuda a gestionar las expectativas sobre la fluidez de la conversación y previene engaños o suplantaciones de identidad en la plataforma. Además, a nivel técnico, permite que la arquitectura de Telegram clasifique y enrute correctamente los mensajes hacia la API de bots en lugar de los servidores de mensajería estándar para usuarios humanos. Si intentas registrar un nombre sin este sufijo, el sistema simplemente lo rechazará y te pedirá que intentes de nuevo.
¿Cuándo debo configurar los comandos personalizados?
Lo ideal es configurar los comandos personalizados antes de lanzar tu bot al público, justo después de obtener tu token. Los comandos (como /ayuda, /iniciar o /comprar) actúan como el menú de navegación principal de tu aplicación. Al definirlos tempranamente a través de BotFather (usando el comando /setcommands), Telegram mostrará un botón de menú interactivo junto a la barra de texto del usuario. Esto mejora drásticamente la experiencia del usuario (UX), ya que las personas no tendrán que adivinar qué palabras clave entiende tu bot; simplemente tocarán el menú y verán una lista clara de las acciones disponibles. Es una forma excelente de guiar la interacción y asegurar que los usuarios descubran todas las funcionalidades que has programado.
¿Puedo usar esto para un bot empresarial?
¡Absolutamente! La infraestructura de Telegram es extremadamente robusta y es utilizada por miles de empresas para atención al cliente, automatización de ventas y notificaciones internas. Una vez que creas la base del bot, puedes conectarlo a un servidor (usando Python, Node.js, etc.) y vincularlo con bases de datos de tu empresa, CRMs o incluso modelos de inteligencia artificial avanzados como los de OpenAI. Además, Telegram permite integrar botones interactivos, menús desplegables y pasarelas de pago directamente en el chat. Esto significa que un usuario podría consultar el catálogo de tu empresa, hacer preguntas frecuentes y completar una compra sin salir de la aplicación de mensajería, convirtiendo tu bot en una poderosa herramienta comercial.
Comprender cómo usar requests y time es clave para la comunicación con la API de Telegram, recordar manejar el token de forma segura es fundamental para el funcionamiento y seguridad de nuestro bot.
Hola, ¿hay algún curso o clase que enseñe como crear las variables de entorno ?