Aller au contenu

Solutions · Bots

Un VPS pour un bot Telegram

Un bot au repos consomme moins d’une centaine de mégaoctets et passe sa vie à attendre : la machine n’est donc presque jamais la contrainte, et U1-1 à $6.90 par mois en fait tourner un correctement. Ce qui décide vraiment de votre facture, ce sont les médias, et le fait d’exécuter ou non votre propre serveur Bot API. Les deux relèvent du calcul, et les deux sont détaillés ci-dessous.

La décision derrière la décision

Webhook ou long polling

C’est cela, et non l’offre, qui détermine si votre bot a besoin d’un domaine, d’un certificat et d’un port ouvert.

Long polling

Votre bot se connecte à Telegram et attend les mises à jour. Pas de domaine, pas de certificat TLS, aucun port ouvert sur Internet, fonctionne derrière un NAT. C’est le moyen le plus rapide de faire tourner quelque chose, et c’est une solution permanente tout à fait valable pour la plupart des bots.

Webhook

Telegram se connecte à vous. Il faut une adresse publique, un certificat valide et un port ouvert, ce que permet n’importe quelle offre ici ; en échange, il n’y a pas de boucle de polling et la montée en charge est meilleure sous une vraie charge. Passez-y quand la charge ou la latence l’exige, pas avant.

Le calcul

Combien de bots une offre peut réellement accueillir

Bots = (RAM − 300 MB pour le système d’exploitation) ÷ ce qu’occupe un bot. Les deux colonnes correspondent à un bot de commandes sans état et à un bot avec un ORM, un planificateur et un cache.

Capacité en processus de bot et forfait de transfert mensuel pour chaque offre, avec les prix en temps réel
OffreRAMBots légersBots lourdsTransfertPrixDéployer
U1-1Un bot, quelle que soit la taille de l’audience1 GB124Unmetered$6.90Déployer
C1-1-25Un bot, trafic compté mais bon marché1 GB1241 TB$9.90Déployer
GL2-4Plusieurs bots, ou un bot avec une base de données4 GB6325Unmetered$11.90Déployer
BD-8Un serveur Bot API auto-hébergé8 GB1315232 TB$12.90Déployer

Le nombre d’utilisateurs de votre bot n’entre pas dans ce calcul, car il n’entre pas dans le problème : Telegram transmet les mises à jour à votre processus une par une, au lieu d’ouvrir une connexion par utilisateur. Ce qui change la réponse, c’est l’état que vous conservez vous-même : un gros cache, une base de données intégrée au processus, un modèle.

Le chiffre qui détermine la facture

Les médias, pas la mémoire

Taille moyenne des fichiers × messages par jour × 30. Les deux sens comptent : un fichier reçu est aussi du trafic.

Transfert mensuel par type de message, à cent, cinq mille et cinquante mille messages par jour
Ce que le bot transfère100/jour5,000/jour50,000/jour
Texte uniquementUne commande et une réponse. Quasiment rien.< 1 GB< 1 GB3 GB
PhotosUne image compressée, envoyée et reçue.< 1 GB44 GB439 GB
Messages vocaux et courtes vidéosLa charge habituelle d’un bot communautaire.9 GB439 GB4.3 TB
Documents et vidéos longuesLe plafond de téléchargement propre à Telegram pour un bot standard.59 GB2.9 TB28.6 TB

La seule chose qui change la machine

Un bot sur la Bot API publique peut télécharger des fichiers jusqu’à 20 MB et en envoyer jusqu’à 50 MB (limites de Telegram, pas les nôtres), et les fichiers ne touchent jamais votre disque. Exécutez votre propre serveur Bot API et le plafond passe à 2 GB, chaque fichier arrivant sur votre serveur. C’est là que le disque et le transfert cessent d’être accessoires : BD-8 vous offre 100 GB de SSD et 32 TB pour $12.90, le profil qui convient. Si vous ne faites pas cela, ne payez pas pour.

En toute franchise

Ce que nous achèterions vraiment

Nous faisons tourner nous-mêmes un bot Telegram. Voici la machine sur laquelle nous le mettrions.

Pour un bot

U1-1 · $6.90/mois

1 cœur, 1 GB, 15 GB SSD, et aucun compteur de trafic : un bot qui se met soudain à transférer des médias ne peut pas générer une facture inattendue. Placez le bot sous systemd avec Restart=always, et la seule façon restante pour qu’il tombe, c’est votre propre code. Si vous le dépassez, déplacer un bot revient à copier un répertoire et un jeton.

