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

telebot-Bot 24/7 hosten: so läuft dein Go-Telegram-Bot

Telegram-Bot-HostingUpdated Nov 6, 202612 min read

Um einen telebot-Bot 24/7 zu hosten, lässt du ihn auf einem Rechner laufen, der immer an bleibt: auf einem Linux-VPS mit einem systemd-Dienst, der ihn neu startet, wenn er stoppt, oder mit einem Bot-Tarif bei PlayNHost (ab 1,99 US$ im Monat). Dort lädst du das fertige Programm hoch, das Panel gibt ihm den Token und startet es neu, wenn es abstürzt. In unserem Test brauchte ein telebot-3.3.8-Bot (gopkg.in/telebot.v3) etwa 11 MB Speicher. Ein Go-Bot wird auf deinem eigenen Computer als ein einziges Linux-x86-64-Programm gebaut: Auf dem Server wird nichts kompiliert. Die Schritte bei PlayNHost:

  1. Baue deinen Bot auf deinem Computer für Linux x86-64, wie unter Build it for Linux unten gezeigt.
  2. Klicke bei Telegram-Bot-Hosting bei einem Tarif auf Server erstellen. Beantworte im Bestellfenster Wofür ist dein Bot? mit Telegram und wähle Go.
  3. Öffne deinen Server im Panel. Die Karte Deinen Bot einrichten auf der Seite Übersicht öffnet sich bei Mit Telegram verbinden; ihr erster Schritt, Was läuft, sollte Dieser Bot führt Go Bot aus. anzeigen.
  4. 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.
  5. Klicke bei Dein Code auf Dateien hochladen, dann in Files auf Hochladen und wähle dein Programm mit dem Namen bot. Oder lass den Server es abholen: Setze auf der Seite Bot, im Bereich Code, in der Karte Einstellungen den Download-Link (optional) auf einen https-Link zum Programm und klicke auf Speichern.
  6. Klicke auf Bot starten und öffne die Console. Nach [PlayNHost] Starting your bot gibt dein Bot Logged in as @your_bot aus, und der Chip auf der Übersicht wechselt zu Online in Telegram.
  7. 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 wie die Einrichtungskarte funktioniert, steht in So hostest du einen Telegram-Bot. Der Bot-Typ Go Bot selbst (die Startdatei, die Startargumente (optional) und der Download-Link) ist für Discord- und Telegram-Bots gleich: Einen Go-Discord-Bot hosten. Diese Seite handelt von telebot: was die Bibliothek auf einem Server braucht und was du wissen solltest, bevor du sie hostest.

Was wir gemessen haben

BibliothekVersionSpeicher ohne LastStart bis zur Antwort der PlattformProgrammgröße
telebot (Telegram)3.3.811 MB0,1 s8,1 MB
go-telegram/bot (Telegram)1.27.011 MB0,1 s8,1 MB
discordgo (Discord)0.29.012 MB0,3 s9,0 MB
Ein Go-Programm ohne BibliothekGo 1.23.122 MBkeine2,1 MB

So haben wir gemessen: auf unserem eigenen Node, in einem Wegwerf-Container, eingerichtet wie ein Bot-Tarif mit 1 GB, einer CPU und dem Debian-Image, auf dem unser Go-Bot-Typ läuft. Das Programm jeder Bibliothek rief Telegram oder Discord mit einem erfundenen Token auf, was abgelehnt wurde; das Programm ohne Bibliothek rief nichts auf. Der Speicher ist der belegte Speicher (resident) 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. Die Programme wurden mit Go 1.23.12 und CGO_ENABLED=0 gebaut.

Das sind Untergrenzen: ein Programm ohne Chats und ohne Daten. Dein eigener Code, das, was er im Speicher hält, und die Zahl der Chats kommen dazu. Ein minimales telebot-Programm braucht also nur einen kleinen Teil des 0,5-GB-Tarifs STARTER.

Ein minimaler telebot-Bot

Er antwortet auf /start, liest den Token, den das Panel ihm gibt, gibt eine Bereit-Zeile aus, sagt klar, wenn Telegram den Token ablehnt, und stoppt sauber, wenn du auf Stoppen klickst. Lege beide Dateien in einen Ordner und führe dann go mod tidy aus, was telebot herunterlädt und go.sum schreibt.

