NIEUW 📢 Beperkte lanceeractie: tot 70% korting op je eerste maand, voor elke game!Bekijk pakketten

Een node-telegram-bot-api-bot 24/7 hosten

Telegram-bothostingUpdated Nov 6, 202612 min read

Om een node-telegram-bot-api-bot 24/7 te hosten laat je hem draaien op een machine die altijd aan staat: een Linux-VPS met een systemd-service die hem opnieuw start als hij stopt, of een botabonnement bij PlayNHost (vanaf US$1.99 per maand), waar het paneel je pakketten installeert, je code het token geeft en de bot opnieuw start als hij crasht. In onze test gebruikte een bot met node-telegram-bot-api 2.3.0 ongeveer 63 MB geheugen op Node.js 22. Eerst één ding: versie 2, die npm tegenwoordig installeert, is een nieuwe bibliotheek zonder TelegramBot-klasse, dus tutorials voor oudere versies kloppen niet meer. Bots die voor 0.x of 1.x zijn geschreven houden hun API als je hun versie vastzet, zoals hieronder getoond. De stappen bij PlayNHost:

  1. Klik op Telegram-bothosting bij een abonnement op Server aanmaken. Beantwoord in het bestelvenster Voor welk platform is je bot? met Telegram en kies Node.js.
  2. Open je server in het paneel. De kaart Je bot instellen op Overzicht opent bij Verbinden met Telegram; de eerste stap, Wat er draait, hoort Deze bot draait Node.js Bot. te zeggen.
  3. Plak bij Verbinden met Telegram het token van @BotFather onder Plak je bottoken, klik op Verbinden, controleer de getoonde botnaam en klik op Ja, doorgaan.
  4. Controleer dat je package.json de versie noemt waarvoor je code is geschreven: ^2.3.0 voor een bot met new Bot(...), of de oude versie voor een bot met new TelegramBot(...).
  5. Klik bij Je code op Bestanden uploaden en upload je package.json en index.js zonder node_modules, of klik op Git koppelen.
  6. Controleer op de pagina Bot, in het deel Code, dat Startbestand het bestand is dat je bot start (standaard index.js). Klik op Opslaan als je het wijzigt.
  7. Klik op Bot starten en open Console. npm installeert de bibliotheek bij de eerste start, daarna print je bot Logged in as @your_bot en gaat het label onder Overzicht naar Online in Telegram.
  8. Klik op de pagina Bot, in het deel Telegram, op Openen in Telegram en stuur je bot /start.

Het maken van de bot in @BotFather en de stappen in het paneel staan uitgelegd in Een Telegram-bot hosten. Deze pagina gaat over node-telegram-bot-api zelf: de versies, wat de bibliotheek op een server gebruikt en wat je moet weten voordat je hem host.

Voor welke versie is je bot geschreven?

De pakketnaam bleef gelijk, maar de API is in augustus 2026 helemaal veranderd:

VersieVerschenenZo ziet je code eruit
0.x (laatste: 0.67.0)Tot 13 dec 2025const TelegramBot = require('node-telegram-bot-api'), new TelegramBot(token, { polling: true }), bot.onText(...), bot.sendMessage(chatId, text)
1.x (1.0.0 tot 1.2.0)12 jun tot 14 jul 2026Dezelfde TelegramBot-klasse, herschreven in TypeScript, geladen met import TelegramBot from 'node-telegram-bot-api'
2.x (nu 2.3.0)Vanaf 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 })

De README van het project zegt het duidelijk: "v2 is a from-scratch redesign, no v1 compatibility", en de changelog zegt dat npm install node-telegram-bot-api uit een oude tutorial je "now lands you on a completely different API". Een TelegramBot-bot die met 2.x wordt gestart faalt meteen, omdat de klasse niet meer bestaat.

Laat voor een bot die voor 0.x is geschreven die versie in package.json staan:

"dependencies": {
  "node-telegram-bot-api": "^0.67.0"
}

Een ^-bereik springt nooit naar een nieuwe hoofdversie, dus de dagelijkse pakketinstallatie op onze servers houdt je bot op 0.x. Schrijf geen latest of *. Installeer je het in plaats daarvan via Packages in het deel Code, schrijf dan ook de versie, node-telegram-bot-api@0.67: een naam zonder versie vraagt npm om de release met de tag latest, en dat is 2.3.0.

Wat we hebben gemeten

BibliotheekVersieGeheugen zonder belastingStart tot antwoord van TelegramInstallatiegrootte
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 alleen, zonder bibliotheek22.23.443 MBgeengeen

