Un bot de Telegram tiene que estar funcionando todo el tiempo para responder a los mensajes. Ejecutarlo en tu portátil significa que se desconecta cuando cierras la tapa. Un VPS pequeño lo soluciona por unos pocos dólares al mes. Esta guía ejecuta un bot de Python como servicio systemd para que arranque con el sistema y se reinicie tras un fallo.
¿Qué tamaño de VPS?
La mayoría de los bots son ligeros. Un plan con 1 a 2 vCPU y 2 GB de RAM es más que suficiente. Consulta el hosting para bots de Telegram para ver planes sugeridos.
Paso 1: consigue un token de bot
Habla con @BotFather en Telegram, envía /newbot, elige un nombre y un nombre de usuario que termine en bot, y copia el token. Trátalo como una contraseña, porque cualquiera que lo tenga puede controlar el bot.
Paso 2: prepara el servidor
sudo apt update && sudo apt install -y python3 python3-venv
sudo adduser --disabled-password --gecos "" botuser
sudo -iu botuser
mkdir ~/mybot && cd ~/mybot
python3 -m venv .venv
. .venv/bin/activate
pip install python-telegram-bot
Paso 3: escribe un bot pequeño
# bot.py
import os
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
async def start(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Hello! I am running on a VPS.")
app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
El polling no necesita puertos abiertos, así que no tienes que configurar un dominio ni un webhook.
Paso 4: guarda el token de forma segura
echo "BOT_TOKEN=123456:ABC..." > ~/mybot/.env
chmod 600 ~/mybot/.env
Paso 5: ejecútalo como servicio
De vuelta como usuario administrador, crea /etc/systemd/system/mybot.service:
[Unit]
Description=Telegram bot
After=network-online.target
[Service]
User=botuser
WorkingDirectory=/home/botuser/mybot
EnvironmentFile=/home/botuser/mybot/.env
ExecStart=/home/botuser/mybot/.venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo journalctl -u mybot -f
Actualizarlo y vigilarlo
- Actualiza el código y luego ejecuta
sudo systemctl restart mybot. - Revisa los registros con
journalctl -u mybot -n 100. - Usa copias de seguridad si el bot almacena datos.
¿Polling o webhook?
El polling es lo más sencillo y vale para la mayoría de los bots. Usa un webhook si necesitas entrega instantánea con alto volumen, lo que requiere un dominio y HTTPS. Consulta alojar con Nginx y HTTPS.