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

Een Telegraf-bot 24/7 hosten (Telegram, Node.js)

Telegram-bothostingUpdated Nov 6, 202611 min read

Om een Telegraf-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 Telegraf 4.16.3-bot ongeveer 60 MB geheugen op Node.js 22. bot.launch() van Telegraf gebruikt standaard long polling, en dat is wat onze abonnementen nodig hebben: ze hebben nog geen openbaar HTTPS-adres voor een webhook. 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. Klik bij Je code op Bestanden uploaden en upload je package.json en index.js zonder node_modules, of klik op Git koppelen.
  5. 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.
  6. Klik op Bot starten en open Console. Bij de eerste start installeert npm Telegraf, daarna print je bot Logged in as @your_bot en schakelt de chip op Overzicht over naar Online in Telegram.
  7. Klik op de pagina Bot, in het deel Telegram, op Openen in Telegram en stuur je bot /start.

Hoe je de bot in @BotFather maakt en wat de stappen in het paneel zijn, staat in Een Telegram-bot hosten. Deze pagina gaat over Telegraf zelf: wat het op een server gebruikt en wat je moet weten voordat je het host.

Wat we hebben gemeten

BibliotheekVersieGeheugen na de startStart tot antwoord van TelegramInstallatiegrootte
Telegraf4.16.360 MB0,2 s2,7 MB
grammY1.46.060 MB0,2 s3,0 MB
node-telegram-bot-api2.3.063 MB0,2 s2,4 MB
Node.js 22 alleen, zonder bibliotheek22.23.443 MBgeengeen

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

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

Een minimale Telegraf-bot

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

package.json

{
  "name": "my-telegraf-bot",
  "private": true,
  "main": "index.js",
  "dependencies": {
    "telegraf": "^4.16.3"
  }
}

index.js

const { Telegraf } = require("telegraf");

const bot = new Telegraf(process.env.TELEGRAM_BOT_TOKEN);

bot.start((ctx) => ctx.reply("Hello! I am running on PlayNHost."));

// Without this, an error in one command stops the whole bot.
bot.catch((err, ctx) => {
  console.error(`Error while handling update ${ctx.update.update_id}:`, err);
});

// launch() only returns when the bot stops, so the ready line goes in its callback.
bot.launch(() => console.log(`Logged in as @${bot.botInfo.username}`)).catch((err) => {
  if (err.code === 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);
});

process.once("SIGINT", () => bot.stop("SIGINT"));
process.once("SIGTERM", () => bot.stop("SIGTERM"));

De eigen voorbeelden van Telegraf 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, dus die voorbeelden werken zonder aanpassingen. De regel Logged in as @your_bot zorgt ervoor dat de chip overschakelt naar Online in Telegram.

Als het token fout is

In onze test faalde bot.launch() van Telegraf met een nep-token met een TelegramError waarvan err.code 401 is. Geprint als naam en bericht ziet het er zo uit:

Error: 401: Unauthorized

De naam verschijnt als Error omdat de foutklasse van Telegraf geen eigen naam instelt. Telegraf probeert een geweigerd token niet opnieuw: bot.launch() faalt meteen, net als bij een bot die helemaal geen token kreeg (401: Bot Token is required). De bot hierboven vangt beide op 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 daarna op Nu herstarten.

