Un bot Telegram lancé sur votre ordinateur s'arrête dès que vous le fermez. Sur un VPS, il tourne en continu, redémarre tout seul après une erreur et reste accessible depuis n'importe quel appareil. Ce guide part de zéro : création du bot, premier script en Python, mise en service permanente, choix entre polling et webhook, et bonnes pratiques de sécurité.
1. Créer le bot avec BotFather
- Dans Telegram, ouvrez une conversation avec @BotFather, le compte officiel.
- Envoyez
/newbot, puis choisissez un nom et un identifiant se terminant parbot. - BotFather vous donne un jeton. Il donne le contrôle total du bot : ne le publiez jamais et ne le mettez jamais dans un dépôt Git.
Si le jeton fuite, /revoke dans BotFather le remplace aussitôt.
2. Préparer le VPS
Un bot simple consomme très peu : 1 Go de RAM suffit largement au départ. Partez d'un VPS Debian ou Ubuntu sécurisé (voir les premiers pas et Debian ou Ubuntu). Créez un utilisateur dédié, sans droits d'administration :
apt update && apt install -y python3 python3-venv
adduser --disabled-password --gecos "" bot
su - bot
mkdir ~/monbot && cd ~/monbot
python3 -m venv venv
venv/bin/pip install python-telegram-bot
3. Le premier script
Créez ~/monbot/bot.py :
import os
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Bonjour, je tourne sur un VPS !")
app = Application.builder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
Le jeton est lu depuis une variable d'environnement et n'apparaît donc pas dans le code. Testez, puis arrêtez avec Ctrl+C :
BOT_TOKEN="VOTRE_JETON" venv/bin/python bot.py
Envoyez /start à votre bot dans Telegram : il doit répondre.
4. Le faire tourner en continu avec systemd
En root, placez le jeton dans un fichier lisible uniquement par root :
install -m 600 /dev/null /etc/monbot.env
echo 'BOT_TOKEN=VOTRE_JETON' > /etc/monbot.env
Créez ensuite /etc/systemd/system/monbot.service :
[Unit]
Description=Bot Telegram
After=network-online.target
Wants=network-online.target
[Service]
User=bot
WorkingDirectory=/home/bot/monbot
EnvironmentFile=/etc/monbot.env
ExecStart=/home/bot/monbot/venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Activez le service :
systemctl daemon-reload
systemctl enable --now monbot
systemctl status monbot
journalctl -u monbot -f # journal en direct
Le bot redémarre maintenant après une erreur et après un redémarrage du VPS. Après une modification du code : systemctl restart monbot. Pour un bot en Node.js, la même méthode fonctionne, et PM2 est une autre option courante.
5. Polling ou webhook ?
Telegram propose deux façons de recevoir les messages, et elles s'excluent mutuellement : tant qu'un webhook est configuré, getUpdates ne fonctionne pas.
| Critère | Polling (getUpdates) | Webhook (setWebhook) |
|---|---|---|
| Principe | Votre bot interroge Telegram | Telegram envoie chaque message à votre URL |
| Mise en place | Aucune, fonctionne d'emblée | Domaine ou IP avec HTTPS obligatoire |
| Ports à ouvrir | Aucun | 443, 80, 88 ou 8443 uniquement |
| Idéal pour | La plupart des bots | Les bots à fort trafic, ou intégrés à un site |
Commencez par le polling : il n'expose aucun port et convient très bien sur un VPS allumé en permanence. Si le bot est coupé, Telegram garde les messages en attente jusqu'à 24 heures. Pour passer au webhook, voir Nginx et SSL.
Conflict: terminated by other getUpdates request signifie que deux copies de votre bot tournent avec le même jeton, par exemple sur votre PC et sur le VPS. Arrêtez-en une.6. Sécurité et bonnes pratiques
- Limitez les commandes sensibles à votre identifiant Telegram :
if update.effective_user.id != MON_ID: return. - Ne faites jamais confiance aux messages reçus : validez ce que les utilisateurs envoient, surtout si le bot exécute une action sur le serveur ou interroge une base de données.
- Déployez avec Git et ajoutez vos fichiers de secrets à
.gitignore. - Mettez à jour le système et les dépendances, et activez le pare-feu.
- Sauvegardez vos données si le bot utilise une base SQLite ou un dossier de fichiers. Voir les sauvegardes avec Borg.
7. Quel VPS selon votre bot
| Type de bot | RAM |
|---|---|
| Commandes simples, notifications, alertes | 1 à 2 Go |
| Avec base de données, plusieurs milliers d'utilisateurs | 2 à 4 Go |
| Traitement d'images ou de fichiers, plusieurs bots | 4 à 8 Go |
| Modèle d'IA local via Ollama | 8 Go et plus |
Un même VPS peut héberger plusieurs bots : créez un service par bot, chacun avec son propre jeton. Consultez nos VPS Linux NVMe. Vous développez plutôt pour Discord ? Voir la page VPS pour bot Discord.
Questions fréquentes
Faut-il un VPS pour héberger un bot Telegram ?
Pas pour tester : votre ordinateur suffit. Pour un bot disponible en permanence, il faut une machine toujours allumée et connectée, ce qu'apporte un VPS.
Combien de RAM pour un bot Telegram ?
1 Go suffit pour un bot simple. Prévoyez davantage si vous ajoutez une base de données, du traitement de fichiers ou plusieurs bots sur le même serveur.
Dois-je ouvrir un port sur mon VPS ?
Non en polling, car c'est votre bot qui contacte Telegram. En webhook, un port HTTPS parmi 443, 80, 88 et 8443 doit être accessible.
Mon bot perd-il des messages pendant une coupure ?
Telegram conserve les messages en attente jusqu'à 24 heures. Le bot les récupère à son redémarrage si la coupure ne dépasse pas ce délai.
Que faire si mon jeton a fuité ?
Envoyez /revoke à BotFather pour générer un nouveau jeton, puis mettez-le à jour dans votre fichier d'environnement et redémarrez le service.










