Vai al contenuto

Soluzioni · Bot

Un VPS per un bot Telegram

Un bot a riposo usa meno di cento megabyte e passa la vita ad aspettare, quindi la macchina non è quasi mai il vincolo: U1-1 a $6.90 al mese ne esegue uno senza problemi. Ciò che decide davvero la fattura sono i contenuti multimediali, e se eseguite un vostro server Bot API. Entrambi sono questione di calcolo, ed entrambi sono qui sotto.

La decisione dietro la decisione

Webhook o long polling

È questo, non il piano, a decidere se il vostro bot ha bisogno di un dominio, di un certificato e di una porta aperta.

Long polling

Il vostro bot si connette in uscita a Telegram e attende gli aggiornamenti. Nessun dominio, nessun certificato TLS, nessuna porta aperta verso internet, funziona dietro NAT. È il modo più rapido per avere qualcosa in funzione ed è una soluzione definitiva perfettamente valida per la maggior parte dei bot.

Webhook

Telegram si connette a voi. Servono un indirizzo pubblico, un certificato valido e una porta aperta, tutte cose che ogni piano qui consente; in cambio non c'è ciclo di polling e si scala meglio sotto carico reale. Passate quando lo richiedono il carico o la latenza, non prima.

Il calcolo

Quanti bot regge davvero un piano

Bot = (RAM − 300 MB di sistema operativo) ÷ quanto occupa un bot. Le due colonne sono un bot di comandi stateless e uno con ORM, scheduler e cache.

Capacità di processi bot e traffico mensile incluso per ogni piano, con prezzi in tempo reale
PianoRAMBot leggeriBot pesantiTrafficoPrezzoAttiva
U1-1Un bot, pubblico di qualsiasi dimensione1 GB124Unmetered$6.90Attiva
C1-1-25Un bot, traffico conteggiato ma economico1 GB1241 TB$9.90Attiva
GL2-4Più bot, o un bot con database4 GB6325Unmetered$11.90Attiva
BD-8Un server Bot API self-hosted8 GB1315232 TB$12.90Attiva

Il numero di utenti del vostro bot non rientra in questo calcolo, perché non fa parte del problema: Telegram consegna gli aggiornamenti al vostro processo uno alla volta invece di aprire una connessione per utente. Ciò che cambia la risposta è lo stato che mantenete voi: una cache grande, un database in-process, un modello.

Il numero che decide la fattura

Contenuti multimediali, non memoria

Dimensione media dei file × messaggi al giorno × 30. Contano entrambe le direzioni: anche un file ricevuto è traffico.

Traffico mensile per tipo di messaggio a cento, cinquemila e cinquantamila messaggi al giorno
Cosa trasferisce il bot100/giorno5,000/giorno50,000/giorno
Solo testoUn comando e una risposta. Praticamente gratis.< 1 GB< 1 GB3 GB
FotoUn'immagine compressa, inviata e ricevuta.< 1 GB44 GB439 GB
Messaggi vocali e brevi videoIl carico abituale di un bot per community.9 GB439 GB4.3 TB
Documenti e video lunghiIl limite di download di Telegram per un bot standard.59 GB2.9 TB28.6 TB

L'unica cosa che cambia la macchina

Un bot sulla Bot API pubblica può scaricare file fino a 20 MB e caricarne fino a 50 MB (limiti di Telegram, non nostri), e i file non toccano mai il vostro disco. Con un vostro server Bot API il limite diventa 2 GB e ogni file arriva sul vostro server. È il punto in cui disco e traffico smettono di essere marginali: BD-8 vi offre 100 GB di SSD e 32 TB per $12.90, il profilo adatto. Se non lo fate, non pagatelo.

Onestamente

Cosa acquisteremmo davvero

Anche noi gestiamo un bot Telegram. Questa è la macchina su cui lo metteremmo.

Per un bot

U1-1 · $6.90/mese

1 core, 1 GB, 15 GB SSD e nessun contatore del traffico: così un bot che inizia inaspettatamente a trasferire media non può generare una fattura imprevista. Mettete il bot sotto systemd con Restart=always e l'unico modo rimasto perché si fermi è il vostro codice. Se vi va stretta, spostare un bot significa copiare una directory e un token.

