Cómo hospedar un bot de Telegram 24/7

Para mantener un bot de Telegram en línea las 24 horas, ejecuta el proceso en un servidor que no se apague. Empieza con long polling o usa un webhook HTTPS, y guarda el token en una variable de entorno.

Actualizado el 6 min de lectura

Objetivos de aprendizaje

Después de leer este artículo podrás:

  • Elegir entre long polling y webhook para tu bot
  • Ejecutar un bot con python-telegram-bot 22 en modo polling y webhook
  • Verificar que el bot está en línea y evitar los errores más comunes
En esta página

Un bot de Telegram es un programa que recibe actualizaciones (mensajes, comandos, clics en botones) y responde mediante la Bot API. A diferencia de un bot de Discord, no mantiene un WebSocket abierto: Telegram entrega las actualizaciones por HTTP. Aun así, un proceso tuyo tiene que estar en marcha para pedirlas o recibirlas, y ahí entra el hosting.

A continuación creas el token, eliges el modo de recepción, ejecutas el código y compruebas que funciona. Los ejemplos usan Python con la API de python-telegram-bot 22; consulta en PyPI la versión actual de la biblioteca y la versión mínima de Python que exige.

Long pollingel bot preguntaTelegramBot APIgetUpdatesactualizacionesBotsin URL públicaWebhookTelegram envíaTelegramBot APIPOST HTTPSServidor del botURL pública HTTPS
Con polling el bot busca las actualizaciones; con webhook Telegram las entrega por HTTPS en una URL pública.

¿Qué significa mantener un bot de Telegram 24/7?#

Significa tener un proceso corriendo sin parar en una máquina que no se apaga, y que vuelve solo si falla. El código del bot es solo un bucle que busca o recibe actualizaciones y llama a tus funciones. Si el proceso muere, nadie responde.

Ejecutarlo en tu computadora sirve para probar, pero el bot cae cuando la máquina se suspende, se reinicia o pierde la conexión. Para un bot que usa más gente, lo normal es un servidor siempre encendido: un VPS, un contenedor o una plataforma de hosting. Mira qué esperar de las opciones sin costo en límites del hosting gratuito para bots.

¿Cómo creo el bot y obtengo el token?#

  1. Abre un chat con @BotFather en Telegram.
  2. Envía /newbot y responde las preguntas (un nombre y un username que termina en bot).
  3. Copia el token que te devuelve. Tiene el formato de un número, dos puntos y una cadena de caracteres.

El token autentica al bot, no a tu cuenta, y funciona como una contraseña: quien lo tiene controla el bot. La documentación de Telegram recomienda no dejarlo en el código y guardarlo en variables de entorno o en un archivo de configuración. Si se filtra, revócalo desde BotFather. Para entender el concepto, lee qué son las variables de entorno.

¿Long polling o webhook?#

Telegram ofrece dos formas de entregar actualizaciones, y solo puedes usar una a la vez:

Long polling Webhook
Quién inicia El bot pregunta a Telegram (getUpdates) Telegram hace un POST a tu URL
URL pública No hace falta Obligatoria, con HTTPS
Puertos Cualquier salida 443, 80, 88 u 8443
Configuración Ninguna setWebhook, certificado válido
Bueno para Empezar, bots pequeños y medianos Alto volumen, servidor ya expuesto

En long polling, getUpdates acepta un timeout en segundos: con un valor mayor que cero, la conexión queda abierta hasta que llega una actualización, en lugar de consultar todo el tiempo. El valor por defecto es 0, que es polling corto. Las bibliotecas ya se encargan de esto.

En webhook, la URL debe ser HTTPS. Puedes definir un secret_token de 1 a 256 caracteres (letras, números, _ y -), que Telegram devuelve en el encabezado X-Telegram-Bot-Api-Secret-Token para que descartes peticiones falsas. Por defecto admite hasta 40 conexiones simultáneas (max_connections).

Para la mayoría de los bots, empieza con polling. Pasa a webhook si necesitas volumen o ya tienes un servidor HTTPS.

¿Cómo ejecuto un bot con long polling?#

Instala la biblioteca y crea un archivo bot.py:

bash
pip install "python-telegram-bot>=22,<23"
python
import os

from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes


async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await update.message.reply_text("¡Estoy en línea!")


def main() -> None:
    app = Application.builder().token(os.environ["BOT_TOKEN"]).build()
    app.add_handler(CommandHandler("start", start))
    app.run_polling(allowed_updates=Update.ALL_TYPES)


if __name__ == "__main__":
    main()

Define BOT_TOKEN en el entorno y ejecuta python bot.py. run_polling bloquea el proceso y maneja las señales de cierre. Envía /start al bot: si responde, el ciclo funciona.

En otras bibliotecas la idea es la misma: aiogram (Python), Telegraf y grammY (Node.js) tienen un método de inicio que entra en polling.

¿Cómo lo ejecuto con webhook?#

Cambia run_polling por run_webhook. Instala el extra de webhooks:

bash
pip install "python-telegram-bot[webhooks]>=22,<23"
python
import os

from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes


async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await update.message.reply_text("¡Estoy en línea por webhook!")


