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.
Crear Bot de Telegram con Python e IA: Tutorial Completo [2026]
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
Agencias de Marketing Automation en España 2026: cómo elegir, qué stack y cuánto cuesta
Guía completa para elegir agencia de marketing automation en España 2026: las 8 referentes del mercado (Product Hackers, InboundCycle, Connext, Antevenio…), qué stack te conviene, modelo de contratación y la alternativa consultor + tu equipo si tu volumen no encaja con el scope de las grandes.
Cuánto cuesta implementar IA en una PYME española en 2026: precios reales por tipo de proyecto
Pricing real 2026 por tipo de proyecto IA en PYME española: agentes IA, copiloto/RAG, automatización back-office, plataforma IA privada con marca y formación. Tablas con setup + mensual + horas internas + payback.
IA Shakers vs Javadex vs Stratio: 3 modelos de consultoría IA en España según tamaño de empresa (2026)
Comparativa honesta de tres modelos distintos de consultoría IA en España 2026: IA Shakers (marketplace de talento), Javadex (consultor individual senior accountable) y Stratio (enterprise data platform). Cuándo encaja cada uno por tamaño y presupuesto.
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