go.mod

module bot

go 1.23

require gopkg.in/telebot.v3 v3.3.8

main.go

package main

import (
	"errors"
	"fmt"
	"os"
	"os/signal"
	"strings"
	"syscall"
	"time"

	tele "gopkg.in/telebot.v3"
	"gopkg.in/telebot.v3/middleware"
)

func main() {
	token := os.Getenv("TELEGRAM_BOT_TOKEN")
	if token == "" {
		fmt.Println("TELEGRAM_BOT_TOKEN is not set. Paste your token on the Bot page, Telegram, then restart.")
		os.Exit(1)
	}
	// Network errors contain the request address, and the address contains the token.
	hide := func(err error) string { return strings.ReplaceAll(err.Error(), token, "<token>") }

	b, err := tele.NewBot(tele.Settings{
		Token:  token,
		Poller: &tele.LongPoller{Timeout: 10 * time.Second},
	})
	if errors.Is(err, tele.ErrUnauthorized) {
		fmt.Println("Telegram did not accept the bot token. Paste the current one from @BotFather, then restart.")
		os.Exit(1)
	}
	if err != nil {
		fmt.Println("Could not start the bot:", hide(err))
		os.Exit(1)
	}

	// Without this, a panic in one handler stops the whole program.
	b.Use(middleware.Recover())

	b.Handle("/start", func(c tele.Context) error {
		return c.Send("Hello! I am running on PlayNHost.")
	})

	// A webhook left on the bot blocks polling. Remove it and keep the messages that are waiting.
	if err := b.RemoveWebhook(); err != nil {
		fmt.Println("Could not remove the webhook:", hide(err))
	}

	fmt.Println("Logged in as @" + b.Me.Username)
	go b.Start()

	// The panel stops the bot with Ctrl+C (SIGINT).
	stop := make(chan os.Signal, 1)
	signal.Notify(stop, os.Interrupt, syscall.SIGTERM)
	<-stop
	b.Stop()
}

Die Zeile Logged in as @your_bot schaltet den Chip auf Online in Telegram. Das Panel gibt deinem Programm den Token als TELEGRAM_BOT_TOKEN, außerdem als TOKEN, BOT_TOKEN, TELEGRAM_TOKEN und TELOXIDE_TOKEN. Das README-Beispiel von telebot liest os.Getenv("TOKEN"), seine Token-Zeile funktioniert also ebenfalls unverändert.

Für Linux bauen

Aus deinem Projektordner, auf jedem Computer:

# macOS or Linux
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o bot

# Windows PowerShell
$env:GOOS="linux"; $env:GOARCH="amd64"; $env:CGO_ENABLED="0"; go build -o bot

CGO_ENABLED=0 erzeugt eine eigenständige Datei, die nicht von den Systembibliotheken des Servers abhängt, sodass sie auf unserem Debian-Image läuft, egal auf welchem System du baust. Das Ergebnis ist eine Datei namens bot ohne Endung. Eine Windows-.exe oder ein macOS-Build läuft auf dem Server nicht: Die Konsole zeigt dann [PlayNHost] bot is not a Linux program. Build it for Linux x86-64 (not Windows or macOS) and upload it again.

Wenn der Token falsch ist

In unserem Test gab tele.NewBot mit einem erfundenen Token diesen Fehler zurück (unser Testprogramm hat ihn nach dem Typ des Fehlers ausgegeben):

*telebot.Error: telegram: Unauthorized (401)

NewBot fragt Telegram, wer der Bot ist (getMe), bevor es zurückkehrt. Ein abgelehnter Token stoppt das Programm also, bevor es pollt. telebot gibt seinen Fehler ErrUnauthorized für die Telegram-Antwort Unauthorized zurück. Das README-Beispiel beendet das Programm mit log.Fatal(err); der Bot oben gibt stattdessen Telegram did not accept the bot token. Paste the current one from @BotFather, then restart. aus, eine Zeile, die das Panel erkennt: Es zeigt dann das Banner Telegram hat deinen Bot-Token nicht akzeptiert über der Console.

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.