Wat je moet weten over Telegraf op een server

  • Releases: de nieuwste Telegraf is 4.16.3, uitgebracht op 29 feb 2024. Versie 4.16.0 (25 feb 2024) voegde Telegrams Bot API 7.0 en 7.1 toe; Telegrams eigen changelog staat op Bot API 10.3 (24 aug 2026). De GitHub-repository kreeg de laatste push op 24 sep 2026. In onze test werd 4.16.3 normaal geïnstalleerd en gestart op Node.js 22.
  • De gereedregel hoort in de launch()-callback. bot.launch() komt pas terug als de bot stopt, dus een console.log na await bot.launch() wordt nooit geprint zolang hij draait. Sinds 4.16.0 accepteert launch() een callback die Telegraf aanroept zodra Telegram het token heeft geaccepteerd, met bot.botInfo ingevuld.
  • Een fout in een commando stopt de bot tenzij je bot.catch instelt. De standaardhandler van Telegraf print Unhandled error while processing met de update en gooit de fout opnieuw, waardoor het polling eindigt en het proces stopt. Ons paneel start een gecrashte bot binnen ongeveer een minuut opnieuw, maar tot dan is hij offline. Met bot.catch, zoals hierboven, wordt de fout geprint en gaat de bot door.
  • Elke update krijgt 90 seconden. Een update waarvan de handlers langer duren, wordt als fout gemeld (de optie handlerTimeout, standaard 90.000 ms), die dan naar bot.catch gaat. Geef new Telegraf(token, { handlerTimeout: ... }) mee voor langere taken.
  • Een webhook die op de bot staat, wordt voor je verwijderd. bot.launch() zonder de optie webhook roept deleteWebhook aan voordat het pollt en laat wachtende berichten staan, tenzij je dropPendingUpdates: true meegeeft. bot.launch({ webhook: ... }) heeft een openbaar HTTPS-adres nodig, dat deze abonnementen nog niet bevatten: gebruik het gewone bot.launch(). Verhuizen van een webhookhost: Een Telegram-bot verhuizen naar PlayNHost.
  • Een andere kopie van de bot stopt deze. Bij 409 Conflict (hetzelfde token pollt ergens anders) gooit het polling van Telegraf een fout in plaats van het opnieuw te proberen. Het paneel toont Je bot draait ook ergens anders: stop de kopie op je pc of bij je oude host. Zie Telegram-bot 409 Conflict oplossen. Tijdens het pollen worden netwerkfouten, 429 en Telegrams eigen 5xx-fouten opnieuw geprobeerd na de wachttijd die Telegram vraagt, of 5 seconden.
  • Node.js-versie: Telegraf 4.16.3 vraagt Node.js 12.20 of 14.13.1 en 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

Op Debian 12 of 13, of Ubuntu 24.04, volstaat het pakket van de distributie voor Telegraf (Debian 12 levert Node.js 18.20, Debian 13 levert 20.19, Ubuntu 24.04 levert 18.19):

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 uit 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=Telegraf 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 systeemstart en volg daarna de 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 de process.once-regels omzetten in bot.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, ben je verantwoordelijk voor:

  • Updates en beveiliging van het besturingssysteem, en Node.js-upgrades.
  • npm install draaien na elke wijziging, het servicebestand, het tokenbestand en de rechten daarvan.
  • journalctl lezen om te achterhalen waarom de bot is gestopt.
  • Back-ups van de data van de bot.

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

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

  • Een keuze voor de Node.js-versie, en npm install als package.json, het lockbestand of de Node.js-versie verandert.
  • Het token, gecontroleerd bij Telegram voordat het wordt opgeslagen, versleuteld bewaard en aan je code gegeven.
  • De bot opnieuw starten na een crash. Als hij binnen een minuut opnieuw crasht, blijft hij gestopt en Console zegt 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.

Veelgestelde vragen

Waarom wordt er niets geprint na await bot.launch()?

Omdat bot.launch() wacht tot het polling eindigt, en het polling duurt zo lang als de bot draait. Code erna draait pas als de bot stopt. Zet startberichten in de callback, bot.launch(() => ...), en registreer commando's voordat je launch() aanroept.

Kan ik Telegraf blijven gebruiken, of moet ik naar grammY overstappen?

Een werkende Telegraf 4-bot draait ongewijzigd op onze abonnementen: er hoeft niets te veranderen om hem te hosten. De laatste release is van februari 2024, dus methoden die Telegram na Bot API 7.1 toevoegde, hebben geen Telegraf-snelkoppeling. grammY 1.46.0 (26 aug 2026) ondersteunt Bot API 10.3, en onze startbot voor Node.js gebruikt het. Stap over als je iets nodig hebt wat nieuwer is dan wat Telegraf biedt.

Mijn Telegraf-bot stopte met 409: Conflict. Wat nu?

Een andere kopie pollt met hetzelfde token, vaak op je pc of bij je oude host. Telegraf stopt in plaats van het opnieuw te proberen. Het paneel start hem binnen ongeveer een minuut opnieuw; als hij daarna binnen een minuut weer stopt, blijft hij gestopt. Zoek en stop de andere kopie, of maak een nieuw token in @BotFather en plak het met Token vervangen.

Kan ik Telegraf op Bun draaien?

Ja. Kies bij het bestellen Bun in plaats van Node.js: onze pagina voor Telegram-bothosting noemt Telegraf daarvoor. De stappen op deze pagina zijn voor Node.js.

Klaar om je Telegraf-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