Um einen node-telegram-bot-api-Bot 24/7 zu hosten, lässt du ihn auf einem Rechner laufen, der immer an bleibt: ein Linux-VPS mit einem systemd-Dienst, der ihn neu startet, wenn er stoppt, oder ein Bot-Tarif bei PlayNHost (ab 1,99 US$ im Monat). Dort installiert das Panel deine Pakete, gibt deinem Code den Token und startet den Bot nach einem Absturz neu. In unserem Test brauchte ein Bot mit node-telegram-bot-api 2.3.0 auf Node.js 22 etwa 63 MB Arbeitsspeicher. Vorab eins: Version 2, die npm heute installiert, ist eine neue Bibliothek ohne TelegramBot-Klasse, deshalb passen Tutorials für ältere Versionen nicht mehr. Bots, die für 0.x oder 1.x geschrieben sind, behalten ihre API, wenn du ihre Version festlegst, wie unten gezeigt. Die Schritte bei PlayNHost:
- Klicke auf Telegram-Bot-Hosting bei einem Tarif auf Server erstellen. Beantworte im Bestellfenster Wofür ist dein Bot? mit Telegram und wähle Node.js.
- Öffne deinen Server im Panel. Die Karte Deinen Bot einrichten auf der Seite Übersicht öffnet sich bei Mit Telegram verbinden; der erste Schritt, Was läuft, sollte Dieser Bot führt Node.js Bot aus. anzeigen.
- Füge bei Mit Telegram verbinden den Token von @BotFather unter Füge deinen Bot-Token ein ein, klicke auf Verbinden, prüfe den angezeigten Bot-Namen und klicke auf Ja, weiter.
- Prüfe, dass deine
package.jsondie Version nennt, für die dein Code geschrieben ist:^2.3.0für einen Bot mitnew Bot(...)oder die alte Version für einen Bot mitnew TelegramBot(...). - Klicke bei Dein Code auf Dateien hochladen und lade deine
package.jsonundindex.jsohnenode_moduleshoch, oder klicke auf Git verbinden. - Prüfe auf der Seite Bot im Bereich Code, dass Startdatei die Datei ist, die deinen Bot startet (standardmäßig
index.js). Klicke auf Speichern, wenn du sie änderst. - Klicke auf Bot starten und öffne Console. npm installiert die Bibliothek beim ersten Start, dann gibt dein Bot
Logged in as @your_botaus und der Chip unter Übersicht wechselt zu Online in Telegram. - Klicke auf der Seite Bot im Bereich Telegram auf In Telegram öffnen und sende deinem Bot
/start.
Wie du den Bot in @BotFather anlegst und welche Panel-Schritte es gibt, steht in So hostest du einen Telegram-Bot. Diese Seite behandelt node-telegram-bot-api selbst: seine Versionen, was es auf einem Server braucht und was du vor dem Hosten wissen solltest.
Für welche Version ist dein Bot geschrieben?
Der Paketname blieb gleich, aber die API hat sich im August 2026 komplett geändert:
| Version | Erschienen | So sieht dein Code aus |
|---|---|---|
| 0.x (zuletzt: 0.67.0) | Bis 13. Dez. 2025 | const TelegramBot = require('node-telegram-bot-api'), new TelegramBot(token, { polling: true }), bot.onText(...), bot.sendMessage(chatId, text) |
| 1.x (1.0.0 bis 1.2.0) | 12. Juni bis 14. Juli 2026 | Dieselbe TelegramBot-Klasse, in TypeScript neu geschrieben, geladen mit import TelegramBot from 'node-telegram-bot-api' |
| 2.x (aktuell 2.3.0) | Ab 16. Aug. 2026 (2.3.0: 4. Nov. 2026) | const { Bot } = require('node-telegram-bot-api'), bot.command(...), ctx.reply(...), bot.api.sendMessage({ chat_id, text }) |
Die README des Projekts sagt es deutlich: "v2 is a from-scratch redesign, no v1 compatibility", und sein Changelog schreibt, dass npm install node-telegram-bot-api aus einem alten Tutorial dich "now lands you on a completely different API". Ein TelegramBot-Bot, der mit 2.x gestartet wird, schlägt sofort fehl, weil die Klasse nicht mehr existiert.
Für einen Bot, der für 0.x geschrieben ist, lass diese Version in der package.json stehen:
"dependencies": {
"node-telegram-bot-api": "^0.67.0"
}
Ein ^-Bereich springt nie auf eine neue Hauptversion, deshalb hält die tägliche Paketinstallation auf unseren Servern deinen Bot auf 0.x. Schreibe nicht latest oder *. Wenn du es stattdessen über Pakete im Bereich Code installierst, gib die Version ebenfalls an, node-telegram-bot-api@0.67: Ein Name ohne Version fragt bei npm das Release mit dem Tag latest an, und das ist 2.3.0.
Was wir gemessen haben
| Bibliothek | Version | Speicher ohne Last | Start bis zur Antwort von Telegram | Installationsgröße |
|---|---|---|---|---|
| node-telegram-bot-api | 2.3.0 | 63 MB | 0,2 s | 2,4 MB |
| grammY | 1.46.0 | 60 MB | 0,2 s | 3,0 MB |
| Telegraf | 4.16.3 | 60 MB | 0,2 s | 2,7 MB |
| Node.js 22 allein, ohne Bibliothek | 22.23.4 | 43 MB | keine | keine |
So haben wir gemessen: auf unserem eigenen Node, in einem Wegwerf-Container, der wie ein 1-GB-Bot-Tarif eingerichtet ist (das Node.js-22-Image und der Startbefehl unseres Node.js-Bot-Typs, mit Nodes Speicherlimit bei 80 Prozent). Jeder Bot rief Telegram mit einem falschen Token auf, den Telegram ablehnte. Der Speicher ist der Resident-Speicher 15 Sekunden nach dieser Antwort, die Startzeit läuft vom Start bis zur Antwort, und jeder Wert ist der Median der Läufe 2 bis 4. Gemessen haben wir Version 2; 0.x haben wir nicht gemessen.
Das sind Untergrenzen: ein Bot ohne Chats und ohne Daten. Dein eigener Code, was er im Speicher hält, und die Zahl der Chats kommen dazu, deshalb ist die Bibliothek nur ein kleiner Teil des STARTER-Tarifs mit 0,5 GB.
Ein minimaler Bot mit node-telegram-bot-api 2
Er antwortet auf /start, liest den Token, den das Panel ihm gibt, und gibt eine Bereit-Zeile aus. Lege beide Dateien in den Hauptordner deines Bots.
package.json
{
"name": "my-telegram-bot",
"private": true,
"main": "index.js",
"dependencies": {
"node-telegram-bot-api": "^2.3.0"
}
}
index.js
const { Bot, TelegramApiError } = require("node-telegram-bot-api");
const { run } = require("node-telegram-bot-api/node");
const bot = new Bot(process.env.TELEGRAM_BOT_TOKEN);
bot.command("start", (ctx) => ctx.reply("Hello! I am running on PlayNHost."));
async function main() {
await bot.init(); // asks Telegram who the bot is, so a wrong token fails here
await bot.api.deleteWebhook(); // version 2 does not remove a webhook by itself
console.log(`Logged in as @${bot.botInfo.username}`);
await run(bot); // polls for messages until the bot is stopped
}
main().catch((err) => {
if (err instanceof TelegramApiError && err.errorCode === 401) {
console.log("Telegram did not accept the bot token. Paste the current one from @BotFather, then restart.");
} else {
console.error(err);
}
process.exit(1);
});
Die Beispiele der Bibliothek lesen process.env.BOT_TOKEN. Das Panel gibt deinem Code den Token als TELEGRAM_BOT_TOKEN und auch als BOT_TOKEN, TOKEN, TELEGRAM_TOKEN und TELOXIDE_TOKEN, sodass diese Beispiele ohne Änderung laufen. run() kommt aus node-telegram-bot-api/node: Es pollt und stoppt sauber bei SIGINT oder SIGTERM. Version 2 funktioniert mit require wie oben oder mit import.
Wenn der Token falsch ist
In unserem Test schlug der erste Aufruf von Version 2 an Telegram (getMe) mit einem falschen Token mit diesem Fehler fehl:
TelegramApiError: 401: Unauthorized
Version 2 wiederholt einen abgelehnten Token nicht: bot.init() schlägt sofort fehl. Der Bot oben fängt diesen Fall ab und gibt stattdessen Telegram did not accept the bot token. Paste the current one from @BotFather, then restart. aus, und das Panel zeigt über Console das Banner Telegram hat deinen Bot-Token nicht akzeptiert. Zur Behebung sendest du in @BotFather /mybots, wählst deinen Bot, dann API Token, und kopierst den Token erneut. Klicke auf der Seite Bot im Bereich Telegram auf Token ersetzen, füge ihn ein, klicke auf Token speichern und dann auf Jetzt neu starten.
Ein 0.x-Bot verhält sich anders: Er hört nicht auf. Er loggt eine Zeile wie error: [polling_error] {"code":"ETELEGRAM","message":"ETELEGRAM: 401 Unauthorized"} und fragt Telegram etwa alle 0,3 Sekunden erneut, sodass er läuft, während nichts antwortet. Das Panel liest diese Zeile und zeigt dasselbe Banner.
Was du über node-telegram-bot-api auf einem Server wissen solltest
- Ein auf dem Bot gesetzter Webhook: Version 2 entfernt ihn nicht. Ihr Polling behandelt den Fehler
409als Konflikt, versucht es 10-mal im Abstand von 5 Sekunden und stoppt dann. Der Bot oben ruftbot.api.deleteWebhook()auf, bevor er pollt; du kannst auch im Bereich Telegram auf Webhook entfernen klicken. Version 0.x entfernt einen Webhook selbst, wenn das Polling auf einen409trifft. - Eine andere Kopie des Bots: Bei
409 Conflictwartet Version 2 5 Sekunden und versucht es still erneut, bis zu 10-mal hintereinander. Danach stoppt sie,run()gibtnode-telegram-bot-api: polling stopped on a fatal error:mit dem Text von Telegram aus, und das Panel zeigt Dein Bot läuft auch noch woanders. Stoppe die Kopie auf deinem PC oder deinem alten Host. Siehe Telegram-Bot-Fehler 409 Conflict beheben. - Ein Fehler in einem Befehl stoppt den Bot nicht. Version 2 gibt
Unhandled error while processing updatemit dem Fehler aus und macht weiter. Setze deinen eigenen Handler mitbot.catch((err, ctx) => ...). - Webhooks:
startWebhook,createWebhookServerundwebhookCallbackbrauchen eine öffentliche HTTPS-Adresse, die diese Tarife noch nicht enthalten. Nutzerun(bot)oderbot.startPolling(). Umzug von einem Webhook-Host: So ziehst du einen Telegram-Bot zu PlayNHost um. - Sehen, was er tut: Füge auf der Seite Bot im Bereich Umgebung die Variable
DEBUGmit dem Wertnode-telegram-bot-api:*hinzu (Variable hinzufügen) und starte neu. Version 2 protokolliert dann jede Anfrage und jedes Polling in der Konsole. - Node.js-Version: 2.3.0 braucht Node.js 18.2 oder neuer. Die Laufzeitumgebung im Bereich Code bietet Node.js 20, 22 (recommended), 24, 25 und 26.
- Speicherlimit: Das Startskript setzt
NODE_OPTIONS=--max-old-space-sizeauf 80 Prozent des Speichers deines Tarifs, damit der Rest des Prozesses Platz hat. Details zum Node.js-Startskript: So hostest du einen Node.js-Discord-Bot.
Selbst auf einem Linux-VPS hosten
Version 2 braucht Node.js 18.2 oder neuer. Unter Debian 12 oder 13 oder Ubuntu 24.04 ist das Paket der Distribution neu genug (Debian 12 liefert Node.js 18.20, Debian 13 liefert 20.19, Ubuntu 24.04 liefert 18.19); Ubuntu 22.04 liefert Node.js 12, das dafür zu alt ist:
sudo apt update
sudo apt install nodejs npm
node --version
Lege einen Benutzer für den Bot an, kopiere deine Dateien und installiere die Pakete:
sudo useradd --system --create-home --home-dir /opt/mybot mybot
sudo cp package.json index.js /opt/mybot/
sudo chown -R mybot: /opt/mybot
cd /opt/mybot && sudo -u mybot npm install --omit=dev
Halte den Token aus deinem Code heraus, in einer Datei, die nur root lesen kann:
sudo sh -c 'echo "TELEGRAM_BOT_TOKEN=123456789:your-token" > /etc/mybot.env'
sudo chmod 600 /etc/mybot.env
Erstelle /etc/systemd/system/mybot.service:
[Unit]
Description=node-telegram-bot-api Telegram bot
Wants=network-online.target
After=network-online.target
[Service]
User=mybot
WorkingDirectory=/opt/mybot
EnvironmentFile=/etc/mybot.env
ExecStart=/usr/bin/node index.js
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Starte ihn jetzt und bei jedem Boot und verfolge dann seine Ausgabe:
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo journalctl -u mybot -f
Restart=always startet den Bot nach einem Absturz oder einem process.exit(1) neu. systemctl stop mybot sendet SIGTERM, das run() in einen sauberen Stopp umsetzt. Stoppe zuerst jede andere Kopie, sonst antwortet Telegram beiden mit 409 Conflict.
Selbst hosten oder Bot-Tarif
Auf einem VPS, den du selbst verwaltest, kümmerst du dich um:
- Updates und Sicherheit des Betriebssystems sowie Node.js-Upgrades.
npm installnach jeder Änderung, die Service-Datei, die Token-Datei und ihre Berechtigungen.- Das Lesen von
journalctl, um herauszufinden, warum der Bot gestoppt ist. - Backups der Daten des Bots.
Dafür führt ein VPS alles aus, und du kannst ihm für einen Webhook eine Domain mit HTTPS geben.
In einem PlayNHost-Bot-Tarif übernimmt das Panel das für dich:
- Eine Auswahl der Node.js-Version und
npm install, wenn sichpackage.json, die Lock-Datei oder die Node.js-Version ändern. - Den Token, der vor dem Speichern bei Telegram geprüft, verschlüsselt abgelegt und an deinen Code übergeben wird.
- Den Neustart des Bots nach einem Absturz. Stürzt er innerhalb einer Minute erneut ab, bleibt er gestoppt und Console nennt den Grund.
- Banner über Console, die die Ursache nennen, wenn Telegram den Token ablehnt, eine andere Kopie läuft oder ein Webhook gesetzt ist, mit einem Button Webhook entfernen im Bereich Telegram.
- Upload, Git-Deployments und Backups über das Panel.
Fragen, die Leute stellen
Mein alter Bot ist mit einem Fehler wie TelegramBot is not a constructor gestoppt. Warum?
Höchstwahrscheinlich hat npm Version 2 installiert, die keine TelegramBot-Klasse hat: require('node-telegram-bot-api') liefert jetzt ein Objekt mit benannten Exporten wie Bot, keine Klasse, die du mit new aufrufen kannst. Trage die Version, für die dein Bot geschrieben ist, in die package.json ein, zum Beispiel "node-telegram-bot-api": "^0.67.0", lösche node_modules und package-lock.json unter Files und starte neu: Die Pakete werden erneut installiert. Oder stelle den Code mit der Tabelle im Changelog des Projekts auf Version 2 um.
Soll ich einen neuen Bot mit Version 2 oder mit 0.x schreiben?
Für einen neuen Bot Version 2: Sie bekommt Updates, und 2.3.0 unterstützt die Bot API 10.3 von Telegram. Bleibe bei 0.x für einen bestehenden Bot, bis du Zeit für den Umstieg hast; sie lässt sich weiterhin von npm installieren.
Wo überleben Sessions einen Neustart?
Nicht in MemorySessionStorage: Es lebt im Prozess und ist nach jedem Neustart leer. FileSessionStorage aus node-telegram-bot-api/node schreibt eine Datei pro Chat in einen Ordner, den du benennst, zum Beispiel ./.my_bot_sessions. In unseren Tarifen liegt dieser Ordner in den Dateien deines Servers, übersteht also Neustarts und ist in deinen Backups enthalten.
Bereit, deinen node-telegram-bot-api-Bot rund um die Uhr laufen zu lassen? Die Tarife findest du unter Telegram-Bot-Hosting.



