tutoriales.com

Desarrolla tu Primer Bot de Telegram con Python y `python-telegram-bot`

Este tutorial te guiará paso a paso para construir tu primer bot de Telegram usando Python y la popular librería `python-telegram-bot`. Aprenderás desde la configuración inicial en Telegram hasta el manejo de comandos y mensajes, con ejemplos prácticos y consejos de despliegue.

Principiante20 min de lectura8 views19 de marzo de 2026Reportar error

¡Bienvenido al emocionante mundo de la automatización y la interacción a través de Telegram! En este tutorial, te embarcarás en el viaje de crear tu propio bot de Telegram utilizando el poderoso lenguaje Python y la robusta librería python-telegram-bot. No necesitas ser un experto; te guiaremos a través de cada etapa, desde la obtención de tu token de bot hasta la programación de respuestas y comandos.

Los bots de Telegram son programas que interactúan con los usuarios dentro de la plataforma. Pueden realizar una infinidad de tareas: enviar noticias, recordatorios, juegos, herramientas de productividad, e incluso integrarse con otros servicios. ¡Las posibilidades son casi infinitas! ✨

🚀 ¿Qué Necesitarás Antes de Empezar?

Para seguir este tutorial, asegúrate de tener lo siguiente:

  • Python 3.7+ instalado en tu sistema. Puedes descargarlo desde python.org.
  • Conocimientos básicos de Python: variables, funciones, estructuras de control (if/else, bucles).
  • Una cuenta de Telegram.
  • Un editor de código de tu preferencia (VS Code, PyCharm, Sublime Text, etc.).
💡 Consejo: Te recomendamos usar un entorno virtual para tus proyectos Python. Así mantendrás las dependencias organizadas y aisladas de otros proyectos.

🛠️ Instalación de la Librería python-telegram-bot

El primer paso es instalar la librería que nos permitirá interactuar con la API de Telegram. Abre tu terminal o línea de comandos y ejecuta:

pip install python-telegram-bot --pre

La opción --pre es importante para instalar la versión más reciente, que es compatible con las características actuales de Telegram y ofrece una API más moderna y asíncrona.

🔑 Obteniendo tu Token de Bot de Telegram

Cada bot de Telegram necesita un token único para autenticarse con la API de Telegram. Este token actúa como la "contraseña" de tu bot y debe mantenerse en secreto. Para obtenerlo, utilizaremos a BotFather, el bot oficial de Telegram para crear y gestionar bots.

Pasos para Obtener el Token:

  1. Abre Telegram y busca a @BotFather en la barra de búsqueda.
  2. Inicia un chat con él y escribe /start.
  3. Para crear un nuevo bot, envía el comando /newbot.
  4. BotFather te pedirá un nombre para tu bot (este es el nombre que verán los usuarios, por ejemplo, "Mi Primer Bot").
  5. Luego te pedirá un username para tu bot. Este debe terminar con bot (por ejemplo, MiPrimerBot_bot).
  6. Si todo sale bien, BotFather te felicitará y te proporcionará un mensaje con tu token API. Guárdalo en un lugar seguro.
⚠️ Advertencia: ¡Nunca compartas tu token de bot con nadie! Si crees que tu token ha sido comprometido, puedes revocarlo y generar uno nuevo usando BotFather con el comando `/revoke`.

🤖 Estructura Básica de un Bot

Vamos a crear nuestro primer script de Python. Abre tu editor de código y crea un archivo llamado main.py.

from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
import logging
import os

# Habilitar el registro para ver eventos
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    level=logging.INFO
)
logging.getLogger("httpx").setLevel(logging.WARNING)

# --- Configuración del Bot --- #
TOKEN = os.getenv("TELEGRAM_BOT_TOKEN") # Obtener el token de las variables de entorno

# Si no encuentras el token, asegúrate de haberlo configurado correctamente
if TOKEN is None:
    logging.error("El token del bot de Telegram no está configurado. Asegúrate de establecer la variable de entorno TELEGRAM_BOT_TOKEN.")
    exit()