Was du über telebot auf einem Server wissen solltest

  • Fehler beim Polling sind still. Wenn die Abfrage neuer Nachrichten bei Telegram fehlschlägt, versucht der LongPoller von telebot es sofort erneut, ohne Pause, und gibt den Fehler nur aus, wenn Verbose an ist. Wenn also eine andere Kopie des Bots mit demselben Token pollt (409 Conflict), ein Webhook gesetzt ist oder der Token widerrufen wird, während der Bot läuft, läuft dein Bot weiter, bekommt aber wenige oder keine Nachrichten, und die Konsole bleibt still. Stoppe jede andere Kopie, bevor du ihn hier startest, und lies Telegram-Bot-Fehler 409 Conflict beheben.
  • Sehen, was das Polling macht. Verbose: true in tele.Settings protokolliert jede Anfrage und Telegrams Antwort, sodass der Text 409 Conflict in der Console erscheint und das Panel Dein Bot läuft auch noch woanders anzeigen kann. Es protokolliert auch die Nachrichten, die Leute deinem Bot schicken. Schalte es also für einen Test ein, nicht dauerhaft.
  • Ein Webhook, der am Bot hängt. b.Start() entfernt keinen Webhook, und solange einer gesetzt ist, schlägt das Polling still fehl. Der Bot oben ruft vor dem Start b.RemoveWebhook() auf, wodurch die wartenden Nachrichten erhalten bleiben. Du kannst auch im Bereich Telegram auf Webhook entfernen klicken. Der Webhook-Poller von telebot braucht eine öffentliche HTTPS-Adresse, die unsere Tarife noch nicht enthalten: Nutze LongPoller.
  • Ein Panic in einem Handler beendet das Programm. telebot führt jeden Handler in einer eigenen Goroutine aus (außer Synchronous ist an), und ein Panic dort stoppt alles. b.Use(middleware.Recover()) macht aus einem Panic einen Fehler, der stattdessen ausgegeben wird. Rufe b.Use vor b.Handle auf: Middleware wird angehängt, wenn ein Handler hinzugefügt wird.
  • Handler-Fehler werden für dich ausgegeben. Ein Fehler, den dein Handler zurückgibt, geht an den Standard-Fehlerhandler von telebot, der die Update-Nummer und den Fehler ausgibt. Setze OnError in tele.Settings, um das zu ändern.
  • Dein Token in Fehlermeldungen. telebot schreibt den Token in jede Anfrageadresse (/bot gefolgt vom Token), und die Netzwerkfehler von Go enthalten diese Adresse. Der Bot oben ersetzt den Token, bevor er einen Fehler ausgibt. Teile keine rohe Konsolenausgabe eines Bots, der Fehler unverändert ausgibt.
  • Ein sauberer Stopp. Das Panel stoppt einen Go-Bot mit Ctrl+C (SIGINT). b.Start() läuft, bis b.Stop() aufgerufen wird. Der Bot oben startet es daher in einer Goroutine, wartet auf das Signal und ruft dann b.Stop() auf, was die laufende Anfrage abbricht.
  • Aktualisierungen. Der Go-Bot-Typ hat kein Feld Pakete und keine Git-Quelle: Deine Module stecken im Programm. Zum Aktualisieren löschst du das alte Programm in Files, lädst den neuen Build hoch und startest neu. Mit einem Download-Link veröffentlichst du den neuen Build unter diesem Link, löschst das Programm in Files und klickst auf Starten.

Selbst auf einem Linux-VPS hosten

Kopiere das gebaute Programm auf den VPS; dort wird kein Go gebraucht, und ein Build mit CGO_ENABLED=0 hängt nicht von den Systembibliotheken des VPS ab. Lege einen Benutzer für den Bot an, lege das Programm in dessen Ordner und halte den Token in einer Datei, die nur root lesen kann:

sudo useradd --system --create-home --home-dir /opt/mybot mybot
sudo install -o mybot -m 755 bot /opt/mybot/bot
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=telebot Telegram bot
Wants=network-online.target
After=network-online.target

