NEU 📢 Begrenztes Startangebot: bis zu 70 % Rabatt auf deinen ersten Monat, für jedes Spiel!Tarife ansehen

So hostest du einen node-telegram-bot-api-Bot 24/7

Telegram-Bot-HostingUpdated Nov 6, 202612 min read

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:

  1. 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.
  2. Ö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.
  3. 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.
  4. Prüfe, dass deine package.json die Version nennt, für die dein Code geschrieben ist: ^2.3.0 für einen Bot mit new Bot(...) oder die alte Version für einen Bot mit new TelegramBot(...).
  5. Klicke bei Dein Code auf Dateien hochladen und lade deine package.json und index.js ohne node_modules hoch, oder klicke auf Git verbinden.
  6. 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.
  7. Klicke auf Bot starten und öffne Console. npm installiert die Bibliothek beim ersten Start, dann gibt dein Bot Logged in as @your_bot aus und der Chip unter Übersicht wechselt zu Online in Telegram.
  8. 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:

VersionErschienenSo sieht dein Code aus
0.x (zuletzt: 0.67.0)Bis 13. Dez. 2025const 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 2026Dieselbe 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

BibliothekVersionSpeicher ohne LastStart bis zur Antwort von TelegramInstallationsgröße
node-telegram-bot-api2.3.063 MB0,2 s2,4 MB
grammY1.46.060 MB0,2 s3,0 MB
Telegraf4.16.360 MB0,2 s2,7 MB
Node.js 22 allein, ohne Bibliothek22.23.443 MBkeinekeine

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 409 als Konflikt, versucht es 10-mal im Abstand von 5 Sekunden und stoppt dann. Der Bot oben ruft bot.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 einen 409 trifft.
  • Eine andere Kopie des Bots: Bei 409 Conflict wartet Version 2 5 Sekunden und versucht es still erneut, bis zu 10-mal hintereinander. Danach stoppt sie, run() gibt node-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 update mit dem Fehler aus und macht weiter. Setze deinen eigenen Handler mit bot.catch((err, ctx) => ...).
  • Webhooks: startWebhook, createWebhookServer und webhookCallback brauchen eine öffentliche HTTPS-Adresse, die diese Tarife noch nicht enthalten. Nutze run(bot) oder bot.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 DEBUG mit dem Wert node-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-size auf 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 install nach 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 sich package.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.

Läuft dein Bot schon woanders? Zieh ihn zu uns um

UNSERE NEUESTEN BLOGS