Domande

Le domande che si pongono prima dell'acquisto.

Quanta RAM serve a un bot Telegram?
Molto meno di quanto si venda di solito. Un bot è un processo di lunga durata che passa quasi tutto il tempo ad aspettare: un bot di comandi stateless occupa circa 60 MB, e uno con ORM, scheduler e cache si avvicina a 150 MB. Dopo i circa 300 MB del sistema operativo, una macchina da 1 GB ha ancora spazio per 4 bot pesanti o 12 leggeri. Il numero di UTENTI incide appena, perché Telegram consegna gli aggiornamenti al vostro processo uno alla volta, non una connessione per utente. Ciò che cambia la risposta è lo stato che tenete voi in memoria: una cache grande, un database in-process, un modello.
Webhook o long polling?
Long polling per iniziare, webhook quando serve. Con il long polling il bot apre una connessione in uscita verso Telegram e attende: non servono dominio, certificato né porta aperta, quindi funziona dietro NAT ed è il modo più rapido per partire. Con un webhook è Telegram a connettersi a VOI, quindi servono un indirizzo pubblico, un certificato TLS valido e una porta aperta su internet; in cambio si elimina del tutto il ciclo di polling e si scala meglio quando il bot è davvero molto attivo. Entrambi funzionano bene sulla macchina più piccola qui. Il motivo onesto per passare è il carico o la latenza, non la moda.
Quali sono i limiti di dimensione dei file?
Sono limiti di Telegram, non nostri: un bot che usa la Bot API pubblica può scaricare file fino a 20 MB e caricarne fino a 50 MB. Gestire un proprio server Bot API porta il limite a 2 GB e, soprattutto, fa sì che i file arrivino sul disco del vostro server invece di passare per quello di Telegram. È l'unico cambiamento che modifica davvero la macchina di cui avete bisogno: di colpo disco e traffico contano, ed è per questo che la tabella qui sopra abbina BD-8 a quella riga e non alle altre.
Esaurirò la banda?
Un bot testuale, mai. Un bot multimediale, forse, e vale trenta secondi di calcolo: dimensione media dei file × messaggi al giorno × 30. Cinquantamila note vocali al giorno da 3 MB fanno circa 4.3 TB al mese, oltre la soglia della maggior parte dei piani economici e lontano dai 32 TB di BD-8, o dalla linea Unmetered, dove la questione non si pone. Contano entrambe le direzioni: un file che il bot riceve e uno che invia sono entrambi traffico.
Come mantengo il bot attivo dopo aver chiuso il terminale?
Un'unità systemd, non una sessione screen. Scrivete un piccolo file di servizio con Restart=always, abilitatelo, e il bot si riavvia dopo un crash e dopo un reboot senza che dobbiate essere svegli. È il motivo più comune per cui un bot "va giù" su un VPS, e non è un problema di hosting: un processo avviato a mano muore con la sessione SSH che lo ha avviato. Docker con una restart policy fa lo stesso lavoro, se preferite pacchettizzarlo così.
Posso eseguire più bot su un solo server?
Sì, e la maggior parte dovrebbe farlo. Ognuno è un processo separato con la propria unit systemd e il proprio token; condividono la macchina, il database se volete, e nient'altro. Il calcolo nella tabella risponde esattamente a questa domanda: una macchina da 4 GB ospita 25 bot pesanti prima che la memoria diventi il limite. Teneteli su porte e utenti separati se sono per persone diverse.
In quale regione dovrebbe girare il bot?
Ovunque i vostri utenti possano arrivare e la latenza verso Telegram sia ragionevole: il bot comunica con l'infrastruttura di Telegram, non direttamente con gli utenti, quindi la solita regola del "vicino al pubblico" conta meno che per un sito web. Se il bot serve anche una dashboard web o un'API agli stessi utenti, scegliete la regione in base a quello. Se non siete sicuri, attivate a ore in due regioni, misurate ed eliminate quella che perde: $0.0113 l'ora rende l'esperimento economico.