Saltar al contenido

Soluciones · Bots

Un VPS para un bot de Telegram

Un bot en reposo usa menos de cien megabytes y pasa la vida esperando, así que la máquina casi nunca es la limitación: U1-1 por $6.90 al mes ejecuta uno sin problemas. Lo que realmente decide su factura son los archivos multimedia y si ejecuta su propio servidor de Bot API. Ambas cosas son aritmética, y ambas están a continuación.

La decisión detrás de la decisión

Webhook o long polling

Esto, y no el plan, decide si su bot necesita un dominio, un certificado y un puerto abierto.

Long polling

Su bot se conecta a Telegram y espera actualizaciones. Sin dominio, sin certificado TLS, sin ningún puerto abierto a internet, y funciona detrás de NAT. Es la forma más rápida de poner algo en marcha y una solución permanente perfectamente válida para la mayoría de los bots.

Webhook

Telegram se conecta a usted. Necesita una dirección pública, un certificado válido y un puerto abierto (todo ello posible con cualquier plan de aquí) y, a cambio, no hay bucle de sondeo y escala mejor con carga real. Cambie cuando la carga o la latencia lo indiquen, no antes.

La aritmética

Cuántos bots admite realmente un plan

Bots = (RAM − 300 MB del sistema operativo) ÷ lo que ocupa un bot. Las dos columnas son un bot de comandos sin estado y uno con un ORM, un programador de tareas y una caché.

Capacidad de procesos de bot y asignación mensual de transferencia de cada plan, con precios en tiempo real
PlanRAMBots ligerosBots pesadosTransferenciaPrecioImplementar
U1-1Un bot, cualquier tamaño de público1 GB124Unmetered$6.90Implementar
C1-1-25Un bot, con tráfico medido pero barato1 GB1241 TB$9.90Implementar
GL2-4Varios bots, o un bot con base de datos4 GB6325Unmetered$11.90Implementar
BD-8Un servidor de Bot API propio8 GB1315232 TB$12.90Implementar

El número de usuarios de su bot no forma parte de esta aritmética, porque no forma parte del problema: Telegram entrega las actualizaciones a su proceso de una en una, en lugar de abrir una conexión por usuario. Lo que cambia la respuesta es el estado que usted mantiene: una caché grande, una base de datos en el proceso, un modelo.

La cifra que decide la factura

Multimedia, no memoria

Tamaño medio de archivo × mensajes al día × 30. Cuentan ambas direcciones: un archivo recibido también es tráfico.

Transferencia mensual por tipo de mensaje con cien, cinco mil y cincuenta mil mensajes al día
Lo que mueve el bot100/día5,000/día50,000/día
Solo textoUn comando y una respuesta. Prácticamente gratis.< 1 GB< 1 GB3 GB
FotosUna imagen comprimida, enviada y recibida.< 1 GB44 GB439 GB
Notas de voz y vídeos cortosLa carga habitual de un bot de comunidad.9 GB439 GB4.3 TB
Documentos y vídeo largoEl límite de descarga propio de Telegram para un bot normal.59 GB2.9 TB28.6 TB

Lo único que cambia la máquina

Un bot en la Bot API pública puede descargar archivos de hasta 20 MB y subir hasta 50 MB (límites de Telegram, no nuestros), y los archivos nunca tocan su disco. Si ejecuta su propio servidor de Bot API, el límite pasa a 2 GB y cada archivo llega a su servidor. Ahí es donde el disco y la transferencia dejan de ser secundarios: BD-8 le da 100 GB de SSD y 32 TB por $12.90, que es el perfil adecuado. Si no va a hacer eso, no pague por ello.

Con franqueza

Lo que realmente compraríamos

Nosotros mismos tenemos un bot de Telegram. Esta es la máquina en la que lo pondríamos.

Para un bot

U1-1 · $6.90/mes

1 núcleo, 1 GB, 15 GB SSD y sin medidor de tráfico: así, un bot que de forma inesperada empiece a mover contenido multimedia no puede generar una factura que no esperaba. Ponga el bot bajo systemd con Restart=always, y la única forma que le queda de caerse es su propio código. Si se le queda pequeño, mover un bot consiste en copiar un directorio y un token.

