Einen Telegram-Bot von PythonAnywhere, Replit, Railway oder deinem PC umzuziehen heißt: seine Dateien kopieren, denselben Token einfügen, ihn auf Polling umstellen, falls er einen Webhook nutzte, und ihn hier starten, sobald die alte Kopie gestoppt ist. Der Token bleibt gleich, also behält der Bot seinen @Benutzernamen, seine Chats und seine Nutzer. Die Schritte:
- Besorg dir einen Bot-Tarif, der für Telegram eingerichtet ist, mit der Sprache, in der dein Bot geschrieben ist.
- Kopier deine Dateien unter Files (zippen, hochladen, Entpacken), per SFTP oder aus Git, mit
requirements.txtoderpackage.json. - Setz Startdatei und Laufzeitumgebung auf der Bot-Seite im Bereich Code.
- Füg den Token auf der Bot-Seite im Bereich Telegram ein und klick auf Verbinden.
- Importier deine anderen Einstellungen mit Eine .env-Datei einfügen im Bereich Umgebung.
- Wenn dein Bot einen Webhook nutzte, stell ihn auf Polling um.
- Stopp die alte Kopie, drück hier auf Starten und beobachte die Console, bis sich dein Bot anmeldet.
Jeder Schritt wird unten erklärt.
Bevor du anfängst
- Sammle den Code des Bots und seine Datendateien (SQLite-Dateien, JSON-Dateien, gespeicherte Einstellungen) in einem Ordner. Von einem Host lädst du sie als Zip herunter oder kopierst sie aus seinem Dateibrowser.
- Notier jede Einstellung, die der alte Host deinem Bot gegeben hat: seine
.env-Datei oder die Variablen, die du in seinem Dashboard gesetzt hast. - Plane, die alte Kopie direkt vor dem Start der neuen zu stoppen. Telegram lässt nur eine Kopie eines Bots Nachrichten abrufen: Zwei Kopien verdrängen sich mit
409 Conflictgegenseitig.
1. Einen Tarif für Telegram besorgen
Klick auf Telegram-Bot-Hosting bei einem Tarif auf Server erstellen, beantworte Wofür ist dein Bot? mit Telegram und wähl die Sprache deines Bots: Node.js, Python, Java, C# (.NET), Bun, Deno, Go oder Rust. STARTER (0,5 GB) reicht für die meisten Bots: Den Arbeitsspeicher, den wir gemessen haben, findest du unter python-telegram-bot vs aiogram bei PlayNHost.
Du hast schon einen Bot-Tarif, der für Discord eingerichtet ist? Wähl auf der Bot-Seite im Bereich Discord in der Karte Wofür ist dieser Bot? die Option Telegram und bestätige mit Wechseln. Falsche Sprache? Klick im Bereich Code neben Laufzeitumgebung auf Ändern, was läuft.
2. Die Dateien kopieren
- Kleiner Bot: Pack den Ordner in eine Zip-Datei, lad sie unter Files hoch, hak sie an und klick auf Entpacken.
- Großer Ordner: Nutz SFTP. SFTP-Zugangsdaten unter Files nennt dir die Adresse; du meldest dich mit deinem Panel-Passwort an.
- Code auf GitHub: Verbinde stattdessen das Repository und lad nur deine Datendateien hoch. Lies dazu So deployst und aktualisierst du deinen Bot von GitHub.
Lass venv, .venv, __pycache__ und node_modules weg: Der Server installiert die Pakete selbst. Dein Hauptordner hier ist /home/container. Wenn dein Code Datendateien über einen vollständigen Pfad vom alten Host öffnet (etwa /home/yourname/mybot/data.db), ändere ihn in einen Pfad relativ zum Hauptordner. Mehr: Den Code deines Bots hochladen.
3. Pakete und Startdatei
Beim alten Host hast du Pakete vielleicht von Hand in einer Console installiert. Hier kommen sie aus einer Datei:
- Python: eine
requirements.txtmit einem Paket pro Zeile, zum Beispielpython-telegram-botoderaiogram. Trag die Namen der Pakete ein, die dein Code importiert. Anderer Dateiname oder Ordner? Stell ihn unter Requirements-Datei in der Karte Einstellungen im Bereich Code ein. - Node.js und Bun: deine
package.jsonmit ihrendependencies.
Unter Python, Node.js und Bun werden die Pakete beim ersten Start installiert. Danach werden sie nur noch neu installiert, wenn du sie änderst (die Paketliste, die Paketdatei oder die Version der Laufzeitumgebung), wenn node_modules fehlt oder einmal am Tag. Dazwischen sagt die Console:
[PlayNHost] Packages are up to date. They install again when you change them, or after a day.
Setz auf der Bot-Seite im Bereich Code in der Karte So läuft er die Startdatei auf die Datei, die dein alter Host gestartet hat (zum Beispiel main.py oder src/index.js; bot.py und index.js sind die Standardwerte), und wähl dieselbe Laufzeitumgebung-Version. Klick auf den Button Speichern neben jedem Feld, das du änderst. Einzelheiten je Sprache: Python, Node.js.
4. Der Token
- Füg den Token des Bots auf der Bot-Seite im Bereich Telegram ein und klick auf Verbinden. Das Panel prüft ihn bei Telegram und zeigt den @Benutzernamen deines Bots. Token verloren? Sende @BotFather
/mybots, wähl deinen Bot und dann API Token. - Dein Code bekommt den Token als
TELEGRAM_BOT_TOKENund auch alsBOT_TOKEN,TOKEN,TELEGRAM_TOKENundTELOXIDE_TOKEN. Liest dein Code einen anderen Namen, ändere diese Zeile in einen dieser Namen. - Steht der Token in deinem Code oder in einer
config.json, ersetze ihn durch die Umgebungsvariable, zum Beispielos.environ["TELEGRAM_BOT_TOKEN"]in Python oderprocess.env.TELEGRAM_BOT_TOKENin Node.js. Lösch ihn aus jeder.env-Datei, die du hochgeladen hast.
5. Die anderen Einstellungen
- Öffne den Bereich Umgebung und klick auf Eine .env-Datei einfügen.
- Füg deine alte
.envein oder die Variablen aus dem Dashboard deines alten Hosts. Die Token-Zeile ist mit Übersprungen markiert, dazu steht Dein Telegram-Token kommt auf die Bot-Seite unter Telegram, deshalb wird diese Zeile übersprungen. Dein Code liest ihn als TELEGRAM_BOT_TOKEN und auch als BOT_TOKEN, TOKEN, TELEGRAM_TOKEN und TELOXIDE_TOKEN. - Prüf die Liste (Namen, die nach Secrets aussehen, bekommen ein Secret-Badge) und klick auf den Import-Button, zum Beispiel 3 Variablen importieren.
Du nutzt python-dotenv? Variablen aus Umgebung stehen schon in os.environ, und load_dotenv() überschreibt sie nicht. Hattest du eine MySQL-Datenbank? Erstelle eine auf der Seite Datenbanken: So nutzt du eine Datenbank mit deinem Bot.
6. Von Webhook zu Polling
Manche Hosts betreiben einen Bot über einen Webhook, zum Beispiel mit einer Web-App auf PythonAnywhere. Hier nutzt dein Bot Long Polling: Er fragt Telegram nach neuen Nachrichten und braucht keine eigene Adresse. Ein Webhook braucht eine öffentliche HTTPS-Adresse, die diese Tarife noch nicht enthalten. Ändere den Start deines Bots:
| Bibliothek | Entfernen | Nutzen |
|---|---|---|
| python-telegram-bot | application.run_webhook(...) | application.run_polling() |
| aiogram 3 | Die aiohttp-Web-App mit SimpleRequestHandler | await dp.start_polling(bot) |
| pyTelegramBotAPI | bot.set_webhook(...) und die Flask-Route | bot.infinity_polling() |
| grammY | webhookCallback(bot, ...) | bot.start() |
| Telegraf | bot.launch({ webhook: ... }) | bot.launch() |
Einen kleinen Webserver, der beim alten Host nur den Bot wachhielt, brauchst du hier nicht: Der Bot läuft die ganze Zeit.
Der Webhook bleibt bei Telegram für deinen Bot gesetzt, bis ihn etwas entfernt. python-telegram-bot und grammY entfernen ihn selbst, wenn das Polling startet. Bei anderem Code zeigt der Bereich Telegram Für diesen Bot ist ein Webhook gesetzt: Klick auf Webhook entfernen und bestätige. Die wartenden Nachrichten bleiben erhalten, dein Bot ruft sie also hier ab.
7. Umschalten
- Stopp den Bot beim alten Host: eine Always-on-Aufgabe oder geplante Aufgabe auf PythonAnywhere, ein Deployment auf Replit oder Railway oder das Terminalfenster oder Skript auf deinem PC.
- Drück hier auf Starten und beobachte die Console, bis sich dein Bot anmeldet. Gib eine Zeile wie
Logged in as @your_botaus, wenn er bereit ist: Das Label auf der Übersicht wechselt dann zu Online in Telegram. - Sende deinem Bot einen Befehl in Telegram. Kündige dann den alten Host.
Wenn etwas nicht funktioniert
- Dein Bot läuft auch noch woanders über der Console: Die alte Kopie läuft noch. Stopp sie und starte dann hier neu. Lies dazu Telegram-Bot-Fehler 409 Conflict beheben.
- Für deinen Bot ist ein Webhook gesetzt: Klick auf Webhook entfernen und starte dann neu.
- Ein falscher Dateiname, eine falsche Sprache oder ein fehlendes Paket zeigt sich in den ersten Sekunden der Console, oft als Banner. Lies dazu Warum dein Bot immer wieder stoppt.
- Der Bot startet, hat aber seine Daten verloren: Prüf, ob die Datendateien dieselbe Ordnerstruktur behalten haben und ob dein Code sie über einen Pfad relativ zu
/home/containeröffnet.



