Crea tu Primer Bot de Telegram con Python: Una Guía Completa
Aprende a desarrollar un potente bot de Telegram usando Python de forma gratuita. Este tutorial paso a paso cubre desde la configuración de la API hasta el despliegue de tu bot personalizado.
Desarrollar un bot de Telegram personalizado con Python ofrece una flexibilidad y un poder inmensos. Ya sea que busques automatizar tareas, crear servicios interactivos o simplemente experimentar con la robusta API de Telegram, Python es una elección excelente por su simplicidad y sus extensas librerías. En esta guía completa, te acompañaremos a través de todo el proceso de creación de tu primer proyecto de bot de Telegram con Python, desde la configuración de tu entorno de desarrollo hasta la escritura de código funcional y el despliegue de tu bot.
La legibilidad de Python y la activa comunidad que respalda la librería python-telegram-bot lo convierten en un punto de entrada fantástico tanto para principiantes como para desarrolladores experimentados. Al finalizar este tutorial, tendrás un bot de Telegram completamente operativo y listo para interactuar con los usuarios.
Puntos Clave que Aprenderás
- Cómo registrar tu bot con BotFather y obtener un token de API.
- Configuración de tu entorno de desarrollo Python e instalación de las librerías necesarias.
- Escritura de código para manejar comandos y mensajes básicos.
- Exploración de cómo añadir funcionalidades más sofisticadas a tu bot.
- Conceptos básicos para desplegar tu aplicación de bot de Telegram con Python.
1. Configuración de tu Bot de Telegram y Entorno de Desarrollo
Antes de sumergirnos en el código, necesitas configurar tu bot en Telegram y preparar tu entorno Python.
1.1 Creando tu Bot con BotFather
El primer paso para cualquier bot de Telegram es registrarlo con BotFather, el bot oficial de Telegram para gestionar otros bots.
- Abre Telegram y Busca @BotFather: En tu aplicación de Telegram, busca “@BotFather” e inicia un chat. Asegúrate de que sea el oficial, con la insignia azul de verificación.
- Inicia el Proceso de Creación del Bot: Escribe
/newboty envía el mensaje. - Elige un Nombre: BotFather te pedirá un nombre para tu bot. Este es el título legible que verán los usuarios (por ejemplo, “Mi Bot Genial”).
- Elige un Nombre de Usuario: A continuación, selecciona un nombre de usuario único para tu bot. Este debe terminar con “bot” (por ejemplo,
mi_bot_genial). Si el nombre de usuario ya está en uso, BotFather te pedirá que pruebes con otro. - Recibe tu Token de API: Una vez completado con éxito, BotFather te proporcionará un token de API HTTP. Este token es crucial, ya que actúa como la contraseña de tu bot. Mantenlo seguro y nunca lo compartas públicamente. Se verá algo como
123456:ABC-DEF1234ghIkl-zyx57W23L1qR_456.
1.2 Instalación de Python y pip
Si aún no tienes Python instalado, descarga la última versión estable desde el sitio web oficial de Python (https://www.python.org/downloads/). Durante la instalación, asegúrate de marcar la casilla que dice “Add Python to PATH” para facilitar el acceso desde la línea de comandos.
pip es el instalador de paquetes de Python y generalmente viene preinstalado con Python. Puedes verificar tus instalaciones de Python y pip abriendo tu terminal o símbolo del sistema y escribiendo:
python --version
pip --version
1.3 Instalación de la Librería python-telegram-bot
La librería python-telegram-bot es un envoltorio popular y robusto para la API de Bots de Telegram. Simplifica las interacciones con la API, facilitando enormemente el desarrollo de tu bot.
Instálala usando pip:
pip install python-telegram-bot
¡Ya has configurado con éxito tu bot y tu entorno de desarrollo! Pasemos a escribir algo de código.
2. Tu Primer Código de Bot de Telegram con Python: El Bot Eco
Comenzaremos con un clásico: un bot eco. Este bot simplemente repetirá cualquier mensaje que reciba. Este ejemplo sencillo te enseñará los conceptos fundamentales del manejo de mensajes.
2.1 Importando Módulos Necesarios
Crea un nuevo archivo Python (por ejemplo, mi_bot_telegram.py) y comienza importando los componentes requeridos de la librería telegram.
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters
import logging
import os
Update: Representa una actualización entrante de Telegram (por ejemplo, un nuevo mensaje, un comando).Application: La clase principal que gestiona el ciclo de vida de tu bot.CommandHandler: Se usa para registrar manejadores para comandos específicos (por ejemplo,/start,/help).MessageHandler: Se usa para registrar manejadores para varios tipos de mensajes (texto, fotos, etc.).filters: Proporciona filtros convenientes para especificar a qué mensajes debe responder unMessageHandler.logging: Buena práctica para depurar y entender el comportamiento de tu bot.os: Para cargar de forma segura tu token de API desde variables de entorno.
2.2 Configurando el Registro (Logging)
El registro es esencial para la resolución de problemas. Añade las siguientes líneas a tu script:
# Habilitar el registro
logging.basicConfig(
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
)
logger = logging.getLogger(__name__)
2.3 Definiendo Nuestros Manejadores (Handlers)
Los manejadores son funciones que procesan las actualizaciones entrantes.
Manejador del comando start:
Esta función se llamará cuando un usuario envíe el comando /start.
async def start(update: Update, context):
"""Envía un mensaje de bienvenida cuando se emite el comando /start."""
user = update.effective_user
await update.message.reply_html(
f"¡Hola {user.mention_html()}! Soy un bot eco. ¡Envíame lo que quieras!",
# reply_markup=ForceReply(selective=True), # Opcional: forzar respuesta a este mensaje
)
Manejador de mensajes echo:
Esta función hará eco de cualquier mensaje de texto que reciba.
async def echo(update: Update, context):
"""Hace eco del mensaje del usuario."""
await update.message.reply_text(update.message.text)
Manejador del comando help_command:
Un comando de ayuda simple.
async def help_command(update: Update, context):
"""Envía un mensaje de ayuda."""
await update.message.reply_text("¡Envíame cualquier mensaje y te lo devolveré!")
2.4 La Función main: Uniendo Todo
La función main es donde inicializamos nuestro bot, registramos los manejadores y comenzamos a buscar actualizaciones.
def main() -> None:
"""Inicia el bot."""
# Obtén el token de API de las variables de entorno (¡MEJOR PRÁCTICA!)
# Alternativamente, puedes codificarlo aquí para pruebas rápidas: TOKEN = "TU_TOKEN_DE_BOT_TELEGRAM"
TOKEN = os.environ.get("TELEGRAM_BOT_TOKEN")
if not TOKEN:
raise ValueError("La variable de entorno TELEGRAM_BOT_TOKEN no está configurada.")
# Crea la aplicación y pásale el token de tu bot.
application = Application.builder().token(TOKEN).build()
# Registra los manejadores
application.add_handler(CommandHandler("start", start))
application.add_handler(CommandHandler("help", help_command))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
# Ejecuta el bot hasta que el usuario presione Ctrl-C
application.run_polling(allowed_updates=Update.ALL_TYPES)
if __name__ == "__main__":
main()
2.5 Ejecutando tu Bot Localmente
-
Configura tu Token de API como Variable de Entorno:
- Linux/macOS:
export TELEGRAM_BOT_TOKEN="TU_TOKEN_API_AQUÍ" - Windows (Símbolo del sistema):
set TELEGRAM_BOT_TOKEN="TU_TOKEN_API_AQUÍ" - Windows (PowerShell):
$env:TELEGRAM_BOT_TOKEN="TU_TOKEN_API_AQUÍ"Alternativamente, para pruebas locales rápidas, puedes reemplazaros.environ.get("TELEGRAM_BOT_TOKEN")con tu cadena de token real directamente en el código (por ejemplo,TOKEN = "123456:ABCDEF..."), pero no se recomienda para producción.
- Linux/macOS:
-
Ejecuta tu Script de Python: Navega al directorio donde guardaste
mi_bot_telegram.pyen tu terminal y ejecuta:python mi_bot_telegram.py -
Interactúa con tu Bot: Abre Telegram, busca el nombre de usuario de tu bot (por ejemplo,
@mi_bot_genial) e inicia un chat. Intenta enviar/start,/helpo cualquier mensaje de texto. ¡Tu bot debería responder!
¡Felicidades! Acabas de crear y ejecutar tu primera aplicación de bot de Telegram con Python.

3. Añadiendo Funcionalidades Más Avanzadas
Un bot eco es genial, pero hagámoslo más útil. Aquí tienes ideas para expandir tu bot de Telegram.
3.1 Manejando Diferentes Tipos de Mensajes
Además del texto plano, Telegram admite fotos, videos, documentos y mucho más. Puedes usar filters para manejar estos tipos de forma específica.
Ejemplo: Respondiendo a fotos
async def handle_photo(update: Update, context):
"""Responde a una foto con un mensaje de confirmación."""
# Puedes acceder a los detalles de la foto a través de update.message.photo
# La lista contiene diferentes tamaños de la misma foto; la última suele ser la más grande.
photo_file_id = update.message.photo[-1].file_id
await update.message.reply_text("¡Bonita foto! La he recibido.")
# Añade este manejador en tu función main
# application.add_handler(MessageHandler(filters.PHOTO, handle_photo))
3.2 Usando Teclados en Línea y Teclados de Respuesta
Los teclados proporcionan opciones de interacción estructuradas para los usuarios.
- Teclados de Respuesta (Reply Keyboards): Aparecen encima del campo de entrada de mensajes, reemplazando efectivamente el teclado estándar. Ideales para opciones predefinidas.
- Teclados en Línea (Inline Keyboards): Se adjuntan directamente a un mensaje, con botones que pueden activar callbacks o abrir URLs. Perfectos para menús interactivos.
Ejemplo: Teclado en Línea
Modifiquemos nuestro comando /start para ofrecer botones.
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Application, CommandHandler, MessageHandler, CallbackQueryHandler, filters
# ... (otras importaciones y configuración de logging) ...
async def start(update: Update, context):
"""Envía un mensaje de bienvenida con un teclado en línea."""
user = update.effective_user
keyboard = [
[InlineKeyboardButton("Visitar TeleClaw", url="https://teleclaw.bot")],
[InlineKeyboardButton("Acerca del Bot", callback_data="about")],
]
reply_markup = InlineKeyboardMarkup(keyboard)
await update.message.reply_html(
f"¡Hola {user.mention_html()}! Bienvenido a mi bot. ¿Qué te gustaría hacer?",
reply_markup=reply_markup,
)
async def button_callback(update: Update, context):
"""Maneja las consultas de callback de los botones del teclado en línea."""
query = update.callback_query
await query.answer() # Siempre responde a las consultas de callback
if query.data == "about":
await query.edit_message_text(text="Este es un bot de demostración simple creado con Python y la librería `python-telegram-bot`.")
# Añade más condiciones para otros valores de callback_data
Necesitarías actualizar tu función main para incluir el CallbackQueryHandler:
# ... dentro de main() ...
application.add_handler(CommandHandler("start", start))
application.add_handler(CallbackQueryHandler(button_callback)) # Añade esta línea
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
# ...
Esto demuestra cómo enlazar a un sitio externo como TeleClaw y realizar una acción dentro del bot. Puedes explorar más sobre las diferentes opciones de teclado en la documentación de python-telegram-bot (https://docs.python-telegram-bot.org/en/stable/telegram.keyboardbutton.html).
3.3 Integración con APIs Externas
El verdadero poder del desarrollo de bots de Telegram con Python reside en su capacidad para integrarse con servicios de terceros. Puedes obtener datos meteorológicos, noticias actuales, traducir texto o incluso integrar modelos de IA.
Ejemplo: Llamada Simple a una API (usando la librería requests)
Primero, instala requests: pip install requests.
import requests
async def get_fact(update: Update, context):
"""Obtiene un hecho aleatorio de una API externa."""
try:
response = requests.get("https://uselessfacts.jsph.pl/api/v2/facts/random")
response.raise_for_status() # Lanza un HTTPError para respuestas erróneas (4xx o 5xx)
fact_data = response.json()
await update.message.reply_text(f"¿Sabías que? {fact_data['text']}")
except requests.exceptions.RequestException as e:
logger.error(f"Error al obtener el hecho: {e}")
await update.message.reply_text("Lo siento, no pude obtener un hecho ahora mismo. Por favor, inténtalo de nuevo más tarde.")
# Añade este manejador de comandos:
# application.add_handler(CommandHandler("fact", get_fact))
Esto demuestra cómo un bot podría interactuar con fuentes de datos externas, al igual que @claw se integra con varios servicios para proporcionar funcionalidades sofisticadas. Para interacciones de IA más avanzadas, considera usar plataformas como TeleClaw, que abstraen las complejidades de la integración con modelos como GPT-4 o Gemini. Puedes leer más sobre la integración de herramientas de IA en nuestro artículo sobre cómo construir un chatbot de Telegram.

4. Datos Persistentes y Gestión de Estado
Para bots más complejos, necesitarás una forma de almacenar datos entre interacciones. Por ejemplo, si tu bot necesita recordar las preferencias del usuario o las conversaciones en curso.
4.1 Usando context.user_data y context.chat_data
La librería python-telegram-bot proporciona los diccionarios context.user_data y context.chat_data (disponibles en tus funciones de manejador) que pueden almacenar datos temporales asociados con un usuario o un chat. Estos datos persisten durante la ejecución del bot.
async def set_favorite_color(update: Update, context):
"""Permite a los usuarios establecer su color favorito."""
if context.args:
color = " ".join(context.args).strip()
context.user_data["favorite_color"] = color
await update.message.reply_text(f"De acuerdo, he anotado tu color favorito como {color}.")
else:
await update.message.reply_text("Por favor, dime tu color favorito, por ejemplo, /setcolor azul")
async def get_favorite_color(update: Update, context):
"""Le dice al usuario su color favorito."""
color = context.user_data.get("favorite_color")
if color:
await update.message.reply_text(f"Tu color favorito es {color}.")
else:
await update.message.reply_text("Todavía no sé tu color favorito. Usa /setcolor.")
# Añade estos manejadores:
# application.add_handler(CommandHandler("setcolor", set_favorite_color))
# application.add_handler(CommandHandler("getcolor", get_favorite_color))
4.2 Persistencia de Datos a Través de Reinicios
Para que los datos persistan incluso cuando tu script de bot se reinicia, necesitas una solución más robusta, como:
- Archivos (CSV, JSON): Sencillo para pequeñas cantidades de datos.
- Bases de datos (SQLite, PostgreSQL, MongoDB): Recomendado para almacenamiento de datos más grandes y complejos.
SQLitees una buena opción para el desarrollo local, ya que se basa en archivos y no requiere un servidor separado. - Soluciones de almacenamiento de terceros: Bases de datos en la nube como Firestore o DynamoDB.
La librería python-telegram-bot también ofrece clases BasePersistence que se pueden usar con PicklePersistence o DictPersistence para guardar user_data, chat_data y bot_data en un archivo. Consulta los ejemplos oficiales de python-telegram-bot para saber cómo usar la persistencia (https://docs.python-telegram-bot.org/en/stable/telegram.ext.basepersistence.html).
5. Consideraciones de Despliegue
Ejecutar tu bot en tu máquina local está bien para el desarrollo, pero para que sea accesible 24/7, necesitas desplegarlo en un servidor.
5.1 Polling vs. Webhooks
Hay dos formas principales en que un bot de Telegram recibe actualizaciones:
- Long Polling: Tu bot pregunta repetidamente a los servidores de Telegram por nuevas actualizaciones. Esto es lo que usamos con
application.run_polling(). Es sencillo de configurar, pero puede consumir muchos recursos para bots muy activos. - Webhooks: Le indicas a Telegram la URL de tu servidor. Cuando ocurre una actualización, Telegram envía una solicitud HTTP POST a esa URL. Es más eficiente para producción, pero requiere un servidor accesible públicamente y manejo de HTTPS.
Para bots simples y desarrollo inicial, el long polling es suficiente. Para producción, los webhooks son generalmente preferidos. La librería python-telegram-bot soporta ambos.
5.2 Plataformas de Despliegue
Varias plataformas son adecuadas para desplegar bots de Python:
- Heroku: Ideal para proyectos pequeños y medianos, con un nivel gratuito. Fácil de desplegar con
git. - Render: Similar a Heroku, pero a menudo con niveles gratuitos más generosos y características modernas.
- AWS (EC2, Lambda), Google Cloud (Compute Engine, Cloud Functions), Azure (App Service, Functions): Ofrecen soluciones potentes y escalables, pero tienen una curva de aprendizaje más pronunciada.
- Servidores Privados Virtuales (VPS): Servicios como DigitalOcean, Linode, Vultr te dan más control, pero eres responsable de la gestión del servidor.
Al desplegar, recuerda:
- Mantén tu token de API seguro: Usa variables de entorno.
- Instala las dependencias: Crea un archivo
requirements.txt(pip freeze > requirements.txt) y asegúrate de que tu host las instale. - Configura gestores de procesos: Herramientas como
systemdopm2pueden mantener tu bot en funcionamiento incluso si falla.
Para aplicaciones comerciales o bots impulsados por IA altamente escalables, plataformas como TeleClaw proporcionan un entorno robusto y gestionado. Se encargan de la infraestructura, la seguridad y la escalabilidad, permitiéndote concentrarte en la lógica de tu bot y la experiencia del usuario. Consulta nuestra guía detallada sobre bot de Telegram para negocios para ver lo que ofrece TeleClaw.
Conclusión
Ahora has aprendido los principios fundamentales para construir una aplicación de bot de Telegram con Python. Desde la configuración inicial con BotFather y el entorno, hasta la escritura de manejadores para comandos y mensajes, el manejo de diferentes tipos de datos y la consideración de estrategias de despliegue, tienes una base sólida. La librería python-telegram-bot hace que interactuar con la API de Telegram sea sorprendentemente sencillo, abriendo un mundo de posibilidades para la automatización y la interacción.
A medida que te sientas más cómodo, puedes explorar temas avanzados como:
- Manejo de conversaciones con
ConversationHandler. - Manejo de errores y registro robusto.
- Integración con bases de datos para almacenamiento de datos complejos.
- Utilización de
filtersmás avanzados. - Implementación del modo inline para capacidades de búsqueda global.
Recuerda, la belleza de la apertura de Telegram y la versatilidad de Python es que puedes construir casi cualquier cosa. Si buscas elevar tu bot con IA de vanguardia, comprensión del lenguaje natural o integraciones fluidas sin la pesada carga de la codificación, plataformas como TeleClaw están diseñadas para empoderarte.
¿Listo para construir, mejorar o gestionar tus bots de Telegram con automatización inteligente?
¡Explora TeleClaw hoy y potencia tu bot de Telegram! o prueba nuestro bot directamente en Telegram: @claw
FAQ
Preguntas frecuentes
¿Cuáles son los pasos básicos para crear un bot de Telegram con Python?
¿Necesito experiencia en programación para seguir este tutorial de bot de Telegram con Python?
¿Cómo puede TeleClaw ayudarme con mi proyecto de bot de Telegram en Python?
Seguir leyendo
Los Mejores Agentes de IA para Empresas en 2026: Una Guía por Categorías
La forma más clara de comparar agentes de IA para empresas en 2026: seis categorías reales, selecciones honestas y dónde encaja realmente un agente nativo de Telegram como TeleClaw.
Agentes en la Nube de TeleClaw: Ejecuta un Agente de Codificación desde Telegram
TeleClaw figura en la categoría de agentes en la nube de OpenRouter. Descubre qué hace un agente en la nube, cómo el 2026 transformó este campo y cómo ejecutar uno desde Telegram.