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.
¡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.).
🛠️ 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:
- Abre Telegram y busca a
@BotFatheren la barra de búsqueda. - Inicia un chat con él y escribe
/start. - Para crear un nuevo bot, envía el comando
/newbot. - BotFather te pedirá un nombre para tu bot (este es el nombre que verán los usuarios, por ejemplo, "Mi Primer Bot").
- Luego te pedirá un username para tu bot. Este debe terminar con
bot(por ejemplo,MiPrimerBot_bot). - Si todo sale bien, BotFather te felicitará y te proporcionará un mensaje con tu token API. Guárdalo en un lugar seguro.
🤖 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 esoasyncyawait) 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ónstartpara que se ejecute cuando el comando/startsea recibido.MessageHandler(filters.TEXT & ~filters.COMMAND, echo): Registra la funciónechopara 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")
# ...
💬 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.
- 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.")
- 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
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.
- 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.")
- 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.
🔄 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ón | Descripción | Dificultad |
|---|---|---|
| Servidor VPS | Un servidor virtual privado (AWS EC2, DigitalOcean, Linode) donde tienes control total. | Avanzado |
| PaaS | Plataformas como Heroku, PythonAnywhere, Vercel, Google Cloud Run. Simplifican el despliegue. | Intermedio |
| Raspberry Pi | Si 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:
-
Preparar tu Código: Asegúrate de que tu bot usa variables de entorno para el token y cualquier otra credencial.
-
requirements.txt: Crea un archivorequirements.txtque liste todas las dependencias de tu proyecto. Puedes generarlo con:
pip freeze > requirements.txt
-
Configuración del Entorno: En el servidor, deberás instalar Python y tus dependencias (
pip install -r requirements.txt). -
Ejecutar el Bot: La forma más sencilla es ejecutar tu script Python (
python main.py) dentro de una sesión persistente, comoscreenotmux, o usando un gestor de procesos comosystemdopm2.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
📚 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
asynciopara entender mejor cómo funcionapython-telegram-boty 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:
- Asegúrate de que tu script está en ejecución y no ha terminado.
- Revisa la consola en busca de errores. El
logging.INFOte ayudará a ver qué está pasando. - Comprueba que el
TOKENsea correcto y esté bien configurado. - Si el bot no responde a comandos, verifica que los
CommandHandlerestén correctamente registrados. - 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!