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:
- 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.
- 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.
- 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.
- Controleer dat je
package.jsonde versie noemt waarvoor je code is geschreven:^2.3.0voor een bot metnew Bot(...), of de oude versie voor een bot metnew TelegramBot(...). - Klik bij Je code op Bestanden uploaden en upload je
package.jsonenindex.jszondernode_modules, of klik op Git koppelen. - 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. - Klik op Bot starten en open Console. npm installeert de bibliotheek bij de eerste start, daarna print je bot
Logged in as @your_boten gaat het label onder Overzicht naar Online in Telegram. - 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:
| Versie | Verschenen | Zo ziet je code eruit |
|---|---|---|
| 0.x (laatste: 0.67.0) | Tot 13 dec 2025 | const 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 2026 | Dezelfde 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
| Bibliotheek | Versie | Geheugen zonder belasting | Start tot antwoord van Telegram | Installatiegrootte |
|---|---|---|---|---|
| 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 alleen, zonder bibliotheek | 22.23.4 | 43 MB | geen | geen |
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
409als een conflict, probeert 10 keer opnieuw, met 5 seconden ertussen, en stopt dan. De bot hierboven roeptbot.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 een409tegenkomt. - Nog een kopie van de bot: bij
409 Conflictwacht versie 2 5 seconden en probeert het stilletjes opnieuw, tot 10 keer achter elkaar. Daarna stopt ze,run()printnode-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 updatemet de fout en gaat door. Stel je eigen handler in metbot.catch((err, ctx) => ...). - Webhooks:
startWebhook,createWebhookServerenwebhookCallbackhebben een openbaar HTTPS-adres nodig, dat deze abonnementen nog niet bevatten. Gebruikrun(bot)ofbot.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
DEBUGtoe met de waardenode-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-sizeop 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 installdraaien na elke wijziging, het servicebestand, het tokenbestand en de rechten ervan.journalctllezen 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 installwanneerpackage.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.



