Volver al blog
Guides

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.

Crea tu Primer Bot de Telegram con Python: Una Guía Completa

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.

  1. 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.
  2. Inicia el Proceso de Creación del Bot: Escribe /newbot y envía el mensaje.
  3. 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”).
  4. 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.
  5. 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 un MessageHandler.
  • 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

  1. 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 reemplazar os.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.
  2. Ejecuta tu Script de Python: Navega al directorio donde guardaste mi_bot_telegram.py en tu terminal y ejecuta:

    python mi_bot_telegram.py
  3. 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, /help o 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.

Bot de Telegram respondiendo a /start y haciendo eco de un mensaje.

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.

Representación visual de un bot de Telegram interactuando con una API externa.

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. SQLite es 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 systemd o pm2 pueden 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 filters má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?
Los pasos fundamentales incluyen crear un nuevo bot con BotFather para obtener un token de API, instalar la librería `python-telegram-bot`, escribir código Python para gestionar mensajes y comandos, y luego ejecutar tu script. Para funcionalidades más avanzadas o integración con IA, plataformas como TeleClaw pueden simplificar significativamente el proceso.
¿Necesito experiencia en programación para seguir este tutorial de bot de Telegram con Python?
Aunque tener conocimientos básicos de Python es útil, este tutorial está diseñado para ser accesible. Te guiaremos en cada paso, explicando los conceptos de forma clara. Para quienes prefieren un enfoque sin código, TeleClaw ofrece herramientas potentes para construir bots de Telegram sin escribir una sola línea de código.
¿Cómo puede TeleClaw ayudarme con mi proyecto de bot de Telegram en Python?
TeleClaw puede potenciar tu proyecto de bot de Telegram en Python al ofrecer capacidades avanzadas de IA, integraciones sencillas y analíticas robustas. Puedes usar TeleClaw para comprensión de lenguaje natural compleja, integración de bases de conocimiento o para gestionar múltiples bots de manera eficiente, incluso si comenzaste con un bot personalizado basado en Python.
Más artículos

Seguir leyendo