Preguntas

Lo que se pregunta antes de contratar uno.

¿Cuánta RAM necesita un bot de Telegram?
Mucho menos de lo que se suele vender. Un bot es un proceso de larga duración que pasa casi todo el tiempo esperando: un bot de comandos sin estado ronda los 60 MB, y uno con un ORM, un programador de tareas y una caché se acerca a 150 MB. Después de que el sistema operativo ocupe sus 300 MB aproximadamente, una máquina de 1 GB aún tiene espacio para 4 bots pesados o 12 ligeros. El número de USUARIOS apenas influye, porque Telegram entrega las actualizaciones una a una a su proceso, no una conexión por usuario. Lo que sí cambia la respuesta es el estado que usted mantiene en memoria: una caché grande, una base de datos en proceso, un modelo.
¿Webhook o long polling?
Long polling para empezar, webhooks cuando importe. Con long polling, su bot abre una conexión saliente hacia Telegram y espera: no necesita dominio, certificado ni puerto abierto, por lo que funciona detrás de NAT y es la forma más rápida de poner algo en marcha. Con un webhook es Telegram quien se conecta a USTED, así que necesita una dirección pública, un certificado TLS válido y un puerto abierto a internet; a cambio elimina por completo el bucle de sondeo y escala mejor cuando el bot tiene mucha actividad real. Ambos funcionan bien en la máquina más pequeña de aquí. El motivo honesto para cambiar es la carga o la latencia, no la moda.
¿Cuáles son los límites de tamaño de archivo?
Son límites de Telegram, no nuestros: un bot que usa la Bot API pública puede descargar archivos de hasta 20 MB y subir hasta 50 MB. Ejecutar su propio servidor de Bot API eleva ese límite a 2 GB y, lo que es más importante, hace que los archivos lleguen al disco de su servidor en lugar de pasar por el de Telegram. Ese es el único cambio que de verdad altera la máquina que necesita: de repente importan el disco y la transferencia, y por eso la tabla de arriba pone BD-8 en esa fila y no en las demás.
¿Me quedaré sin ancho de banda?
Un bot de texto, nunca. Un bot multimedia, posiblemente, y merece treinta segundos de aritmética: tamaño medio de archivo × mensajes al día × 30. Cincuenta mil notas de voz al día de 3 MB son unos 4.3 TB al mes, lo que supera la asignación de la mayoría de planes baratos y queda muy lejos de los 32 TB de BD-8, o de la línea sin medición de tráfico, donde la cuestión no se plantea. Cuentan ambas direcciones: un archivo que el bot recibe y uno que envía son tráfico.
¿Cómo mantengo el bot en ejecución cuando cierro el terminal?
Una unidad de systemd, no una sesión de screen. Escriba un pequeño archivo de servicio con Restart=always, habilítelo y el bot volverá tras un fallo y tras un reinicio sin que usted tenga que estar despierto. Es el motivo más habitual por el que un bot "se cae" en un VPS, y no es un problema de hosting: un proceso iniciado a mano muere con la sesión SSH que lo inició. Docker con una política de reinicio hace lo mismo si prefiere empaquetarlo así.
¿Puedo ejecutar varios bots en un servidor?
Sí, y la mayoría debería hacerlo. Cada uno es un proceso independiente con su propia unidad de systemd y su propio token; comparten la máquina, la base de datos si lo desea, y nada más. La aritmética de la tabla responde exactamente a esta pregunta: una máquina de 4 GB aloja 25 bots pesados antes de que la memoria sea el límite. Manténgalos en puertos y usuarios distintos si son para personas diferentes.
¿En qué región debe ejecutarse el bot?
En cualquier lugar al que lleguen sus usuarios y con una latencia razonable hacia Telegram: el bot se comunica con la infraestructura de Telegram, no directamente con sus usuarios, así que la regla habitual de "cerca de su público" importa menos aquí que para un sitio web. Si el bot también ofrece un panel web o una API a esos mismos usuarios, elija la región en función de eso. Si no está seguro, implemente por horas en dos regiones, mida y elimine la que pierda: $0.0113 por hora hace que sea un experimento barato.