# --- Definición de Comandos y Manejadores --- #

# Handler para el comando /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    user = update.effective_user
    await update.message.reply_html(
        f"¡Hola, {user.mention_html()}! Soy tu primer bot. ¡Encantado de conocerte!",
    )

# Handler para el comando /help
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await update.message.reply_text("¡Hola! Soy un bot de ejemplo. Puedes probar a hablarme o usar el comando /start.")

# Handler para mensajes de texto normales
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await update.message.reply_text(update.message.text)

# --- Función Principal (main) --- #

def main() -> None:
    """Inicia el bot."""
    # Crear la aplicación y pasar el token del bot
    application = Application.builder().token(TOKEN).build()

    # Registrar los manejadores
    application.add_handler(CommandHandler("start", start))
    application.add_handler(CommandHandler("help", help_command))

    # Manejador para mensajes que no son comandos (eco)
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))

    # Iniciar el bot (polling)
    application.run_polling(allowed_updates=Update.ALL_TYPES)


if __name__ == "__main__":
    main()

Este código sienta las bases de nuestro bot. Vamos a desglosarlo:

  • logging: Configura el sistema de registro para ver lo que está haciendo nuestro bot.
  • TOKEN: Aquí es donde usarás el token que obtuviste de BotFather. Lo leemos de una variable de entorno por seguridad, lo cual es una buena práctica.
  • start(update, context): Esta es una función asíncrona (por eso async y await) que se ejecuta cuando un usuario envía el comando /start. Envía un saludo personalizado al usuario.
  • help_command(update, context): Responde al comando /help.
  • echo(update, context): Este manejador responde con el mismo texto que el usuario envió. Es un "eco".
  • main(): La función principal que inicializa el bot.
    • Application.builder().token(TOKEN).build(): Crea la instancia de la aplicación del bot con tu token.
    • application.add_handler(...): Registra los manejadores. Un manejador es una pieza de código que se activa cuando ocurre un evento específico (un comando, un mensaje de texto, una foto, etc.).
      • CommandHandler("start", start): Registra la función start para que se ejecute cuando el comando /start sea recibido.
      • MessageHandler(filters.TEXT & ~filters.COMMAND, echo): Registra la función echo para cualquier mensaje de texto que no sea un comando.
    • application.run_polling(): Inicia el bot. Esto hace que el bot "escuche" continuamente los mensajes nuevos que llegan a Telegram.

🔐 Configurando tu Token de Bot de Forma Segura

Es crucial no incrustar tu token directamente en el código fuente, especialmente si planeas subir tu código a un repositorio público como GitHub. En su lugar, usa variables de entorno.

Para ejecutar el bot localmente, puedes establecer la variable de entorno de esta manera (en Linux/macOS):

export TELEGRAM_BOT_TOKEN="TU_TOKEN_AQUI"
python main.py

O en Windows (cmd):

set TELEGRAM_BOT_TOKEN="TU_TOKEN_AQUI"
python main.py

Para entornos de desarrollo, también puedes usar un archivo .env y librerías como python-dotenv. Primero, instala la librería:

pip install python-dotenv

Luego, crea un archivo .env en la misma carpeta que tu main.py:

TELEGRAM_BOT_TOKEN="TU_TOKEN_AQUI"

Y modifica main.py para cargar estas variables:

import os
from dotenv import load_dotenv # Importa load_dotenv

load_dotenv() # Carga las variables de entorno del archivo .env

# ... el resto de tu código ...

TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")

# ...
🔥 Importante: Si usas `.env`, asegúrate de añadir `.env` a tu archivo `.gitignore` para que no se suba a tu repositorio de control de versiones.

💬 Añadiendo Más Comandos y Funcionalidades

Vamos a extender la funcionalidad de nuestro bot añadiendo un comando que realice una operación matemática simple.

Comando /suma