[Service]
User=mybot
WorkingDirectory=/opt/mybot
EnvironmentFile=/etc/mybot.env
ExecStart=/opt/mybot/bot
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

systemctl stop sendet standardmäßig SIGTERM, auf das der Bot oben ebenfalls hört, er stoppt also sauber. Restart=always startet den Bot nach einem Absturz oder Beenden neu. Stoppe vorher jede andere Kopie: Mit telebot zeigt ein 409 Conflict auch in journalctl nichts an.

Selbst hosten oder Bot-Tarif

Auf einem VPS, den du selbst verwaltest, kümmerst du dich um:

  • Updates und Sicherheit des Betriebssystems.
  • Das Kopieren jedes neuen Builds, die Service-Datei, die Token-Datei und ihre Rechte.
  • Das Lesen von journalctl, um herauszufinden, warum der Bot gestoppt ist.
  • Backups der Daten des Bots.

Dafür läuft auf einem VPS alles, und du kannst ihm für einen Webhook eine Domain mit HTTPS geben.

Bei einem Bot-Tarif von PlayNHost übernimmt das Panel das für dich:

  • Ein Debian-Image, das ein Linux-x86-64-Programm ausführt, und eine Prüfung beim Start, die dir sagt, wenn die Datei ein Windows- oder macOS-Build ist.
  • Upload in Files oder ein Download-Link, den der Server beim Start abruft.
  • Der Token, bei Telegram geprüft, verschlüsselt gespeichert und deinem Programm als TELEGRAM_BOT_TOKEN und TOKEN übergeben.
  • Ein Neustart des Bots nach einem Absturz. Stürzt er innerhalb einer Minute erneut ab, bleibt er gestoppt, und die Console sagt, warum.
  • Eine Schaltfläche Webhook entfernen im Bereich Telegram und ein Banner über der Console, wenn dein Bot ausgibt, dass Telegram den Token abgelehnt hat.

Fragen, die Leute stellen

Soll ich telebot v3 oder v4 nehmen?

v3.3.8 (6. Aug. 2024) ist die neueste stabile Version und die, die wir gemessen haben. Die Entwicklung ist zu v4 gewandert: Es ist der Standard-Branch des Repositorys, und das README installiert gopkg.in/telebot.v4, aber es ist noch eine Beta (v4.0.0-beta.10, 16. Juni 2026). Die v4-Betas bringen neuere Versionen der Telegram Bot API, in v4.0.0-beta.10 bis Bot API 10.1, die v3.3.8 nicht hat. Das Einstiegsbeispiel im README ist in beiden bis auf den Importpfad gleich. Beide laufen auf unseren Servern gleich: bauen, hochladen, starten.

Warum läuft mein telebot-Bot, antwortet aber nicht?

Meistens pollt eine andere Kopie mit demselben Token, auf deinem PC oder einem alten Host, oder ein Webhook ist gesetzt. telebot gibt keines von beidem aus, die Konsole sieht also normal aus. Stoppe die andere Kopie oder widerrufe den Token in @BotFather und füge den neuen im Bereich Telegram ein; prüfe im selben Bereich auch auf einen Webhook. Um die Ursache zu sehen, starte einmal mit Verbose: true neu.

Kann ich den Webhook von telebot statt Polling nutzen?

Noch nicht. Ein Webhook braucht eine öffentliche HTTPS-Adresse, die unsere Tarife noch nicht enthalten. LongPoller braucht keine Adresse: Der Bot fragt Telegram nach neuen Nachrichten, im Bot oben mit 10 Sekunden Wartezeit.

telebot oder go-telegram/bot?

Beide laufen auf dem Go-Bot-Typ gleich. In unserem Test brauchte go-telegram/bot 11 MB gegen 11 MB bei telebot, der Speicher entscheidet also nicht zwischen ihnen. Die neueste Version von go-telegram/bot ist v1.27.0 vom 11. Sept. 2026. Wenn du einem Tutorial folgst, nimm die Bibliothek, die es nutzt.

Bereit, deinen telebot-Bot rund um die Uhr laufen zu lassen? Sieh dir die Tarife bei Telegram-Bot-Hosting an.

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

UNSERE NEUESTEN BLOGS