Aby hostować bota telebot 24/7, uruchamiasz go na maszynie, która jest stale włączona: na VPS-ie z Linuksem z usługą systemd, która uruchamia go ponownie, gdy się zatrzyma, albo w planie dla botów w PlayNHost (od 1,99 USD miesięcznie), gdzie wgrywasz gotowy program, a panel podaje mu token i uruchamia go ponownie, jeśli się zawiesi. W naszym teście bot na telebot 3.3.8 (gopkg.in/telebot.v3) zużył ok. 11 MB pamięci. Bota w Go budujesz na własnym komputerze jako jeden program dla Linuksa x86-64: na serwerze nic się nie kompiluje. Kroki w PlayNHost:
- Zbuduj bota pod Linuksa x86-64 na swoim komputerze, jak pokazano niżej w sekcji Build it for Linux.
- Na stronie hostingu botów Telegram kliknij Utwórz serwer przy wybranym planie. W oknie zamówienia na pytanie Na jaką platformę jest Twój bot? odpowiedz Telegram i wybierz Go.
- Otwórz serwer w panelu. Karta Skonfiguruj swojego bota na stronie Przegląd otwiera się na kroku Połącz z Telegramem; jego pierwszy punkt, Co działa, powinien pokazywać Ten bot uruchamia Go Bot.
- W kroku Połącz z Telegramem wklej token od @BotFather w polu Wklej token swojego bota, kliknij Połączenie, sprawdź wyświetloną nazwę bota i kliknij Tak, dalej.
- W kroku Twój kod kliknij Prześlij pliki, następnie w Files kliknij Prześlij i wybierz swój program o nazwie
bot. Możesz też pozwolić serwerowi go pobrać: na stronie Bot, w panelu Kod, na karcie Ustawienia, wpisz w polu Link do pobrania (opcjonalnie) link https do programu i kliknij Zapisz. - Kliknij Uruchom bota i otwórz Console. Po
[PlayNHost] Starting your bottwój bot wypiszeLogged in as @your_bot, a znacznik na stronie Przegląd zmieni się na Online w Telegramie. - Na stronie Bot, w panelu Telegram, kliknij Otwórz w Telegramie i wyślij botowi
/start.
Tworzenie bota w @BotFather i kartę konfiguracji opisujemy w artykule Jak hostować bota Telegram. Sam typ Go Bot (Plik startowy, Argumenty startowe (opcjonalnie) i link do pobrania) jest taki sam dla botów Discord i Telegram: Jak hostować bota Discord w Go. Ta strona dotyczy telebot: czego używa na serwerze i co warto wiedzieć, zanim go zahostujesz.
Co zmierzyliśmy
| Biblioteka | Wersja | Pamięć bez obciążenia | Od startu do odpowiedzi platformy | Rozmiar programu |
|---|---|---|---|---|
| telebot (Telegram) | 3.3.8 | 11 MB | 0,1 s | 8,1 MB |
| go-telegram/bot (Telegram) | 1.27.0 | 11 MB | 0,1 s | 8,1 MB |
| discordgo (Discord) | 0.29.0 | 12 MB | 0,3 s | 9,0 MB |
| Program w Go bez biblioteki | Go 1.23.12 | 2 MB | brak | 2,1 MB |
Jak: na naszym własnym węźle, w jednorazowym kontenerze ustawionym jak plan bota 1 GB z jednym CPU i obrazem Debian, na którym działa nasz typ Go Bot, program każdej biblioteki wywołał Telegram lub Discord z fałszywym tokenem, który został odrzucony; program bez biblioteki nie wykonał żadnego wywołania. Pamięć to pamięć rezydentna 15 sekund po tej odpowiedzi, czas startu liczymy od uruchomienia do odpowiedzi, a każda wartość to mediana z uruchomień od 2 do 4. Programy zbudowano z Go 1.23.12 i CGO_ENABLED=0.
To dolne granice: program bez czatów i jeszcze bez danych. Twój własny kod, to, co trzyma w pamięci, i liczba czatów dochodzą do tego, więc minimalny program telebot zajmuje niewielką część planu STARTER o pojemności 0,5 GB.
Minimalny bot telebot
Odpowiada na /start, czyta token, który daje mu panel, wypisuje linię gotowości, jasno mówi, gdy Telegram odrzuca token, i zatrzymuje się czysto, gdy klikniesz Zatrzymaj. Umieść oba pliki w jednym folderze, a potem uruchom go mod tidy, które pobiera telebot i zapisuje go.sum.
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()
}
Linia Logged in as @your_bot sprawia, że znacznik zmienia się na Online w Telegramie. Panel podaje programowi token jako TELEGRAM_BOT_TOKEN, a także jako TOKEN, BOT_TOKEN, TELEGRAM_TOKEN i TELOXIDE_TOKEN. Przykład z README telebot czyta os.Getenv("TOKEN"), więc jego linia z tokenem też działa bez zmian.
Budowanie pod Linuksa
Z folderu projektu, na dowolnym komputerze:
# 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 tworzy jeden samodzielny plik, który nie zależy od bibliotek systemowych serwera, więc działa na naszym obrazie Debian niezależnie od systemu, na którym budujesz. Wynikiem jest plik o nazwie bot bez rozszerzenia. Windowsowy .exe ani build pod macOS nie uruchomi się na serwerze: konsola pokaże wtedy [PlayNHost] bot is not a Linux program. Build it for Linux x86-64 (not Windows or macOS) and upload it again.
Gdy token jest błędny
W naszym teście, z fałszywym tokenem, tele.NewBot zwrócił ten błąd (nasz program testowy wypisał go po typie błędu):
*telebot.Error: telegram: Unauthorized (401)
NewBot pyta Telegram, kim jest bot (getMe), zanim zwróci wynik, więc odrzucony token zatrzymuje program, zanim zacznie on polling. telebot zwraca swój błąd ErrUnauthorized dla odpowiedzi Unauthorized od Telegrama. Przykład z README kończy program przez log.Fatal(err); bot powyżej wypisuje zamiast tego Telegram did not accept the bot token. Paste the current one from @BotFather, then restart., czyli linię, którą panel rozpoznaje: pokazuje wtedy baner Telegram nie przyjął tokena twojego bota nad Console.
Aby to naprawić, wyślij w @BotFather /mybots, wybierz swojego bota, potem API Token i skopiuj token ponownie. Na stronie Bot, w panelu Telegram, kliknij Zastąp token, wklej go, kliknij Zapisz token, a potem Zrestartuj teraz.
Co warto wiedzieć o telebot na serwerze
- Błędy podczas pollingu są ciche. Gdy pobranie wiadomości od Telegrama się nie powiedzie,
LongPollertelebot próbuje ponownie od razu, bez przerwy, i wypisuje błąd tylko wtedy, gdy włączone jestVerbose. Dlatego gdy inna kopia bota odpytuje Telegram tym samym tokenem (409 Conflict), ustawiony jest webhook albo token zostanie unieważniony w trakcie działania bota, twój bot nadal działa, ale dostaje niewiele wiadomości lub żadnych, a konsola milczy. Zatrzymaj każdą inną kopię, zanim uruchomisz go tutaj, i zajrzyj do Jak naprawić błąd 409 Conflict bota Telegram. - Podgląd tego, co robi polling.
Verbose: truewtele.Settingsloguje każde żądanie i odpowiedź Telegrama, więc tekst409 Conflictpojawia się w Console, a panel może pokazać Twój bot działa też gdzie indziej. Loguje też wiadomości, które ludzie wysyłają twojemu botowi, więc włączaj to na czas testu, nie na stałe. - Webhook pozostawiony na bocie.
b.Start()nie usuwa webhooka, a gdy jakiś jest ustawiony, polling zawodzi po cichu. Bot powyżej wywołujeb.RemoveWebhook()przed startem, co zachowuje oczekujące wiadomości. Możesz też kliknąć Usuń webhook w panelu Telegram. PollerWebhooktelebot wymaga publicznego adresu HTTPS, którego nasze plany jeszcze nie zawierają: używajLongPoller. - Panika w handlerze kończy program. telebot uruchamia każdy handler w osobnej goroutine (chyba że włączono
Synchronous), a panika tam zatrzymuje wszystko.b.Use(middleware.Recover())zamienia panikę w błąd, który zostaje wypisany. Wywołajb.Useprzedb.Handle: middleware jest dołączany w chwili dodania handlera. - Błędy handlerów są wypisywane za ciebie. Błąd zwrócony przez twój handler trafia do domyślnej obsługi błędów telebot, która wypisuje numer aktualizacji i błąd. Ustaw
OnErrorwtele.Settings, aby to zmienić. - Twój token w komunikatach o błędach. telebot wstawia token do adresu każdego żądania (
/boti token), a błędy sieciowe Go zawierają ten adres. Bot powyżej podmienia token, zanim wypisze błąd. Nie udostępniaj surowego wyjścia konsoli bota, który wypisuje błędy bez zmian. - Czyste zatrzymanie. Panel zatrzymuje bota w Go przez Ctrl+C (
SIGINT).b.Start()działa do wywołaniab.Stop(), więc bot powyżej uruchamia go w goroutine, czeka na sygnał, a potem wywołujeb.Stop(), co anuluje trwające żądanie. - Aktualizacje. Typ Go Bot nie ma pola Pakiety ani źródła Git: twoje moduły są wewnątrz programu. Aby zaktualizować, usuń stary program w Files, wgraj nowy build i uruchom ponownie. Przy linku do pobrania opublikuj nowy build pod tym linkiem, usuń program w Files i kliknij Uruchom.
Własny hosting na VPS z Linuksem
Skopiuj zbudowany program na VPS; nie potrzeba tam Go, a build z CGO_ENABLED=0 nie zależy od bibliotek systemowych VPS-a. Utwórz użytkownika dla bota, wstaw program do jego folderu i trzymaj token w pliku, który może czytać tylko root:
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
Utwórz /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
Uruchom go teraz i przy każdym starcie systemu, a potem śledź jego wyjście:
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo journalctl -u mybot -f
systemctl stop domyślnie wysyła SIGTERM, którego nasłuchuje też bot powyżej, więc zatrzymuje się czysto. Restart=always uruchamia bota ponownie po awarii lub zakończeniu. Najpierw zatrzymaj każdą inną kopię: w telebot 409 Conflict nie pokazuje się też nic w journalctl.
Własny hosting czy plan dla botów
Na VPS-ie, którym zarządzasz sam, zajmujesz się:
- Aktualizacjami i bezpieczeństwem systemu operacyjnego.
- Kopiowaniem każdego nowego buildu, plikiem usługi, plikiem tokena i jego uprawnieniami.
- Czytaniem
journalctl, by dowiedzieć się, czemu bot się zatrzymał. - Kopiami zapasowymi danych bota.
W zamian VPS uruchomi wszystko i możesz mu nadać domenę z HTTPS dla webhooka.
W planie dla botów PlayNHost robi to za ciebie panel:
- Obraz Debian, który uruchamia program dla Linuksa x86-64, oraz kontrola przy starcie, która powie, gdy plik jest buildem pod Windows lub macOS.
- Wgrywanie w Files albo link do pobrania, który serwer pobiera przy starcie.
- Token, sprawdzony w Telegramie, przechowywany w postaci zaszyfrowanej i przekazywany programowi jako
TELEGRAM_BOT_TOKENiTOKEN. - Ponowne uruchomienie bota po awarii. Jeśli zawiesi się znowu w ciągu minuty, pozostaje zatrzymany, a Console podaje powód.
- Przycisk Usuń webhook w panelu Telegram i baner nad Console, gdy twój bot wypisze, że Telegram odrzucił token.
Pytania, które zadają ludzie
Użyć telebot v3 czy v4?
v3.3.8 (6 sie 2024) to najnowsza wersja stabilna i ta, którą zmierzyliśmy. Prace przeniosły się do v4: to domyślna gałąź repozytorium, a jego README instaluje gopkg.in/telebot.v4, ale to wciąż beta (v4.0.0-beta.10, 16 cze 2026). Bety v4 dodają nowsze wersje Telegram Bot API, aż do Bot API 10.1 w v4.0.0-beta.10, której v3.3.8 nie ma. Przykład startowy w README jest w obu taki sam, poza ścieżką importu. Obie działają na naszych serwerach tak samo: build, wgranie, start.
Dlaczego mój bot telebot działa, ale nie odpowiada?
Najczęściej inna kopia odpytuje Telegram tym samym tokenem, na twoim PC lub starym hostingu, albo ustawiony jest webhook. telebot nie wypisuje żadnego z tych problemów, więc konsola wygląda normalnie. Zatrzymaj drugą kopię albo unieważnij token w @BotFather i wklej nowy w panelu Telegram; w tym samym panelu sprawdź też webhook. Aby zobaczyć przyczynę, uruchom raz ponownie z Verbose: true.
Czy mogę użyć webhooka telebot zamiast pollingu?
Jeszcze nie. Webhook wymaga publicznego adresu HTTPS, którego nasze plany jeszcze nie zawierają. LongPoller nie potrzebuje adresu: bot prosi Telegram o nowe wiadomości, z czasem oczekiwania 10 sekund w bocie powyżej.
telebot czy go-telegram/bot?
Oba działają na typie Go Bot tak samo. W naszym teście go-telegram/bot zużył 11 MB wobec 11 MB telebot, więc pamięć nie rozstrzyga między nimi. Najnowsze wydanie go-telegram/bot to v1.27.0 z 11 wrz 2026. Jeśli idziesz za poradnikiem, użyj biblioteki, której on używa.
Gotowy, by twój bot telebot działał bez przerwy? Zobacz plany na stronie hostingu botów Telegram.