Questions

Les questions posées avant l’achat.

De combien de RAM un bot Telegram a-t-il besoin ?
Bien moins qu’on ne le vend habituellement. Un bot est un processus de longue durée qui passe presque tout son temps à attendre : un bot de commandes sans état occupe environ 60 MB, et un bot avec un ORM, un planificateur et un cache plutôt 150 MB. Une fois que le système d’exploitation a pris ses 300 MB environ, une machine de 1 GB a encore de la place pour 4 bots lourds ou 12 bots légers. Le nombre d’UTILISATEURS n’y change presque rien, car Telegram transmet les mises à jour une par une à votre processus, et non par une connexion par utilisateur. Ce qui change la réponse, c’est l’état que vous gardez vous-même en mémoire : un gros cache, une base de données dans le processus, un modèle.
Webhook ou long polling ?
Le long polling pour commencer, les webhooks quand cela compte. Avec le long polling, votre bot ouvre une connexion sortante vers Telegram et attend : il n’a besoin ni de domaine, ni de certificat, ni de port ouvert, ce qui lui permet de fonctionner derrière un NAT et en fait le moyen le plus rapide de démarrer. Avec un webhook, c’est Telegram qui se connecte à VOUS : il faut donc une adresse publique, un certificat TLS valide et un port ouvert sur Internet ; en échange, la boucle de polling disparaît entièrement et la montée en charge est meilleure quand le bot est réellement sollicité. Les deux fonctionnent bien sur la plus petite machine proposée ici. La vraie raison de changer, c’est la charge ou la latence, pas la mode.
Quelles sont les limites de taille de fichier ?
Ce sont les limites de Telegram, pas les nôtres : un bot qui utilise la Bot API publique peut télécharger des fichiers jusqu’à 20 MB et en envoyer jusqu’à 50 MB. Faire tourner votre propre serveur Bot API porte cette limite à 2 GB et, surtout, fait arriver les fichiers sur le disque de votre serveur au lieu de passer par celui de Telegram. C’est le seul changement qui modifie réellement la machine dont vous avez besoin : le disque et le transfert comptent soudain, et c’est pourquoi le tableau ci-dessus place BD-8 face à cette ligne et non face aux autres.
Vais-je manquer de bande passante ?
Un bot texte, jamais. Un bot multimédia, peut-être, et cela vaut trente secondes de calcul : taille moyenne des fichiers × messages par jour × 30. Cinquante mille notes vocales par jour à 3 MB représentent environ 4.3 TB par mois, au-delà du forfait de la plupart des offres bon marché et bien loin des 32 TB de BD-8, ou de la gamme Unmetered, où la question ne se pose pas. Les deux sens comptent : un fichier reçu par votre bot et un fichier qu’il envoie sont tous deux du trafic.
Comment garder le bot actif après avoir fermé le terminal ?
Une unité systemd, pas une session screen. Écrivez un petit fichier de service avec Restart=always, activez-le, et le bot redémarre après un plantage et après un reboot sans que vous ayez à être réveillé. C’est la raison la plus fréquente pour laquelle un bot « tombe » sur un VPS, et ce n’est pas un problème d’hébergement : un processus lancé à la main meurt avec la session SSH qui l’a lancé. Docker avec une politique de redémarrage fait le même travail si vous préférez l’empaqueter ainsi.
Puis-je faire tourner plusieurs bots sur un serveur ?
Oui, et c’est ce que la plupart des gens devraient faire. Chacun est un processus distinct avec sa propre unité systemd et son propre jeton ; ils partagent la machine, la base de données si vous le souhaitez, et rien d’autre. Le calcul du tableau répond exactement à cette question : une machine de 4 GB accueille 25 bots lourds avant que la mémoire ne devienne la contrainte. Placez-les sur des ports et des utilisateurs distincts s’ils sont destinés à des personnes différentes.
Dans quelle région le bot doit-il tourner ?
N’importe où, tant que vos utilisateurs peuvent y accéder et que votre latence vers Telegram est raisonnable : le bot dialogue avec l’infrastructure de Telegram, pas directement avec vos utilisateurs, donc la règle habituelle « près de votre audience » compte moins ici que pour un site web. Si le bot sert aussi un tableau de bord web ou une API à ces mêmes utilisateurs, choisissez plutôt la région en fonction de cela. En cas de doute, déployez à l’heure dans deux régions, mesurez et supprimez celle qui perd : à $0.0113 de l’heure, l’expérience coûte peu.