Déplacer un bot Telegram depuis PythonAnywhere, Replit, Railway ou votre PC, c’est copier ses fichiers, coller le même token, le passer au polling s’il utilisait un webhook, et le démarrer ici une fois l’ancienne copie arrêtée. Le token reste le même : le bot garde donc son @nom d’utilisateur, ses discussions et ses utilisateurs. Les étapes :
- Prenez une offre bot configurée pour Telegram, avec le langage dans lequel votre bot est écrit.
- Copiez vos fichiers dans Files (zip, téléversement, Extraire), en SFTP, ou depuis Git, avec
requirements.txtoupackage.json. - Réglez le Fichier d’entrée et le Runtime sur la page Bot, volet Code.
- Collez le token sur la page Bot, volet Telegram, et cliquez sur Connecter.
- Importez vos autres paramètres avec Coller un fichier .env dans le volet Environnement.
- Si votre bot utilisait un webhook, passez-le au polling.
- Arrêtez l’ancienne copie, appuyez sur Démarrer ici, et surveillez la Console jusqu’à ce que votre bot se connecte.
Chaque étape est expliquée plus bas.
Avant de commencer
- Rassemblez le code du bot et ses fichiers de données (fichiers SQLite, fichiers JSON, paramètres enregistrés) dans un seul dossier. Depuis un hébergeur, téléchargez-les en zip ou copiez-les depuis son explorateur de fichiers.
- Notez tous les paramètres que l’ancien hébergeur donnait à votre bot : son fichier
.envou les variables que vous avez définies dans son tableau de bord. - Prévoyez d’arrêter l’ancienne copie juste avant de démarrer la nouvelle. Telegram n’autorise qu’une seule copie d’un bot à demander des messages : deux copies se chassent l’une l’autre avec
409 Conflict.
1. Prendre une offre configurée pour Telegram
Sur hébergement de bot Telegram, cliquez sur Créer un serveur sur une offre, répondez Pour quelle plateforme est votre bot ? par Telegram, et choisissez le langage de votre bot : Node.js, Python, Java, C# (.NET), Bun, Deno, Go ou Rust. STARTER (0.5 GB) suffit pour la plupart des bots : voyez python-telegram-bot vs aiogram sur PlayNHost pour la mémoire que nous avons mesurée.
Vous avez déjà une offre bot configurée pour Discord ? Sur la page Bot, volet Discord, carte À quoi sert ce bot ?, choisissez Telegram et confirmez avec Basculer. Mauvais langage ? Dans le volet Code, cliquez sur Changer ce qui tourne à côté de Runtime.
2. Copier les fichiers
- Petit bot : compressez le dossier en zip, téléversez le zip dans Files, cochez-le et cliquez sur Extraire.
- Gros dossier : utilisez le SFTP. Infos SFTP dans Files donne l’adresse ; vous vous connectez avec votre mot de passe du panel.
- Code sur GitHub : connectez plutôt le dépôt, et ne téléversez que vos fichiers de données. Voir Comment déployer et mettre à jour votre bot depuis GitHub.
Laissez de côté venv, .venv, __pycache__ et node_modules : le serveur installe lui-même les paquets. Votre dossier principal ici est /home/container. Si votre code ouvre des fichiers de données avec un chemin complet de l’ancien hébergeur (comme /home/yourname/mybot/data.db), remplacez-le par un chemin relatif au dossier principal. Plus de détails : Comment téléverser le code de votre bot.
3. Paquets et fichier d’entrée
Sur l’ancien hébergeur, vous avez peut-être installé les paquets à la main dans une console. Ici, ils viennent d’un fichier :
- Python : un
requirements.txtavec un paquet par ligne, par exemplepython-telegram-botouaiogram. Écrivez-y les noms des paquets que votre code importe. Un autre nom de fichier ou un dossier ? Réglez-le sous Fichier de dépendances dans la carte Paramètres du volet Code. - Node.js et Bun : votre
package.jsonavec sesdependencies.
En Python, Node.js et Bun, les paquets s’installent au premier démarrage. Ensuite, ils ne s’installent à nouveau que lorsque vous les modifiez (la liste des paquets, le fichier de paquets ou la version du runtime), lorsque node_modules est absent, ou une fois par jour. Entre-temps, la Console indique :
[PlayNHost] Packages are up to date. They install again when you change them, or after a day.
Sur la page Bot, volet Code, carte Comment il tourne, réglez Fichier d’entrée sur le fichier que votre ancien hébergeur démarrait (par exemple main.py ou src/index.js ; bot.py et index.js sont les valeurs par défaut) et choisissez la même version de Runtime. Cliquez sur le bouton Enregistrer à côté de chaque champ que vous modifiez. Détails par langage : Python, Node.js.
4. Le token
- Sur la page Bot, volet Telegram, collez le token du bot et cliquez sur Connecter. Le panel le vérifie auprès de Telegram et affiche le @nom d’utilisateur de votre bot. Vous l’avez perdu ? Dans @BotFather, envoyez
/mybots, choisissez votre bot, puis API Token. - Votre code reçoit le token sous le nom
TELEGRAM_BOT_TOKEN, et aussi sousBOT_TOKEN,TOKEN,TELEGRAM_TOKENetTELOXIDE_TOKEN. Si votre code lit un autre nom, remplacez cette ligne par l’un de ceux-là. - Si le token est écrit dans votre code ou dans un
config.json, remplacez-le par la variable d’environnement, par exempleos.environ["TELEGRAM_BOT_TOKEN"]en Python ouprocess.env.TELEGRAM_BOT_TOKENen Node.js. Supprimez-le de tout fichier.envque vous avez téléversé.
5. Les autres paramètres
- Ouvrez le volet Environnement et cliquez sur Coller un fichier .env.
- Collez votre ancien
.envou les variables du tableau de bord de votre ancien hébergeur. La ligne du token est marquée Ignorée, avec Votre token Telegram se saisit sur la page Bot, Telegram, donc cette ligne est ignorée. Votre code le lit sous le nom TELEGRAM_BOT_TOKEN, et aussi sous BOT_TOKEN, TOKEN, TELEGRAM_TOKEN et TELOXIDE_TOKEN. - Vérifiez la liste (les noms qui ressemblent à des secrets reçoivent un badge Secret) et cliquez sur le bouton d’importation, par exemple Importer 3 variables.
Vous utilisez python-dotenv ? Les variables d’Environnement sont déjà dans os.environ, et load_dotenv() ne les écrase pas. Vous aviez une base de données MySQL ? Créez-en une sur la page Bases de données : Comment utiliser une base de données avec votre bot.
6. Du webhook au polling
Certains hébergeurs font tourner un bot avec un webhook, par exemple via une application web sur PythonAnywhere. Ici, votre bot utilise le long polling : il demande à Telegram les nouveaux messages et n’a besoin d’aucune adresse. Un webhook a besoin d’une adresse HTTPS publique, que ces offres n’incluent pas encore. Modifiez le démarrage de votre bot :
| Bibliothèque | À retirer | À utiliser |
|---|---|---|
| python-telegram-bot | application.run_webhook(...) | application.run_polling() |
| aiogram 3 | L’application web aiohttp avec SimpleRequestHandler | await dp.start_polling(bot) |
| pyTelegramBotAPI | bot.set_webhook(...) et la route Flask | bot.infinity_polling() |
| grammY | webhookCallback(bot, ...) | bot.start() |
| Telegraf | bot.launch({ webhook: ... }) | bot.launch() |
Un petit serveur web qui servait seulement à garder le bot éveillé chez l’ancien hébergeur n’est pas nécessaire ici : le bot tourne en permanence.
Le webhook reste défini sur votre bot chez Telegram tant que rien ne le retire. python-telegram-bot et grammY le retirent eux-mêmes au démarrage du polling. Avec un autre code, le volet Telegram affiche Un webhook est défini sur ce bot : cliquez sur Retirer le webhook et confirmez. Les messages en attente sont gardés : votre bot les récupère ici.
7. Basculer
- Arrêtez le bot chez l’ancien hébergeur : une tâche toujours active ou planifiée sur PythonAnywhere, un déploiement sur Replit ou Railway, ou la fenêtre de terminal ou le script sur votre PC.
- Appuyez sur Démarrer ici et surveillez la Console jusqu’à ce que votre bot se connecte. Affichez une ligne comme
Logged in as @your_botquand il est prêt : la pastille de l’Aperçu passe alors à En ligne sur Telegram. - Envoyez une commande à votre bot dans Telegram. Résiliez ensuite l’ancien hébergeur.
Si quelque chose ne fonctionne pas
- Votre bot tourne aussi ailleurs au-dessus de la console : l’ancienne copie tourne encore. Arrêtez-la, puis redémarrez ici. Voir Corriger l’erreur 409 Conflict d’un bot Telegram.
- Un webhook est défini sur votre bot : cliquez sur Retirer le webhook, puis redémarrez.
- Un mauvais nom de fichier, un mauvais langage ou un paquet manquant apparaît dans les premières secondes de la console, souvent sous forme de bandeau. Voir Pourquoi votre bot s’arrête sans cesse.
- Le bot démarre mais a perdu ses données : vérifiez que les fichiers de données ont gardé la même arborescence, et que votre code les ouvre avec un chemin relatif à
/home/container.