Crearemos un comando /suma que tome dos números y devuelva su suma.

  1. Define la función suma_command: Esta función recibirá los argumentos después de /suma.
# Handler para el comando /suma
async def suma_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
try:
args = context.args
if len(args) != 2:
await update.message.reply_text("Uso: /suma <numero1> <numero2>")
return

num1 = float(args[0])
num2 = float(args[1])
resultado = num1 + num2
await update.message.reply_text(f"La suma de {num1} y {num2} es: {resultado}")
except ValueError:
await update.message.reply_text("Por favor, introduce números válidos.")
except Exception as e:
logging.error(f"Error en suma_command: {e}")
await update.message.reply_text("Ocurrió un error al procesar tu solicitud.")
  1. Registra el manejador en la función main():
# ... dentro de main()
application.add_handler(CommandHandler("suma", suma_command))
# ...

Ahora, si reinicias tu bot y le envías /suma 5 3, debería responder "La suma de 5.0 y 3.0 es: 8.0".

Diagrama de Flujo del Bot

Inicio Esperando mensaje Usuario envía mensaje ¿Es comando? Handler /start Handler /help Handler /suma No ¿Es texto? Echo Handler Responde al usuario y vuelve

Este diagrama visualiza cómo el Application y sus Handlers dirigen los mensajes entrantes a la función correcta.

📊 Manejo de Otros Tipos de Mensajes

Telegram no solo maneja texto y comandos; también puede recibir fotos, videos, documentos, ubicaciones, etc. Podemos crear manejadores para estos tipos de contenido.

Handler para Fotos

Vamos a hacer que nuestro bot responda cuando reciba una foto.

  1. Define la función handle_photo:
# Handler para fotos
async def handle_photo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text("¡Qué foto tan bonita! Gracias por compartirla.")
# Si quisieras descargarla:
# file_id = update.message.photo[-1].file_id # Obtiene el ID del archivo de la foto de mayor resolución
# new_file = await context.bot.get_file(file_id)
# await new_file.download_to_drive(f"./fotos/{file_id}.jpg") # Necesitas crear la carpeta 'fotos'
# await update.message.reply_text("He guardado tu foto.")
  1. Registra el manejador en main():
# ... dentro de main()
application.add_handler(MessageHandler(filters.PHOTO, handle_photo))
# ...

Ahora, si envías una foto a tu bot, responderá con el mensaje definido.

📌 Nota: Puedes usar `filters.Document`, `filters.Sticker`, `filters.LOCATION`, etc., para manejar otros tipos de mensajes de manera similar.

🔄 Despliegue Básico del Bot

Una vez que tu bot funciona localmente, querrás que esté disponible 24/7 sin tener que mantener tu computadora encendida. Esto requiere desplegarlo en un servidor.

Hay varias opciones para desplegar un bot de Python:

OpciónDescripciónDificultad
Servidor VPSUn servidor virtual privado (AWS EC2, DigitalOcean, Linode) donde tienes control total.Avanzado
PaaSPlataformas como Heroku, PythonAnywhere, Vercel, Google Cloud Run. Simplifican el despliegue.Intermedio
Raspberry PiSi tienes una, puedes ejecutar el bot en casa 24/7 con bajo consumo energético.Importante

Para este tutorial, nos centraremos en los pasos generales, ya que el despliegue específico varía según la plataforma.

Pasos Comunes para el Despliegue:

  1. Preparar tu Código: Asegúrate de que tu bot usa variables de entorno para el token y cualquier otra credencial.

  2. requirements.txt: Crea un archivo requirements.txt que liste todas las dependencias de tu proyecto. Puedes generarlo con:

pip freeze > requirements.txt
  1. Configuración del Entorno: En el servidor, deberás instalar Python y tus dependencias (pip install -r requirements.txt).

  2. Ejecutar el Bot: La forma más sencilla es ejecutar tu script Python (python main.py) dentro de una sesión persistente, como screen o tmux, o usando un gestor de procesos como systemd o pm2.

    Ejemplo básico con nohup (no recomendado para producción, pero ilustrativo):

