Crear Bot de Telegram con Python e IA: Tutorial Completo [2026]
Tutorial paso a paso para crear un bot de Telegram con Python que usa ChatGPT o Claude. Desde cero hasta producción con ejemplos de código.
TLDR: Crear un bot de Telegram con IA requiere: 1) Token de BotFather, 2) API key de OpenAI/Anthropic, 3) Librería aiogram (Python). Costo: ~$0.01 por conversación. Tiempo de setup: 30 minutos.
Requisitos previos
| Requisito | Descripción |
|---|---|
| Python 3.10+ | Lenguaje de programación |
| API Key OpenAI/Anthropic | Para la IA |
| Cuenta de Telegram | Para crear el bot |
| Servidor (opcional) | Para deployment 24/7 |
Crear el bot en Telegram
Paso 1: Hablar con BotFather
- Abre Telegram y busca
@BotFather - Envía
/newbot - Elige un nombre para tu bot
- Elige un username (debe terminar en
bot) - Guarda el token que te da
1Tu token será algo como:27123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw
Configurar el proyecto Python
Estructura del proyecto
1telegram-ai-bot/2├── bot.py3├── config.py4├── requirements.txt5└── .env
requirements.txt
1aiogram==3.4.12openai==1.12.03anthropic==0.18.04python-dotenv==1.0.1
.env
1TELEGRAM_TOKEN=tu-token-de-botfather2OPENAI_API_KEY=sk-...3ANTHROPIC_API_KEY=sk-ant-...
config.py
1import os2from dotenv import load_dotenv3 4load_dotenv()5 6TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")7OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")8ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY")
Integrar con ChatGPT
bot.py (versión ChatGPT)
1import asyncio2from aiogram import Bot, Dispatcher, types3from aiogram.filters import Command4from openai import AsyncOpenAI5from config import TELEGRAM_TOKEN, OPENAI_API_KEY6 7# Inicializar8bot = Bot(token=TELEGRAM_TOKEN)9dp = Dispatcher()10openai_client = AsyncOpenAI(api_key=OPENAI_API_KEY)11 12# Almacenar historial de conversaciones13conversations = {}14 15@dp.message(Command("start"))16async def start_handler(message: types.Message):17 await message.answer(18 "¡Hola! Soy un bot con IA. "19 "Escríbeme cualquier pregunta y te responderé."20 )21 22@dp.message(Command("clear"))23async def clear_handler(message: types.Message):24 user_id = message.from_user.id25 conversations[user_id] = []26 await message.answer("Historial borrado.")27 28@dp.message()29async def message_handler(message: types.Message):30 user_id = message.from_user.id31 user_message = message.text32 33 # Inicializar historial si no existe34 if user_id not in conversations:35 conversations[user_id] = []36 37 # Añadir mensaje del usuario38 conversations[user_id].append({39 "role": "user",40 "content": user_message41 })42 43 # Mantener solo últimos 10 mensajes44 conversations[user_id] = conversations[user_id][-10:]45 46 # Mostrar "escribiendo..."47 await bot.send_chat_action(message.chat.id, "typing")48 49 try:50 # Llamar a OpenAI51 response = await openai_client.chat.completions.create(52 model="gpt-4o-mini",53 messages=[54 {"role": "system", "content": "Eres un asistente útil y amigable. Responde en español de forma concisa."},55 *conversations[user_id]56 ],57 max_tokens=100058 )59 60 assistant_message = response.choices[0].message.content61 62 # Guardar respuesta en historial63 conversations[user_id].append({64 "role": "assistant",65 "content": assistant_message66 })67 68 await message.answer(assistant_message)69 70 except Exception as e:71 await message.answer(f"Error: {str(e)}")72 73async def main():74 print("Bot iniciado...")75 await dp.start_polling(bot)76 77if __name__ == "__main__":78 asyncio.run(main())
Integrar con Claude
bot.py (versión Claude)
1import asyncio2from aiogram import Bot, Dispatcher, types3from aiogram.filters import Command4import anthropic5from config import TELEGRAM_TOKEN, ANTHROPIC_API_KEY6 7bot = Bot(token=TELEGRAM_TOKEN)8dp = Dispatcher()9claude_client = anthropic.AsyncAnthropic(api_key=ANTHROPIC_API_KEY)10 11conversations = {}12 13@dp.message()14async def message_handler(message: types.Message):15 user_id = message.from_user.id16 user_message = message.text17 18 if user_id not in conversations:19 conversations[user_id] = []20 21 conversations[user_id].append({22 "role": "user",23 "content": user_message24 })25 26 conversations[user_id] = conversations[user_id][-10:]27 28 await bot.send_chat_action(message.chat.id, "typing")29 30 try:31 response = await claude_client.messages.create(32 model="claude-3-5-sonnet-20241022",33 max_tokens=1000,34 system="Eres un asistente útil. Responde en español de forma concisa.",35 messages=conversations[user_id]36 )37 38 assistant_message = response.content[0].text39 40 conversations[user_id].append({41 "role": "assistant",42 "content": assistant_message43 })44 45 await message.answer(assistant_message)46 47 except Exception as e:48 await message.answer(f"Error: {str(e)}")49 50async def main():51 print("Bot con Claude iniciado...")52 await dp.start_polling(bot)53 54if __name__ == "__main__":55 asyncio.run(main())
Funciones avanzadas
Añadir comandos especiales
1@dp.message(Command("resumen"))2async def resumen_handler(message: types.Message):3 """Resumir un texto largo"""4 text = message.text.replace("/resumen", "").strip()5 6 if not text:7 await message.answer("Uso: /resumen [texto a resumir]")8 return9 10 response = await openai_client.chat.completions.create(11 model="gpt-4o-mini",12 messages=[13 {"role": "system", "content": "Resume el siguiente texto en 3 puntos clave."},14 {"role": "user", "content": text}15 ]16 )17 18 await message.answer(response.choices[0].message.content)19 20@dp.message(Command("traducir"))21async def traducir_handler(message: types.Message):22 """Traducir texto al inglés"""23 text = message.text.replace("/traducir", "").strip()24 25 response = await openai_client.chat.completions.create(26 model="gpt-4o-mini",27 messages=[28 {"role": "system", "content": "Traduce el siguiente texto al inglés."},29 {"role": "user", "content": text}30 ]31 )32 33 await message.answer(response.choices[0].message.content)
Manejar imágenes (GPT-4 Vision)
1@dp.message(types.ContentType.PHOTO)2async def photo_handler(message: types.Message):3 """Analizar imágenes con GPT-4 Vision"""4 photo = message.photo[-1] # Mayor resolución5 file = await bot.get_file(photo.file_id)6 file_url = f"https://api.telegram.org/file/bot{TELEGRAM_TOKEN}/{file.file_path}"7 8 response = await openai_client.chat.completions.create(9 model="gpt-4o",10 messages=[11 {12 "role": "user",13 "content": [14 {"type": "text", "text": "Describe esta imagen en español."},15 {"type": "image_url", "image_url": {"url": file_url}}16 ]17 }18 ]19 )20 21 await message.answer(response.choices[0].message.content)
Deployment
Opción 1: Railway (Recomendado)
1# Instalar Railway CLI2npm install -g @railway/cli3 4# Login y deploy5railway login6railway init7railway up
Opción 2: Docker
1FROM python:3.11-slim2 3WORKDIR /app4COPY requirements.txt .5RUN pip install -r requirements.txt6 7COPY . .8CMD ["python", "bot.py"]
1docker build -t telegram-bot .2docker run -d --env-file .env telegram-bot
Opción 3: VPS (DigitalOcean, Hetzner)
1# En el servidor2git clone tu-repo3cd telegram-ai-bot4pip install -r requirements.txt5nohup python bot.py &
Opción 4: Mini PC en casa
Si no quieres pagar un VPS mensual, un mini PC como el Blackview MP50 con 32 GB por menos de 300 EUR consume menos de 15W, funciona 24/7 y te sirve para este bot y cualquier otro proyecto (n8n, Ollama, Home Assistant...). Yo lo uso para alojar varios bots y el coste de electricidad es inferior a 3 EUR/mes.
FAQ
¿Cuánto cuesta mantener el bot funcionando?
Depende del uso. Con GPT-4o-mini:
- 100 mensajes/día ≈ $0.50/mes
- 1000 mensajes/día ≈ $5/mes
- Hosting: $0 (Railway free tier) a $5/mes — o un mini PC por ~250 EUR como inversión única
¿Puedo usar el bot en grupos?
Sí, pero necesitas ajustar el código para manejar mensajes de grupo y decidir cuándo responder (menciones, comandos, etc.).
¿Cómo evito abusos?
Implementa rate limiting:
1from collections import defaultdict2import time3 4user_last_message = defaultdict(float)5RATE_LIMIT = 5 # segundos entre mensajes6 7@dp.message()8async def message_handler(message: types.Message):9 user_id = message.from_user.id10 now = time.time()11 12 if now - user_last_message[user_id] < RATE_LIMIT:13 await message.answer("Espera unos segundos antes de enviar otro mensaje.")14 return15 16 user_last_message[user_id] = now17 # ... resto del código
Conclusión
Crear un bot de Telegram con IA es más fácil de lo que parece. Con ~50 líneas de código tienes un asistente funcional.
Próximos pasos:
- Añadir base de datos para persistir conversaciones
- Implementar memoria a largo plazo con embeddings
- Añadir funciones específicas para tu caso de uso
Recursos relacionados:
Más tutoriales de IA en Javadex.es
Síguenos: YouTube @JavadexAI | TikTok @javadex
Posts Relacionados
GPT-5 / ChatGPT 5: Review Completa del Modelo Flagship de OpenAI (2026)
Review completa de GPT-5 y GPT-5.5: novedades vs GPT-4o, benchmarks (Intelligence Index 60, Terminal-Bench 2.0 82.7%, SWE-bench Pro 61.7%), precios API mayo 2026, comparativa contra Claude Opus 4.7 y Gemini 3.1 Pro y veredictos por perfil.
Editor de Fotos con IA 2026: Las Mejores Herramientas para Editar Imágenes Automáticamente
Comparativa 2026 de los 8 mejores editores de fotos con IA: Adobe Firefly, Canva IA Magic Studio, Luminar Neo, Photoroom, Topaz Photo AI, Pixelcut, Remove.bg y Krea AI. Precios, funciones, licencia comercial y veredicto por perfil.
Bot de Trading con IA 2026: Cómo Funcionan, los Mejores y Si Realmente Son Rentables
Comparativa honesta de los 5 mejores bots de trading con IA en 2026 (3Commas, Cryptohopper, Bitsgap, Pionex, KuCoin Bots), rentabilidad documentada, marco legal España (CNMV, MiCA, IRPF) y advertencias de riesgo claras.
Javier Santos Criado
Consultor de IA y Automatización | Fundador de Javadex
Experto en implementación de soluciones de Inteligencia Artificial para empresas. Especializado en automatización con n8n, integración de LLMs, y desarrollo de agentes IA.
Lleva tu proyecto a producción
Hosting web desde 2,99€/mes o VPS con SSD NVMe desde 4,99€/mes. Panel intuitivo, IP dedicada y soporte 24/7 en español.
¿Quieres más contenido de IA?
Explora nuestras comparativas y guías