Hoe: op onze eigen node, in een wegwerpcontainer ingesteld als een botabonnement van 1 GB (de Node.js 22-image en het startcommando van ons Node.js-bottype, met Nodes geheugenlimiet op 80 procent), riep elke bot Telegram aan met een nep-token, dat Telegram weigerde. Het geheugen is het resident geheugen 15 seconden na dat antwoord, de starttijd loopt van het starten tot het antwoord, en elke waarde is de mediaan van run 2 tot 4. We maten versie 2; 0.x is niet gemeten.

Dit zijn ondergrenzen: een bot zonder chats en zonder data. Je eigen code, wat die in het geheugen bewaart en het aantal chats komen erbij, dus de bibliotheek is een klein deel van het STARTER-abonnement van 0,5 GB.

Een minimale bot met node-telegram-bot-api 2

Hij antwoordt op /start, leest het token dat het paneel hem geeft en print een klaarmelding. Zet beide bestanden in de hoofdmap van je bot.

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);
});

De voorbeelden van de bibliotheek lezen process.env.BOT_TOKEN. Het paneel geeft je code het token als TELEGRAM_BOT_TOKEN en ook als BOT_TOKEN, TOKEN, TELEGRAM_TOKEN en TELOXIDE_TOKEN, zodat die voorbeelden ongewijzigd draaien. run() komt uit node-telegram-bot-api/node: het pollt en stopt netjes bij SIGINT of SIGTERM. Versie 2 werkt met require zoals hierboven of met import.

Als het token fout is

In onze test faalde de eerste aanroep van versie 2 naar Telegram (getMe) met een nep-token met deze fout:

TelegramApiError: 401: Unauthorized

Versie 2 probeert een geweigerd token niet opnieuw: bot.init() faalt meteen. De bot hierboven vangt dat geval af en print in plaats daarvan Telegram did not accept the bot token. Paste the current one from @BotFather, then restart., en het paneel toont de melding Telegram heeft je bottoken niet geaccepteerd boven Console. Om het op te lossen stuur je in @BotFather /mybots, kies je je bot, dan API Token, en kopieer je het token opnieuw. Klik op de pagina Bot, in het deel Telegram, op Token vervangen, plak het, klik op Token opslaan en dan op Nu herstarten.

Een 0.x-bot gedraagt zich anders: hij stopt niet. Hij logt een regel zoals error: [polling_error] {"code":"ETELEGRAM","message":"ETELEGRAM: 401 Unauthorized"} en vraagt Telegram ongeveer elke 0,3 seconden opnieuw, dus hij lijkt te draaien terwijl niets antwoordt. Het paneel leest die regel en toont dezelfde melding.

Wat je moet weten over node-telegram-bot-api op een server

  • Een webhook die op de bot is blijven staan: versie 2 verwijdert hem niet. Het pollen behandelt de 409 als een conflict, probeert 10 keer opnieuw, met 5 seconden ertussen, en stopt dan. De bot hierboven roept bot.api.deleteWebhook() aan voordat hij pollt; je kunt ook op Webhook verwijderen klikken in het deel Telegram. Versie 0.x verwijdert een webhook zelf als het pollen een 409 tegenkomt.
  • Nog een kopie van de bot: bij 409 Conflict wacht versie 2 5 seconden en probeert het stilletjes opnieuw, tot 10 keer achter elkaar. Daarna stopt ze, run() print node-telegram-bot-api: polling stopped on a fatal error: met de tekst van Telegram, en het paneel toont Je bot draait ook ergens anders. Stop de kopie op je pc of je oude host. Zie Telegram-bot 409 Conflict oplossen.
  • Een fout in een commando stopt de bot niet. Versie 2 print Unhandled error while processing update met de fout en gaat door. Stel je eigen handler in met bot.catch((err, ctx) => ...).
  • Webhooks: startWebhook, createWebhookServer en webhookCallback hebben een openbaar HTTPS-adres nodig, dat deze abonnementen nog niet bevatten. Gebruik run(bot) of bot.startPolling(). Verhuizen van een webhookhost: Een Telegram-bot verhuizen naar PlayNHost.
  • Zien wat hij doet: voeg op de pagina Bot, in het deel Omgeving, de variabele DEBUG toe met de waarde node-telegram-bot-api:* (Variabele toevoegen) en herstart. Versie 2 toont dan elk verzoek en elke poll in de console.
  • Node.js-versie: 2.3.0 vraagt Node.js 18.2 of nieuwer. De Runtime in het deel Code biedt Node.js 20, 22 (recommended), 24, 25 en 26.
  • Geheugenlimiet: het startscript zet NODE_OPTIONS=--max-old-space-size op 80 procent van het geheugen van je abonnement, zodat de rest van het proces ruimte heeft. Details over het Node.js-startscript: Een Node.js Discord-bot hosten.

