Bir telebot botunu 24/7 barındırmak için onu hep açık kalan bir makinede çalıştırırsınız: durduğunda yeniden başlatan bir systemd hizmetine sahip bir Linux VPS ya da PlayNHost üzerindeki bir bot planı (ayda US$1,99'dan başlayan fiyatlarla). Bot planında bitmiş programı yüklersiniz, panel ona token'ı verir ve çökerse yeniden başlatır. Testimizde telebot 3.3.8 (gopkg.in/telebot.v3) ile yazılmış bir bot yaklaşık 11 MB bellek kullandı. Go botu kendi bilgisayarınızda tek bir Linux x86-64 programı olarak derlenir: sunucuda hiçbir şey derlenmez. PlayNHost'taki adımlar:
- Botunuzu bilgisayarınızda, aşağıda Build it for Linux bölümünde gösterildiği gibi Linux x86-64 için derleyin.
- Telegram bot barındırma sayfasında bir planda Sunucu oluştur düğmesine tıklayın. Sipariş penceresinde Botunuz hangi platform için? sorusuna Telegram yanıtını verin ve Go seçeneğini seçin.
- Sunucunuzu panelde açın. Genel bakış sayfasındaki Botunuzu kurun kartı Telegram’a bağlan adımında açılır; ilk adımı olan Ne çalışır şunu göstermelidir: Bu bot Go Bot çalıştırır.
- Telegram’a bağlan adımında, @BotFather'dan aldığınız token'ı Bot token’ınızı yapıştırın alanına yapıştırın, Bağlan düğmesine tıklayın, gösterilen bot adını kontrol edin ve Evet, devam düğmesine tıklayın.
- Kodunuz adımında Dosya yükle düğmesine tıklayın, sonra Files bölümünde Yükle düğmesine tıklayıp
botadlı programınızı seçin. Ya da sunucunun onu indirmesine izin verin: Bot sayfasında, Kod bölümünde, Ayarlar kartında İndirme bağlantısı (isteğe bağlı) alanına programın https bağlantısını yazın ve Kaydet düğmesine tıklayın. - Botu başlat düğmesine tıklayın ve Console'u açın.
[PlayNHost] Starting your botsatırından sonra botunuzLogged in as @your_botyazar ve Genel bakış sayfasındaki rozet Telegram’da çevrimiçi durumuna geçer. - Bot sayfasında, Telegram bölümünde Telegram’da aç düğmesine tıklayın ve botunuza
/startgönderin.
Botu @BotFather'da oluşturma ve kurulum kartı Telegram botu nasıl barındırılır yazısında anlatılır. Go Bot türünün kendisi (Giriş dosyası, Başlangıç argümanları (isteğe bağlı) ve indirme bağlantısı) Discord ve Telegram botları için aynıdır: Go Discord botu nasıl barındırılır. Bu sayfa telebot ile ilgilidir: sunucuda neyi kullandığı ve barındırmadan önce bilmeniz gerekenler.
Ne ölçtük
| Kütüphane | Sürüm | Yüksüz bellek | Başlangıçtan platformun yanıtına | Program boyutu |
|---|---|---|---|---|
| telebot (Telegram) | 3.3.8 | 11 MB | 0,1 sn | 8,1 MB |
| go-telegram/bot (Telegram) | 1.27.0 | 11 MB | 0,1 sn | 8,1 MB |
| discordgo (Discord) | 0.29.0 | 12 MB | 0,3 sn | 9,0 MB |
| Kütüphanesiz bir Go programı | Go 1.23.12 | 2 MB | yok | 2,1 MB |
Nasıl: kendi düğümümüzde, 1 GB'lık bir bot planı gibi kurulmuş, tek CPU'lu ve Go Bot türümüzün çalıştığı Debian imajını kullanan tek kullanımlık bir konteynerde, her kütüphanenin programı Telegram'ı ya da Discord'u sahte bir token ile çağırdı ve bu reddedildi; kütüphanesiz program hiç çağrı yapmadı. Bellek, o yanıttan 15 saniye sonraki yerleşik bellektir, başlangıç süresi başlatmadan yanıta kadar geçen süredir ve her değer 2 ile 4 arasındaki çalıştırmaların medyanıdır. Programlar Go 1.23.12 ve CGO_ENABLED=0 ile derlendi.
Bunlar alt sınırlardır: henüz sohbeti ve verisi olmayan bir program. Kendi kodunuz, bellekte tuttuğu şeyler ve sohbet sayısı bunlara eklenir; yine de minimal bir telebot programı 0,5 GB'lık STARTER planının küçük bir bölümünü kullanır.
Minimal bir telebot botu
/start komutuna yanıt verir, panelin verdiği token'ı okur, hazır satırını yazar, Telegram token'ı reddettiğinde bunu açıkça söyler ve siz Durdur düğmesine bastığınızda düzgünce durur. İki dosyayı aynı klasöre koyun, sonra go mod tidy komutunu çalıştırın; bu komut telebot'u indirir ve go.sum dosyasını yazar.
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()
}
Logged in as @your_bot satırı, rozeti Telegram’da çevrimiçi durumuna geçiren şeydir. Panel token'ı programınıza TELEGRAM_BOT_TOKEN olarak, ayrıca TOKEN, BOT_TOKEN, TELEGRAM_TOKEN ve TELOXIDE_TOKEN olarak da verir. telebot'un kendi README örneği os.Getenv("TOKEN") okur, dolayısıyla onun token satırı da değiştirilmeden çalışır.
Linux için derleme
Proje klasörünüzden, herhangi bir bilgisayarda:
# 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, sunucunun sistem kütüphanelerine bağlı olmayan, kendi içinde tam tek bir dosya üretir; bu yüzden hangi sistemde derlerseniz derleyin Debian imajımızda çalışır. Sonuç, uzantısız bot adlı bir dosyadır. Windows .exe dosyası veya macOS derlemesi sunucuda çalışmaz: konsol bu durumda şunu gösterir: [PlayNHost] bot is not a Linux program. Build it for Linux x86-64 (not Windows or macOS) and upload it again.
Token yanlışsa
Testimizde, sahte bir token ile tele.NewBot şu hatayı döndürdü (test programımız bunu hatanın türünden sonra yazdırdı):
*telebot.Error: telegram: Unauthorized (401)
NewBot, dönmeden önce Telegram'a botun kim olduğunu sorar (getMe); bu yüzden reddedilen bir token programı polling yapmadan önce durdurur. telebot'un ErrUnauthorized hatası, Telegram'ın Unauthorized yanıtı için döndürülür. README örneği programı log.Fatal(err) ile bitirir; yukarıdaki bot ise bunun yerine Telegram did not accept the bot token. Paste the current one from @BotFather, then restart. yazdırır. Panelin tanıdığı bu satır, Console'un üstünde Telegram bot token’ınızı kabul etmedi başlıklı bir uyarı gösterir.
Düzeltmek için @BotFather'da /mybots gönderin, botunuzu seçin, sonra API Token seçeneğini seçip token'ı yeniden kopyalayın. Bot sayfasında, Telegram bölümünde Token’ı değiştir düğmesine tıklayın, token'ı yapıştırın, Token’ı kaydet düğmesine, ardından Şimdi yeniden başlat düğmesine tıklayın.
telebot'u bir sunucuda kullanırken bilmeniz gerekenler
- Polling sırasındaki hatalar sessizdir. Telegram'dan mesaj isteme başarısız olduğunda telebot'un
LongPoller'ı hemen, hiç ara vermeden yeniden dener ve hatayı yalnızcaVerboseaçıksa yazdırır. Bu yüzden botun başka bir kopyası aynı token ile polling yaparsa (409 Conflict), bir webhook ayarlıysa ya da bot çalışırken token iptal edilirse botunuz çalışmaya devam eder ama çok az mesaj alır ya da hiç almaz ve konsol sessiz kalır. Burada başlatmadan önce diğer tüm kopyaları durdurun ve Telegram botu 409 Conflict hatasını düzeltin yazısına bakın. - Polling'in ne yaptığını görmek.
Verbose: trueayarı (tele.Settingsiçinde) her isteği ve Telegram'ın yanıtını günlüğe yazar; böylece409 Conflictmetni Console'da görünür ve panel Botunuz başka bir yerde de çalışıyor uyarısını gösterebilir. İnsanların botunuza gönderdiği mesajları da günlüğe yazar, bu yüzden bunu kalıcı olarak değil, bir test için açın. - Botta kalmış bir webhook.
b.Start()bir webhook'u kaldırmaz ve biri ayarlıyken polling sessizce başarısız olur. Yukarıdaki bot başlamadan önceb.RemoveWebhook()çağırır; bu, bekleyen mesajları korur. Ayrıca Telegram bölümünde Webhook’u kaldır düğmesine tıklayabilirsiniz. telebot'unWebhookpoller'ı herkese açık bir HTTPS adresi gerektirir, planlarımız bunu henüz içermiyor:LongPollerkullanın. - Bir handler'daki panic programı sonlandırır. telebot her handler'ı kendi goroutine'inde çalıştırır (
Synchronousaçık değilse) ve orada oluşan bir panic her şeyi durdurur.b.Use(middleware.Recover())bir panic'i, bunun yerine yazdırılan bir hataya çevirir.b.Useçağrısınıb.Handleöncesinde yapın: middleware, bir handler eklendiğinde bağlanır. - Handler hataları sizin için yazdırılır. Handler'ınızın döndürdüğü hata, güncelleme numarasını ve hatayı yazdıran telebot'un varsayılan hata işleyicisine gider. Bunu değiştirmek için
OnErroralanınıtele.Settingsiçinde ayarlayın. - Hata mesajlarında token’ınız. telebot token'ı her istek adresine koyar (
/botve ardından token), Go'nun ağ hataları da bu adresi içerir. Yukarıdaki bot, bir hata yazdırmadan önce token'ı değiştirir. Hataları olduğu gibi yazdıran bir botun ham konsol çıktısını paylaşmayın. - Düzgün bir durdurma. Panel bir Go botunu Ctrl+C (
SIGINT) ile durdurur.b.Start(),b.Stop()çağrılana kadar çalışır; bu yüzden yukarıdaki bot onu bir goroutine'de başlatır, sinyali bekler ve ardından devam eden isteği iptal edenb.Stop()çağrısını yapar. - Güncellemeler. Go Bot türünde Paketler alanı ve Git kaynağı yoktur: modülleriniz programın içindedir. Güncellemek için Files bölümünde eski programı silin, yeni derlemeyi yükleyin ve yeniden başlatın. İndirme bağlantısı kullanıyorsanız yeni derlemeyi o bağlantıda yayımlayın, Files bölümündeki programı silin ve Başlat düğmesine basın.
Linux VPS üzerinde kendiniz barındırın
Derlediğiniz programı VPS'e kopyalayın; orada Go gerekmez ve CGO_ENABLED=0 ile yapılmış bir derleme VPS'in sistem kütüphanelerine bağlı değildir. Bot için bir kullanıcı oluşturun, programı onun klasörüne koyun ve token'ı yalnızca root'un okuyabildiği bir dosyada tutun:
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
/etc/systemd/system/mybot.service dosyasını oluşturun:
[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
Şimdi ve her açılışta başlatın, sonra çıktısını izleyin:
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo journalctl -u mybot -f
systemctl stop varsayılan olarak SIGTERM gönderir, yukarıdaki bot bunu da dinler, bu yüzden düzgünce durur. Restart=always, bir çökmeden veya çıkıştan sonra botu yeniden başlatır. Önce diğer tüm kopyaları durdurun: telebot ile bir 409 Conflict journalctl içinde de hiçbir şey göstermez.
Kendi barındırma mı, bot planı mı
Kendinizin yönettiği bir VPS'te şunlar size aittir:
- İşletim sistemi güncellemeleri ve güvenliği.
- Her yeni derlemeyi, servis dosyasını, token dosyasını ve izinlerini kopyalamak.
- Botun neden durduğunu anlamak için
journalctlokumak. - Botun verilerinin yedekleri.
Karşılığında bir VPS her şeyi çalıştırır ve bir webhook için ona HTTPS'li bir alan adı verebilirsiniz.
PlayNHost bot planında bunları panel sizin için yapar:
- Linux x86-64 programı çalıştıran bir Debian imajı ve dosya bir Windows veya macOS derlemesiyse bunu söyleyen bir başlangıç denetimi.
- Files bölümünden yükleme ya da sunucunun başlangıçta indirdiği bir indirme bağlantısı.
- Telegram ile doğrulanan, şifrelenmiş saklanan ve programınıza
TELEGRAM_BOT_TOKENveTOKENolarak verilen token. - Bir çökmeden sonra botun yeniden başlatılması. Bir dakika içinde yeniden çökerse durmuş kalır ve Console nedenini söyler.
- Telegram bölümünde bir Webhook’u kaldır düğmesi ve botunuz Telegram'ın token'ı reddettiğini yazdırdığında Console'un üstünde bir uyarı.
İnsanların sorduğu sorular
telebot v3 mü v4 mü kullanmalıyım?
v3.3.8 (6 Ağu 2024) en yeni kararlı sürümdür ve ölçtüğümüz sürümdür. Çalışma v4'e taşındı: deponun varsayılan dalı odur ve README'si gopkg.in/telebot.v4 kurar, ama hâlâ bir beta (v4.0.0-beta.10, 16 Haz 2026). v4 betaları, v3.3.8'de bulunmayan daha yeni Telegram Bot API sürümlerini ekler; v4.0.0-beta.10'da Bot API 10.1'e kadar. README'deki başlangıç örneği, içe aktarma yolu dışında ikisinde de aynıdır. İkisi de sunucularımızda aynı şekilde çalışır: derle, yükle, başlat.
telebot botum çalışıyor ama neden yanıt vermiyor?
Çoğunlukla başka bir kopya aynı token ile polling yapıyordur, bilgisayarınızda ya da eski bir barındırıcıda; ya da bir webhook ayarlıdır. telebot bu sorunların hiçbirini yazdırmaz, bu yüzden konsol normal görünür. Diğer kopyayı durdurun ya da token'ı @BotFather'da iptal edip yenisini Telegram bölümüne yapıştırın; aynı bölümde webhook olup olmadığına da bakın. Nedeni görmek için bir kez Verbose: true ile yeniden başlatın.
Polling yerine telebot'un webhook'unu kullanabilir miyim?
Henüz hayır. Bir webhook herkese açık bir HTTPS adresi gerektirir, planlarımız bunu henüz içermiyor. LongPoller adres gerektirmez: bot Telegram'dan yeni mesajları ister, yukarıdaki botta 10 saniyelik bir bekleme ile.
telebot mu go-telegram/bot mu?
İkisi de Go Bot türünde aynı şekilde çalışır. Testimizde go-telegram/bot 11 MB kullandı, telebot da 11 MB; yani bellek ikisi arasında belirleyici değil. go-telegram/bot'un en yeni sürümü 11 Eyl 2026 tarihli v1.27.0'dır. Bir öğreticiyi izliyorsanız onun kullandığı kütüphaneyi kullanın.
telebot botunuzu gece gündüz çalıştırmaya hazır mısınız? Planlara Telegram bot barındırma sayfasından bakın.