nohup python main.py > bot.log 2>&1 &
*Ejemplo con `systemd` (Linux, más robusto):*
Crea un archivo de servicio como `/etc/systemd/system/telegram_bot.service`:
[Unit]
Description=Mi Bot de Telegram
After=network.target

[Service]
User=tu_usuario
WorkingDirectory=/ruta/a/tu/proyecto/bot
Environment="TELEGRAM_BOT_TOKEN=tu_token_aqui_o_mejor_en_otro_fichero_de_config"
ExecStart=/usr/bin/python3 /ruta/a/tu/proyecto/bot/main.py
Restart=always

[Install]
WantedBy=multi-user.target
Luego, recarga y habilita el servicio:
sudo systemctl daemon-reload
sudo systemctl enable telegram_bot
sudo systemctl start telegram_bot
💡 Consejo: Para una mayor robustez y escalabilidad, considera usar webhooks en lugar de `run_polling()` si tu plataforma de despliegue lo soporta y si esperas un gran volumen de usuarios. `python-telegram-bot` tiene excelente soporte para webhooks.

📚 Próximos Pasos y Aprendizaje Continuo

Has construido y desplegado tu primer bot de Telegram. ¡Felicidades! 🎉 Pero esto es solo el principio. Aquí tienes algunas ideas para continuar aprendiendo:

  • Inline Keyboards y Reply Keyboards: Añade botones interactivos a tus mensajes.
  • Conversaciones y Estados: Crea flujos de conversación más complejos donde el bot "recuerde" el estado del usuario.
  • Bases de Datos: Integra una base de datos (SQLite, PostgreSQL) para almacenar información de usuarios o configuraciones.
  • APIs Externas: Haz que tu bot interactúe con otras APIs (clima, noticias, etc.).
  • Pruebas Unitarias: Aprende a escribir pruebas para tu bot para asegurar su correcto funcionamiento.
  • Asynchronous Programming: Sumérgete más en asyncio para entender mejor cómo funciona python-telegram-bot y escribir código más eficiente.

La documentación oficial de python-telegram-bot es un recurso excelente y exhaustivo. ¡No dudes en consultarla!

FAQ: Preguntas Frecuentes

P: ¿Por qué mi bot no responde?

R: Verifica lo siguiente:

  1. Asegúrate de que tu script está en ejecución y no ha terminado.
  2. Revisa la consola en busca de errores. El logging.INFO te ayudará a ver qué está pasando.
  3. Comprueba que el TOKEN sea correcto y esté bien configurado.
  4. Si el bot no responde a comandos, verifica que los CommandHandler estén correctamente registrados.
  5. Si estás detrás de un proxy, asegúrate de configurar el proxy para python-telegram-bot.

P: ¿Cómo puedo hacer que mi bot envíe mensajes proactivamente (sin que el usuario hable primero)?

R: Necesitarás obtener el chat_id del usuario o grupo al que quieres enviar el mensaje. Una vez lo tengas, puedes usar context.bot.send_message(chat_id=tu_chat_id, text="Hola desde mi bot!") desde cualquier parte de tu código, no necesariamente desde un manejador.

P: ¿Cómo depuro mi bot?

R: Utiliza las sentencias print() o, mejor aún, el módulo logging para ver los valores de las variables y el flujo de ejecución. Un depurador (como el de VS Code) también es una herramienta muy útil.


✅ Conclusión

Has llegado al final de este tutorial. Ahora tienes una comprensión sólida de cómo crear, configurar y extender un bot de Telegram con Python. La flexibilidad de python-telegram-bot y el ecosistema de Python te abren un mundo de posibilidades para desarrollar bots inteligentes y útiles. ¡Experimenta, crea y diviértete programando!

Tutoriales relacionados

Comentarios (0)

Aún no hay comentarios. ¡Sé el primero!