Zelf hosten op een Linux-VPS

Versie 2 vraagt Node.js 18.2 of nieuwer. Op Debian 12 of 13, of Ubuntu 24.04, is het pakket van de distributie nieuw genoeg (Debian 12 levert Node.js 18.20, Debian 13 levert 20.19, Ubuntu 24.04 levert 18.19); Ubuntu 22.04 levert Node.js 12, dat daarvoor te oud is:

sudo apt update
sudo apt install nodejs npm
node --version

Maak een gebruiker voor de bot, kopieer je bestanden en installeer de pakketten:

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

Houd het token buiten je code, in een bestand dat alleen root kan lezen:

sudo sh -c 'echo "TELEGRAM_BOT_TOKEN=123456789:your-token" > /etc/mybot.env'
sudo chmod 600 /etc/mybot.env

Maak /etc/systemd/system/mybot.service aan:

[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

Start hem nu en bij elke boot, en volg dan zijn uitvoer:

sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo journalctl -u mybot -f

Restart=always start de bot opnieuw na een crash of een process.exit(1). systemctl stop mybot stuurt SIGTERM, dat run() omzet in een nette stop. Stop eerst elke andere kopie, anders antwoordt Telegram beide met 409 Conflict.

Zelf hosten of een botabonnement

Op een VPS die je zelf beheert, zorg je voor:

  • Updates en beveiliging van het besturingssysteem, en Node.js-upgrades.
  • npm install draaien na elke wijziging, het servicebestand, het tokenbestand en de rechten ervan.
  • journalctl lezen om te weten waarom de bot stopte.
  • Back-ups van de gegevens van de bot.

Daar staat tegenover dat een VPS alles draait, en je hem een domein met HTTPS kunt geven voor een webhook.

Op een PlayNHost-botabonnement doet het paneel dit voor je:

  • Een keuze voor de Node.js-versie, en npm install wanneer package.json, het lockbestand of de Node.js-versie verandert.
  • Het token, bij Telegram gecontroleerd voordat het wordt opgeslagen, versleuteld bewaard en aan je code gegeven.
  • De bot opnieuw starten na een crash. Crasht hij binnen een minuut weer, dan blijft hij gestopt en zegt Console waarom.
  • Meldingen boven Console die de oorzaak noemen als Telegram het token weigert, een andere kopie draait of een webhook is ingesteld, met een knop Webhook verwijderen in het deel Telegram.
  • Upload, Git-deploys en back-ups vanuit het paneel.

Vragen die mensen stellen

Mijn oude bot stopte met een fout zoals TelegramBot is not a constructor. Waarom?

Hoogstwaarschijnlijk heeft npm versie 2 geïnstalleerd, die geen TelegramBot-klasse heeft: require('node-telegram-bot-api') geeft nu een object met benoemde exports zoals Bot terug, geen klasse die je met new kunt aanroepen. Zet de versie waarvoor je bot is geschreven in package.json, bijvoorbeeld "node-telegram-bot-api": "^0.67.0", verwijder node_modules en package-lock.json in Files en herstart: de pakketten worden opnieuw geïnstalleerd. Of zet de code over naar versie 2 met de tabel in de changelog van het project.

Moet ik een nieuwe bot schrijven op versie 2 of op 0.x?

Voor een nieuwe bot versie 2: die krijgt updates, en 2.3.0 ondersteunt de Bot API 10.3 van Telegram. Blijf bij 0.x voor een bestaande bot tot je tijd hebt om over te stappen; ze is nog steeds te installeren via npm.

Waar overleven sessies een herstart?

Niet in MemorySessionStorage: dat leeft in het proces en is na elke herstart leeg. FileSessionStorage uit node-telegram-bot-api/node schrijft per chat één bestand in een map die je zelf noemt, bijvoorbeeld ./.my_bot_sessions. Op onze abonnementen staat die map in de bestanden van je server, dus ze overleeft herstarts en zit in je back-ups.

Klaar om je node-telegram-bot-api-bot dag en nacht te laten draaien? Bekijk de abonnementen op Telegram-bothosting.

Draait je bot al ergens anders? Verhuis hem naar ons

ONZE NIEUWSTE BLOGS