Cómo crear un bot de Telegram con IA paso a paso (2026)
Conecta el agente de inventario de Python a un bot de Telegram privado. Incluye el archivo completo, configuración de BotFather, autorización por chat y pruebas de mensajes largos. Empieza con polling local y descubre qué falta antes de abrirlo a usuarios: cola durable, deduplicación, cuotas y gestión de errores.
Por Marco Lee · Reportar un error
Continúa con un curso prácticoEl primer bot no necesita una cola distribuida ni atender a todo Internet. Necesita recibir tu pregunta, consultar una herramienta y responder sin gastar en mensajes de personas no autorizadas. Vamos a conectar el agente de inventario en Python a un chat privado de prueba, usando long polling. No hay pedidos reales, base de clientes ni memoria persistente.
Descarga bot_telegram.py y agente_stock.py en la misma carpeta. El bot usa la biblioteca estándar de Python para Telegram y el SDK de OpenAI para el agente. No contiene funciones ficticias pendientes de implementar.
1. Crea un bot de desarrollo
Abre el perfil oficial @BotFather desde el tutorial de Telegram, envía /newbot y elige nombre y username terminado en bot. Conserva el token como contraseña: permite controlar el bot. Usa un bot nuevo, no el que ya atiende clientes.
Envía /start a tu bot. Para conocer el ID del chat sin pegar el token en el navegador, carga la variable y ejecuta desde la carpeta descargada:
export TELEGRAM_BOT_TOKEN="token-de-BotFather"
python3 -c 'import os; from bot_telegram import telegram; print([(u.get("message", {}).get("chat", {}).get("id")) for u in telegram(os.environ["TELEGRAM_BOT_TOKEN"], "getUpdates", {})])'
Obtendrás una lista con tu ID numérico; los updates que no son mensajes pueden mostrar None. Hazlo solo con tu bot privado y no publiques el resultado junto al token. Si aparece una lista vacía, vuelve a enviar /start. Si hay un webhook configurado, getUpdates no puede funcionar simultáneamente: usa un bot separado o retira el webhook deliberadamente, nunca a ciegas.
2. Arranca el proceso local
Necesitas Python 3.10 o posterior. En una carpeta de pruebas:
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install openai
export TELEGRAM_ALLOWED_CHAT_ID="tu-id-numerico"
export OPENAI_API_KEY="tu-clave"
export OPENAI_MODEL="modelo-con-function-calling-de-tu-cuenta"
python3 bot_telegram.py
El archivo comprueba getWebhookInfo y se detiene si hay un webhook activo. Después procesa un update cada vez. Escribe “¿Cuánto stock tiene A-100?”: la herramienta contiene 23 unidades. Una respuesta real depende de la API, sus permisos y la disponibilidad del modelo; no presentamos una conversación externa como ejecutada durante esta revisión.
Detén el proceso con Ctrl+C. Con la laptop apagada, el bot no responde. Polling también es válido en producción con un proceso supervisado: webhook no es obligatorio por ser “producción”. La decisión depende de tu hosting y del mecanismo de recuperación que mantengas.

3. Qué controles tiene el ejemplo
| Control | Implementación | Límite que sigue existiendo |
|---|---|---|
| Acceso | Solo chat.type == private y el ID autorizado | No es un sistema de cuentas multiusuario |
| Entrada | Hasta 1000 caracteres | Caracteres no equivalen a tokens |
| Inferencia | Agente con cuatro pasos y timeout por petición | Falta presupuesto mensual automático |
| Concurrencia | Un update cada vez | Una consulta lenta frena la siguiente |
| Salida | Bloques de 1800 caracteres Python, texto plano | Falta reintento durable ante un envío fallido |
| Contexto | Una pregunta por ejecución del agente | No recuerda lo hablado antes |
La Bot API limita sendMessage a 4096 caracteres después del procesamiento de entidades. El ejemplo evita parse_mode y usa fragmentos conservadores; no envía Markdown generado por el modelo como si fuera formato confiable. La pausa entre fragmentos reduce ráfagas, pero no sustituye un manejo completo de retry_after.
4. Comprueba el adaptador antes de abrirlo
Estas pruebas no requieren llamar a la API:
python3 -c 'from bot_telegram import partes; s="😀"*5000; p=partes(s); assert "".join(p)==s; assert all(len(x.encode("utf-16-le"))//2 <= 4096 for x in p); print("fragmentos OK")'
python3 -m unittest -v test_agente_stock.py
Para la segunda descarga también test_agente_stock.py. Después, con credenciales de desarrollo y presupuesto limitado, haz las pruebas de integración:
- Tu chat autorizado obtiene una respuesta de stock.
- Otro chat y un grupo no disparan llamadas al modelo.
- Un mensaje largo recibe el aviso de tamaño sin consumir inferencia.
- Pedir una reserva no produce una compra ni una confirmación inventada.
- Una clave incorrecta produce un fallo visible en terminal sin imprimir secretos.
La prueba de fragmentación y las pruebas del agente son locales; las cinco comprobaciones de red las debe completar quien conecte sus cuentas.
5. Qué cambiar para usuarios reales

El offset del ejemplo vive en RAM y avanza antes de ejecutar el agente. Si una consulta falla, no se reintenta durante esa ejecución; si el proceso cae, no existe una garantía de entrega ni de ejecución única. Para tareas con efectos externos, guarda el update en una cola durable y aplica idempotencia por update_id antes de cobrar, crear pedidos o enviar correos.
Con webhook, valida X-Telegram-Bot-Api-Secret-Token, persiste el trabajo y solo entonces confirma recepción. No confundas “responder 200” con “el usuario ya recibió su respuesta”. Añade cuotas por cuenta, tratamiento de 429, alertas, trazas minimizadas y una vía de atención humana. Un chat ID es un identificador, no un secreto ni una autorización suficiente para acceder a otros sistemas.
La Bot API básica no cobra por cada respuesta habitual, pero inferencia, almacenamiento y operación sí cuestan; funciones opcionales como difusión de pago tienen condiciones propias. No prometas que todo servidor o canal será gratuito. Presupuesta con coste por tarea y elige hosting con la guía de despliegue.
Si tus clientes necesitan WhatsApp, estudia sus plantillas, consentimiento y ventana de atención. Si prefieres configurar un runtime existente, sigue la lección de Telegram de OpenClaw. Son alternativas al ejemplo Python, no dependencias de él.
De la guía a la práctica
Bot de catálogo con Python: datos, pruebas y mensajería
Primero prueba un bot de catálogo en local; después explora su adaptador opcional de Telegram.
Ver el curso gratisContenido gratis, sin registro. Los servicios externos pueden tener costos.
Avisos cuando actualicemos cursos y guías
Recibe actualizaciones por correo. Es opcional: puedes seguir leyendo y abrir cualquier curso sin suscribirte.
Lecturas relacionadas
Sigue explorando Mensajeria y otras piezas para builders.



