Bir Telegraf botunu 24/7 barındırmak için onu her zaman açık kalan bir makinede çalıştırırsınız: durduğunda yeniden başlatan bir systemd servisiyle bir Linux VPS'te ya da PlayNHost üzerinde bir bot planında (ayda US$1,99'dan başlayan fiyatlarla). Panel paketlerinizi kurar, token'ı kodunuza verir ve bot çökerse yeniden başlatır. Testimizde Telegraf 4.16.3 kullanan bir bot, Node.js 22 üzerinde yaklaşık 60 MB bellek kullandı. Telegraf'ın bot.launch() çağrısı varsayılan olarak long polling kullanır ve planlarımızın ihtiyacı olan da budur: webhook için henüz herkese açık bir HTTPS adresleri yok. PlayNHost'taki adımlar:
- Telegram bot barındırma sayfasında bir planda Sunucu oluştur'a tıklayın. Sipariş penceresinde Botunuz hangi platform için? sorusuna Telegram yanıtını verin ve Node.js'i 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 Node.js 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'a tıklayın, gösterilen bot adını kontrol edin ve Evet, devam'a tıklayın.
- Kodunuz adımında Dosya yükle'ye tıklayın ve
package.jsonileindex.jsdosyalarınızınode_modulesolmadan yükleyin ya da Git’i bağla'ya tıklayın. - Bot sayfasında, Kod bölümünde, Giriş dosyası'nın botunuzu başlatan dosya olduğunu kontrol edin (varsayılan
index.js). Değiştirirseniz Kaydet'e tıklayın. - Botu başlat'a tıklayın ve Console'u açın. npm ilk başlatmada Telegraf'ı kurar, ardından botunuz
Logged in as @your_botyazdırır ve Genel bakış sayfasındaki etiket Telegram’da çevrimiçi olur. - Bot sayfasında, Telegram bölümünde Telegram’da aç'a tıklayın ve botunuza
/startgönderin.
Botu @BotFather'da oluşturma ve panel adımları Telegram botu nasıl barındırılır yazısında anlatılıyor. Bu sayfa Telegraf'ın kendisiyle ilgili: bir sunucuda neye ihtiyaç duyduğu ve barındırmadan önce bilmeniz gerekenler.
Ne ölçtük
| Kütüphane | Sürüm | Başlangıçtan sonra bellek | Başlangıçtan Telegram'ın yanıtına | Kurulum boyutu |
|---|---|---|---|---|
| Telegraf | 4.16.3 | 60 MB | 0,2 sn | 2,7 MB |
| grammY | 1.46.0 | 60 MB | 0,2 sn | 3,0 MB |
| node-telegram-bot-api | 2.3.0 | 63 MB | 0,2 sn | 2,4 MB |
| Yalnızca Node.js 22, kütüphanesiz | 22.23.4 | 43 MB | yok | yok |
Nasıl: kendi node'umuzda, 1 GB'lık bir bot planı gibi kurulmuş tek kullanımlık bir konteynerde (Node.js 22 imajı ve Node.js bot türümüzün başlatma komutu, Node'un bellek sınırı yüzde 80'de), her bot Telegram'ı sahte bir token ile çağırdı ve Telegram bunu reddetti. Bellek, bu yanıttan 15 saniye sonraki resident bellektir, başlangıç süresi launch'tan yanıta kadar sayılır ve her değer 2 ile 4 arasındaki çalıştırmaların medyanıdır.
Bunlar alt sınırlardır: henüz sohbeti ve verisi olmayan bir bot. Kendi kodunuz, bellekte tuttuğu şeyler ve sohbet sayısı bunlara eklenir, dolayısıyla kütüphane 0,5 GB'lık STARTER planının küçük bir kısmıdır.
Minimal bir Telegraf botu
/start komutuna yanıt verir, panelin verdiği token'ı okur ve bir hazır satırı yazdırır. Her iki dosyayı da botunuzun ana klasörüne koyun.
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"));
Telegraf'ın kendi örnekleri process.env.BOT_TOKEN okur. Panel, token'ı kodunuza TELEGRAM_BOT_TOKEN olarak ve ayrıca BOT_TOKEN, TOKEN, TELEGRAM_TOKEN ve TELOXIDE_TOKEN olarak verir, böylece bu örnekler değişiklik yapmadan çalışır. Logged in as @your_bot satırı, etiketi Telegram’da çevrimiçi yapan şeydir.
Token yanlışsa
Testimizde, sahte bir token ile Telegraf'ın bot.launch() çağrısı bir TelegramError ile başarısız oldu; bunun err.code değeri 401'dir. Ad ve mesaj olarak yazdırıldığında şöyle görünür:
Error: 401: Unauthorized
Ad Error olarak görünür, çünkü Telegraf'ın hata sınıfı kendi adını belirlemez. Telegraf reddedilen bir token'ı yeniden denemez: bot.launch() hemen başarısız olur, hiç token almayan bir bot da öyle (401: Bot Token is required). Yukarıdaki bot ikisini de yakalar ve bunun yerine Telegram did not accept the bot token. Paste the current one from @BotFather, then restart. yazdırır, panel de Console'un üstünde Telegram bot token’ınızı kabul etmedi bandını gösterir. Düzeltmek için @BotFather'a /mybots gönderin, botunuzu seçin, sonra API Token'ı seçip token'ı yeniden kopyalayın. Bot sayfasında, Telegram bölümünde Token’ı değiştir'e tıklayın, yapıştırın, Token’ı kaydet'e ve ardından Şimdi yeniden başlat'a tıklayın.
Telegraf'ın bir sunucuda bilinmesi gerekenler
- Sürümler: en yeni Telegraf 4.16.3'tür ve 29 Şub 2024'te yayımlandı. 4.16.0 sürümü (25 Şub 2024) Telegram'ın Bot API 7.0 ve 7.1'ini ekledi; Telegram'ın kendi değişiklik günlüğü Bot API 10.3'te (24 Ağu 2026). GitHub deposuna en son 24 Eyl 2026'da push yapıldı. Testimizde 4.16.3, Node.js 22 üzerinde normal şekilde kuruldu ve başladı.
- Hazır satırı
launch()callback'ine konur.bot.launch()yalnızca bot durduğunda döner, bu yüzden bot çalıştığı sürececonsole.logçağrısı,await bot.launch()sonrasında hiç yazdırılmaz. 4.16.0'dan berilaunch(), Telegram token'ı kabul ettiğinde Telegraf'ın çağırdığı bir callback alır vebot.botInfodolu gelir. bot.catchayarlamazsanız bir komuttaki hata botu durdurur. Telegraf'ın varsayılan işleyicisi güncellemeyle birlikteUnhandled error while processingyazdırır ve hatayı yeniden fırlatır, bu da polling'i bitirir ve süreç durur. Panelimiz çöken bir botu yaklaşık bir dakika içinde yeniden başlatır, ama o zamana kadar çevrimdışıdır. Yukarıdaki gibibot.catchile hata yazdırılır ve bot çalışmaya devam eder.- Her güncellemenin 90 saniyesi vardır. İşleyicileri daha uzun süren bir güncelleme hata olarak bildirilir (
handlerTimeoutseçeneği, varsayılan 90.000 ms) ve bu hatabot.catch'e gider. Daha uzun işler içinnew Telegraf(token, { handlerTimeout: ... })verin. - Botta kalmış bir webhook sizin yerinize kaldırılır.
bot.launch(),webhookseçeneği olmadan çağrılırsa polling'den öncedeleteWebhookçağırır vedropPendingUpdates: truevermediğiniz sürece bekleyen mesajları korur.bot.launch({ webhook: ... })herkese açık bir HTTPS adresi gerektirir, bu planlarda henüz yok: düzbot.launch()kullanın. Webhook kullanan bir hosttan taşınma: Telegram botunuzu PlayNHost’a nasıl taşırsınız. - Botun başka bir kopyası bunu durdurur.
409 Conflictdurumunda (aynı token başka bir yerde polling yapıyor) Telegraf'ın polling'i yeniden denemek yerine hata fırlatır. Panel Botunuz başka bir yerde de çalışıyor bandını gösterir: bilgisayarınızdaki veya eski hostunuzdaki kopyayı durdurun. Bkz. Telegram botu 409 Conflict hatasını düzeltin. Polling sırasında ağ hataları,429ve Telegram'ın kendi5xxhataları, Telegram'ın istediği bekleme süresinden ya da 5 saniyeden sonra yeniden denenir. - Node.js sürümü: Telegraf 4.16.3, Node.js 12.20 veya 14.13.1 ve üstünü ister. Kod bölümündeki Çalışma ortamı, Node.js 20, 22 (recommended), 24, 25 ve 26 sunar.
- Bellek sınırı: başlatma betiği
NODE_OPTIONS=--max-old-space-sizedeğerini planınızın belleğinin yüzde 80'ine ayarlar, böylece sürecin geri kalanına yer kalır. Node.js başlatma betiğinin ayrıntıları: Node.js Discord botu nasıl barındırılır.
Linux VPS'te kendiniz barındırın
Debian 12 veya 13'te ya da Ubuntu 24.04'te, Telegraf için dağıtımın paketi yeterlidir (Debian 12 Node.js 18.20, Debian 13 20.19, Ubuntu 24.04 18.19 ile gelir):
sudo apt update
sudo apt install nodejs npm
node --version
Bot için bir kullanıcı oluşturun, dosyalarınızı kopyalayın ve paketleri kurun:
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
Token'ı kodunuzun dışında, yalnızca root'un okuyabileceği bir dosyada tutun:
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=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
Ş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
Restart=always, bir çökmeden veya process.exit(1) çağrısından sonra botu yeniden başlatır. systemctl stop mybot SIGTERM gönderir, process.once satırları bunu bot.stop()'a çevirir. Önce diğer tüm kopyaları durdurun, yoksa Telegram ikisine de 409 Conflict yanıtı verir.
Kendi başınıza barındırma veya bot planı
Kendiniz yönettiğiniz bir VPS'te şunlarla siz ilgilenirsiniz:
- İşletim sistemi güncellemeleri ve güvenliği, ayrıca Node.js yükseltmeleri.
- Her değişiklikten sonra
npm installçalıştırmak, servis dosyası, token dosyası ve izinleri. - Botun neden durduğunu anlamak için
journalctlokumak. - Botun verilerinin yedekleri.
Karşılığında bir VPS her şeyi çalıştırır ve ona webhook için HTTPS'li bir alan adı verebilirsiniz.
PlayNHost bot planında bunu panel sizin için yapar:
- Bir Node.js sürüm seçici ve
npm install:package.json, kilit dosyası veya Node.js sürümü değiştiğinde çalışır. - Kaydedilmeden önce Telegram ile doğrulanan, şifreli saklanan ve kodunuza verilen token.
- Çökmeden sonra botu yeniden başlatma. Bir dakika içinde yeniden çökerse durmuş halde kalır ve Console nedenini söyler.
- Telegram token'ı reddettiğinde, başka bir kopya çalıştığında ya da bir webhook ayarlı olduğunda nedeni belirten, Console'un üstündeki bantlar ve Telegram bölümünde bir Webhook’u kaldır düğmesi.
- Panelden yükleme, Git ile dağıtım ve yedekler.
Sık sorulan sorular
await bot.launch() sonrasında neden hiçbir şey yazdırılmıyor?
Çünkü bot.launch() polling bitene kadar bekler ve polling bot çalıştığı sürece devam eder. Sonrasındaki kod yalnızca bot durduğunda çalışır. Başlangıç mesajlarını callback'e koyun, bot.launch(() => ...), ve komutları launch() çağırmadan önce kaydedin.
Telegraf kullanmaya devam edebilir miyim, yoksa grammY'ye mi geçmeliyim?
Çalışan bir Telegraf 4 botu planlarımızda olduğu gibi çalışır: barındırmak için hiçbir şeyi değiştirmeniz gerekmez. Son sürümü Şubat 2024'tendir, bu yüzden Telegram'ın Bot API 7.1'den sonra eklediği yöntemlerin Telegraf'ta kısayolu yoktur. grammY 1.46.0 (26 Ağu 2026) Bot API 10.3'ü destekler ve Node.js için başlangıç botumuz onu kullanır. Telegraf'ın sunduğundan daha yeni bir şeye ihtiyaç duyduğunuzda geçin.
Telegraf botum 409: Conflict ile durdu. Şimdi ne yapmalıyım?
Başka bir kopya aynı token ile polling yapıyor, çoğu zaman bilgisayarınızda ya da eski hostunuzda. Telegraf yeniden denemek yerine durur. Panel onu yaklaşık bir dakika içinde yeniden başlatır; ardından bir dakika içinde yine durursa durmuş halde kalır. Diğer kopyayı bulup durdurun ya da @BotFather'da yeni bir token oluşturup Token’ı değiştir ile yapıştırın.
Telegraf'ı Bun üzerinde çalıştırabilir miyim?
Evet. Sipariş verirken Node.js yerine Bun'ı seçin: Telegram bot barındırma sayfamız Telegraf'ı bunun için listeler. Bu sayfadaki adımlar Node.js içindir.
Telegraf botunuzu gece gündüz çalıştırmaya hazır mısınız? Planlara Telegram bot barındırma sayfasından bakın.