def main() -> None:
    app = Application.builder().token(os.environ["BOT_TOKEN"]).build()
    app.add_handler(CommandHandler("start", start))
    app.run_webhook(
        listen="0.0.0.0",
        port=int(os.environ.get("PORT", "8080")),
        url_path="telegram",
        webhook_url=f"{os.environ['PUBLIC_URL']}/telegram",
        secret_token=os.environ["WEBHOOK_SECRET"],
    )


if __name__ == "__main__":
    main()

PUBLIC_URL es la dirección HTTPS pública de tu servidor (por ejemplo https://mibot.ejemplo.com). PORT y PUBLIC_URL son solo nombres de ejemplo. El puerto de webhook_url debe ser uno de los que acepta Telegram (443, 80, 88 u 8443); si un proxy inverso recibe el tráfico, el bot puede escuchar en otro puerto local. La biblioteca llama a setWebhook al iniciar y valida el secret_token en cada petición. Para entender el certificado de esa dirección, mira cómo funciona Let's Encrypt.

¿Cómo mantengo el proceso vivo?#

En la práctica, hospedar 24/7 son tres garantías:

  • Reinicio automático: en un VPS, usa systemd o un gestor de procesos como pm2; en una plataforma, comprueba si el reinicio viene incluido.
  • Configuración fuera del código: el token y el secreto del webhook entran por el entorno, nunca por el repositorio.
  • Logs: sin logs no sabes por qué se detuvo el bot. Imprime los errores y lee la salida del proceso.

Telegram guarda las actualizaciones pendientes hasta 24 horas. Con una caída corta no pierdes mensajes; con una de más de un día, sí.

¿Cómo sé si el bot está en línea?#

  • Envía un comando y comprueba si responde.
  • Llama al método getMe de la Bot API para validar el token (nunca compartas esa URL, porque contiene el token).
  • Con webhook, getWebhookInfo muestra la URL registrada, el número de actualizaciones pendientes y el último error de entrega.

¿Cuáles son los errores comunes?#

  • El bot no responde en modo webhook: la URL no es HTTPS válida, el puerto no es uno de los permitidos o el secret_token no coincide. Revisa last_error_message en getWebhookInfo.
  • Conflict: terminated by other getUpdates request: hay dos instancias del mismo bot en polling. Detén la otra, incluida la de tu PC.
  • getUpdates no funciona: hay un webhook activo. Elimínalo con deleteWebhook.
  • Unauthorized (InvalidToken en python-telegram-bot): token incorrecto o revocado. Revisa la variable de entorno.
  • El bot se desconecta después de unas horas: el proceso se cerró por falta de memoria o por un error no controlado. Revisa los logs.

Cómo hacerlo en Square Cloud#

En Square Cloud, los dos modos de este artículo funcionan sin cambiar el código. Con long polling, el bot es una aplicación en segundo plano: solo hace peticiones de salida, no necesita subdominio y empieza en 256 MB de RAM. Para webhook, crea una aplicación web con subdominio: recibe una dirección squareweb.app con HTTPS, que va en PUBLIC_URL, y el ejemplo de arriba ya escucha en 0.0.0.0 en el puerto de la variable PORT, que define la plataforma. La URL pública usa HTTPS en el puerto estándar, que Telegram acepta, y una aplicación web empieza en 512 MB.

Las tres garantías para mantener el proceso vivo ya vienen con el contenedor. Está siempre encendido, sin modo de suspensión, y el reinicio automático, activado por defecto en el deploy desde el panel, levanta el bot cuando el proceso termina con error. Si se queda sin memoria, la aplicación se detiene y solo vuelve cuando subes la RAM y la inicias de nuevo. BOT_TOKEN y WEBHOOK_SECRET entran como variables de entorno de la aplicación, y los logs en tiempo real muestran por qué se cayó el bot. Al hacer el deploy, detén la copia que corre en tu PC, o el polling vuelve a dar Conflict.

El bot funciona con python-telegram-bot, aiogram, Telethon, Telegraf o grammY. El Hobby cuesta R$12,49 al mes con 1 GB de RAM compartida entre tus aplicaciones. Consulta los detalles en hosting de bots de Telegram.

Hosting de bots

Tu bot en línea 24/7, con reinicio automático

Más información

Preguntas frecuentes

¿El bot de Telegram necesita que mi computadora esté encendida?

Necesita un proceso corriendo en algún lugar. Si es tu PC, el bot cae cuando se apaga o pierde internet. En un servidor siempre encendido, el bot sigue respondiendo sin depender de tu máquina.

¿Pierdo mensajes si el bot se cae?

No de inmediato. Telegram guarda las actualizaciones pendientes hasta que el bot las pide, pero nunca más de 24 horas. Pasado ese plazo, los mensajes antiguos se descartan.

¿Puedo usar long polling y webhook a la vez?

No. Mientras hay un webhook configurado, el método getUpdates no funciona. Para volver al polling, elimina el webhook con deleteWebhook.

¿Necesito un dominio para hospedar un bot de Telegram?

Solo para webhook. Long polling no necesita URL pública, porque el bot es quien hace las peticiones. El webhook necesita una URL HTTPS accesible para Telegram.

Siguiente artículoHosting gratis para bots: límites y lo que no te dicenEl hosting gratis para bots suele suspender el proceso, limitar las horas o desaparecer. Mira los límites reales de Render, Oracle Cloud, Glitch y Heroku.