La idea clave: que el bot funcione por eventos
Un bot que mantiene abierto un WebSocket (Gateway de Discord, Socket Mode de Slack) o que hace un ciclo con getUpdates de Telegram necesita un proceso corriendo cada segundo del día. Un bot que recibe webhooks solo se ejecuta cuando llega un mensaje. La mayoría de los planes gratuitos son generosos con las peticiones y tacaños con el cómputo siempre encendido, así que la forma más barata de seguir en línea es pasar a webhooks donde la plataforma lo permita:
- Telegram: llama a
setWebhookcon una URL HTTPS y unsecret_token. - Discord: atiende los comandos slash y los botones como interacciones HTTP configurando una Interactions Endpoint URL. Solo necesitas el Gateway para leer mensajes normales o la presencia.
- Slack: usa la Events API por HTTP en lugar de Socket Mode.
- WhatsApp Cloud API: los webhooks son la única opción de todos modos.
Opción 1: bot con webhooks en un plan serverless gratuito
Las plataformas edge y serverless cobran por petición, y varias incluyen una cuota gratuita que un bot pequeño no agota. El plan gratuito de Cloudflare Workers, por ejemplo, documenta una cuota diaria de peticiones y un límite de CPU por petición; un bot que verifica una firma, lee algo de estado y llama a sendMessage cabe sin problema. Combínalo con una base de datos gratuita (D1, KV o el plan gratuito de un Postgres administrado) para el estado.
Lo que lo hace funcionar:
- Confirma rápido y después haz el trabajo. Usa
ctx.waitUntilo una cola para todo lo lento. - Guarda los secretos en el almacén de secretos de la plataforma.
- Vigila tus cuotas; la mayoría de los paneles muestran el uso por día.
Nuestra guía de bots en Cloudflare Workers muestra un bot de Telegram completo, y la plantilla de Telegram para Cloudflare Workers es un ZIP listo para desplegar.
Opción 2: una máquina virtual siempre gratuita para bots de gateway
Si de verdad necesitas una conexión persistente, busca proveedores con cómputo siempre gratuito y no pruebas por tiempo limitado. Al momento de escribir esto, el nivel Always Free de Oracle Cloud incluye cómputo Ampere A1 basado en Arm, y el nivel gratuito de Google Cloud incluye una VM e2-micro al mes en ciertas regiones de Estados Unidos. Ambos tienen condiciones (regiones, capacidad, verificación de la cuenta con tarjeta), así que lee los términos.
Corre el bot con systemd y Restart=always, o en un contenedor con política de reinicio, para que vuelva después de fallos y reinicios.
Opción 3: tareas programadas en runners de CI
Para bots que publican con horario (un resumen diario, un vigilante de feeds), un workflow programado en un servicio de CI puede bastar. Conoce los límites: GitHub documenta que los workflows programados pueden retrasarse en periodos de mucha carga y que, en repositorios públicos, se desactivan automáticamente tras 60 días sin actividad en el repositorio. Sirve para un resumen y no para algo interactivo.
Trampas que dejan fuera de línea a los bots gratuitos
- Servicios que se duermen. Algunos planes gratuitos de contenedores se apagan tras un tiempo sin tráfico HTTP entrante. Un bot de gateway en ese plan se desconecta sin avisar. Hacerle ping para mantenerlo despierto suele incumplir los términos del proveedor.
- Planes que desaparecen. Heroku terminó sus dynos gratuitos en noviembre de 2022, y otros proveedores han cambiado sus planes desde entonces. Mantén tu despliegue portable: un Dockerfile y variables de entorno, no una configuración atada a una plataforma de la que no puedas salir.
- Polling desde dos lugares. Telegram devuelve 409 Conflict cuando dos procesos llaman a
getUpdateso cuando hay un webhook configurado. Al cambiar de hosting, detén primero el anterior. - Sin monitoreo. Un bot gratuito caído durante una semana es peor que uno de paga que te avisa.
Monitoreo gratuito suficiente
- Un endpoint
/healthzque revisa la base de datos y devuelve 200. - Un servicio externo de uptime en plan gratuito que consulte ese endpoint cada pocos minutos.
- En Telegram,
getWebhookInfomuestralast_error_messagey el número de actualizaciones pendientes: revísalo en tu endpoint de salud. - Registra cada envío fallido con la descripción de error de la plataforma.
Cuándo dejar lo gratuito
Paga cuando los usuarios dependan del bot, cuando necesites un SLA o cuando pases más tiempo peleando con límites que construyendo. Un VPS pequeño o un plan serverless de paga cuesta menos que el tiempo que pierdes con uno gratuito poco confiable.
Fuentes
- Precios y límites de Cloudflare Workers: developers.cloudflare.com/workers/platform/pricing
- Oracle Cloud Free Tier: oracle.com/cloud/free
- Nivel gratuito de Google Cloud: cloud.google.com/free/docs/free-cloud-features
- Eventos programados de GitHub Actions: docs.github.com/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#schedule
- Fin de los planes gratuitos de Heroku: blog.heroku.com/next-chapter
- getWebhookInfo de Telegram: core.telegram.org/bots/api#getwebhookinfo