Bir python-telegram-bot botunu 24/7 barındırmak için onu kendi bilgisayarınızda değil, hep açık kalan bir makinede çalıştırın: çökme veya yeniden başlatma sonrası botu tekrar başlatan bir systemd servisi olan bir Linux VPS ya da PlayNHost bot planı (ayda US$1,99’dan başlayan fiyatlarla, bkz. Telegram bot barındırma); kodunuzu yükler, token’ı yapıştırır ve Start’a basarsınız. Testimizde bir python-telegram-bot 22.8 botu yük yokken yaklaşık 44 MB bellek kullandı; en küçük bot planımız STARTER 0,5 GB’a sahip. İki yol da long polling kullanır: run_polling() Telegram’dan yeni mesajları ister, bu yüzden botun herkese açık bir adrese ihtiyacı yoktur. PlayNHost adımları:
- Telegram’da @BotFather’a
/newbotgönderin ve verdiği token’ı kopyalayın. - Telegram bot barındırma sayfasında bir planda Sunucu oluştur düğmesine tıklayın. Sipariş penceresinde Botunuz hangi platform için? sorusunu Telegram ile yanıtlayın ve Python’u 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 Python Bot çalıştırır.
- Telegram’a bağlan adımında token’ı yapıştırın ve 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ıp Files sayfasını açın ve
bot.pyilerequirements.txtdosyalarını yükleyin ya da Git’i bağla düğmesine tıklayın. Henüz kodunuz yok mu? Başlangıç botu oluştur sizin için bir python-telegram-bot 22 botu yazar. - Bot sayfasında, Kod bölümünde, Giriş dosyası alanının
run_polling()çağıran dosya olduğunu kontrol edin (varsayılan olarakbot.py). - Botu başlat düğmesine tıklayın, Console sayfasını açın ve
Logged in as @your_botsatırını bekleyin. Genel bakış sayfasındaki rozet Telegram’da çevrimiçi olarak değişir. Botunuza/startgönderin.
İlk başlatma, pip python-telegram-bot’u kurarken daha uzun sürer. Bundan sonra yalnızca requirements dosyanız, ek paketler veya Python sürümü değiştiğinde ya da günde bir kez yeniden kurar. Ekran görüntüleriyle adım adım: Telegram botu nasıl barındırılır.
Ne ölçtük
Üç Python Telegram kütüphanesini kendi sunucularımızdan birinde, panelin bir Python botunu çalıştırdığı şekilde kurulmuş tek kullanımlık konteynerlerde çalıştırdık: Python 3.12 (önerilen olarak işaretli Çalışma ortamı), aynı pip komutuyla kurulan paketler, 1 GB bellek sınırı ve bir CPU çekirdeği.
| Kütüphane | Sürüm | Boştaki bellek | Başlangıçtan Telegram’ın yanıtına | Bağımlılıklarla kurulu boyut |
|---|---|---|---|---|
| python-telegram-bot | 22.8 | 44 MB | 0,9 sn | 12,3 MB |
| aiogram | 3.31.0 | 173 MB | 4,3 sn | 33,9 MB |
| pyTelegramBotAPI | 4.37.1 | 40 MB | 0,7 sn | 21,9 MB |
| Yalnızca Python 3.12 | 9 MB |
Her bot kütüphaneyi yükledi ve sahte bir token ile Telegram’a kim olduğunu sordu (python-telegram-bot: Application.initialize()). Bellek, Telegram token’ı reddettikten 15 saniye sonra botun süreçlerinin tuttuğu miktardır; başlangıç süresi Python’un başlatılmasından kütüphanenin bu yanıtı bildirmesine kadar sürer, bu yüzden Telegram’a bir gidiş dönüşü de içerir. İkisi de bir ısınma çalıştırmasından sonraki üç çalıştırmanın medyanıdır.
Bu rakamlar kütüphanenin tabanıdır: sohbet yok, çalışan handler yok, önbellekte hiçbir şey yok. Kendi kodunuz, belleğinde tuttuğu veriler ve hizmet verdiği sohbet sayısı bunların üzerine eklenir, bu yüzden planı botunuzun yaptığı işe göre seçin. Daha eski sayfamız PlayNHost’ta python-telegram-bot ve aiogram karşılaştırması farklı bir kurulumu ölçtü (Python 3.13, derlenmiş ve başlatılmaya hazır bir bot), bu yüzden rakamları bunlarla karşılaştırılamaz.
Minimal bir python-telegram-bot botu
/start komutuna yanıt verir, panelin verdiği token’ı okur ve bir hazır satırı yazdırır. Kütüphaneyi requirements.txt dosyasına koyun:
python-telegram-bot>=22,<23
Kodu da bot.py dosyasına yazın:
import os
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.effective_message.reply_text("Hello! I am running on PlayNHost.")
async def post_init(application: Application) -> None:
print(f"Logged in as @{application.bot.username}")
def main() -> None:
application = (
Application.builder()
.token(os.environ["TELEGRAM_BOT_TOKEN"])
.post_init(post_init)
.build()
)
application.add_handler(CommandHandler("start", start))
application.run_polling(allowed_updates=Update.ALL_TYPES)
if __name__ == "__main__":
main()
post_init, uygulama başlatıldıktan sonra çalışır; python-telegram-bot token’ı Telegram ile tam bu sırada doğrular, bu yüzden Logged in as @your_bot satırı yalnızca Telegram token’ı kabul ettikten sonra görünür. Panel Telegram’da çevrimiçi durumunu göstermek için bu satırı okur. Panel token’ı kodunuza TELEGRAM_BOT_TOKEN olarak, ayrıca BOT_TOKEN, TOKEN ve TELEGRAM_TOKEN olarak da verir; bu yüzden kütüphanenin örneklerinden başlıyorsanız os.environ["TOKEN"] de çalışır; örnekler bir "TOKEN" yer tutucusu kullanır.
Token yanlışsa
Testimizde, Telegram’ın reddettiği bir token ile test botumuz şunu yazdırdı:
InvalidToken: The token `1000000000:AAFakeTokenForAMemoryTestNotReal00000` was rejected by the server.
python-telegram-bot, polling başlamadan önce token’ı doğrular, bu yüzden yukarıdaki bot 1 çıkış koduyla hemen durur. Konsol önce bir traceback ile Network Retry Loop (Bootstrap Initialize Application): Invalid token. Aborting retry loop. satırını, ardından hatanın kendi traceback’ini gösterir; bunun son satırı şudur: telegram.error.InvalidToken: The token `...` was rejected by the server. PlayNHost’ta panel, konsolun üstünde Telegram bot token’ınızı kabul etmedi iletisini ve Token’ı değiştir düğmesini gösterir. Her iki traceback’in de token’ın kendisini içerdiğini unutmayın: bu konsol çıktısını herkese açık hiçbir yere yapıştırmayın.
Düzeltmek için token’ı yeniden kopyalayın: @BotFather’da /mybots gönderin, botunuzu seçin, ardından API Token seçeneğini seçin. Onu Bot sayfasında, Telegram bölümünde, Jeton altına yapıştırın ve botu yeniden başlatın. Bot zaten polling yaparken token iptal edilirse, python-telegram-bot Network Retry Loop (Polling Updates): Invalid token. Aborting retry loop. kaydeder ve polling’i durdurur, ancak süreç çalışmaya devam eder; bu yüzden hiçbir şey yanıt vermezken bot çalışıyor gibi görünür. Panel aynı bannerı gösterir.
Bir barındırıcının python-telegram-bot hakkında bilmesi gerekenler
- Paket ve import adları:
python-telegram-botkurarsınız vetelegramiletelegram.extimport edersiniz. - Python sürümü: python-telegram-bot 22.8, Python 3.10 veya daha yenisini gerektirir. Kod bölümündeki Çalışma ortamı 3.10’dan 3.14’e kadar sunar ve 3.12 önerilen olarak işaretlidir, bu yüzden her seçim bunu karşılar.
- Başka bir barındırıcıdan kalan webhook: polling’e başlamadan önce
run_polling()bot için ayarlanmış tüm webhook’ları siler, bu yüzden bir webhook barındırıcısından taşınan bot ek kod olmadan çalışır. Telegram’da bekleyen mesajlar,drop_pending_updates=Truegeçmediğiniz sürece saklanır. - Loglama: python-telegram-bot başlangıcını
INFOdüzeyinde kaydeder; Python loglamayı kurana kadar bunu göstermez, bu yüzden yukarıdaki bot kendi hazır satırını yazdırır.logging.basicConfig(level=logging.INFO)ileINFO:telegram.ext.Application:Application startedkaydeder, bunu panel de hazır olarak okur. Bunu yaparsanız kütüphanenin kendi örneklerinin yaptığı gibilogging.getLogger("httpx").setLevel(logging.WARNING)satırını da ekleyin:INFOdüzeyinde HTTP kütüphanesi her istek URL’sini kaydeder ve Telegram’ın istek URL’leri token’ınızı içerir. - Zamanlanmış işler:
JobQueuebir ek gerektirir.python-telegram-bot[job-queue]>=22,<23satırınırequirements.txtdosyasına yazın; bu olmadanapplication.job_queuedeğeriNoneolur ve kütüphane şunu uyarır:No `JobQueue` set up. - İkinci bir kopya: başka bir kopya aynı token ile polling yaptığında Telegram
409 Conflictyanıtını verir. python-telegram-botException happened while polling for updates.kaydeder ve denemeye devam eder, bu yüzden bot çalışıyor gibi görünür ama mesajları kaçırır. Panel Botunuz başka bir yerde de çalışıyor iletisini gösterir. Bkz. Telegram botu 409 Conflict hatasını düzeltin.
Bir Linux VPS üzerinde kendiniz barındırın
Debian veya Ubuntu üzerinde Python’u kurun, bot için bir kullanıcı oluşturun ve kütüphaneyi bir sanal ortama kurun. python3 --version çıktısının 3.10 veya daha yeni olduğunu kontrol edin.
sudo apt update
sudo apt install -y python3 python3-venv
sudo useradd --system --create-home --home-dir /opt/tgbot --shell /usr/sbin/nologin tgbot
sudo cp bot.py requirements.txt /opt/tgbot/
sudo -u tgbot python3 -m venv /opt/tgbot/venv
sudo -u tgbot /opt/tgbot/venv/bin/pip install -r /opt/tgbot/requirements.txt
Token’ı yalnızca root’un okuyabildiği bir dosyaya koyun. Dosyayı sudo nano /etc/tgbot.env ile açın, bir satır yazın, kaydedin, ardından sudo chmod 600 /etc/tgbot.env çalıştırın:
TELEGRAM_BOT_TOKEN=123456789:your-token-from-botfather
/etc/systemd/system/tgbot.service dosyasını oluşturun:
[Unit]
Description=Telegram bot (python-telegram-bot)
Wants=network-online.target
After=network-online.target
[Service]
User=tgbot
WorkingDirectory=/opt/tgbot
EnvironmentFile=/etc/tgbot.env
Environment=PYTHONUNBUFFERED=1
ExecStart=/opt/tgbot/venv/bin/python /opt/tgbot/bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Servisi şimdi ve her açılışta başlatın, ardından çıktısını izleyin:
sudo systemctl daemon-reload
sudo systemctl enable --now tgbot
sudo journalctl -u tgbot -f
PYTHONUNBUFFERED=1 burada önemlidir: Python’un çıktısı bir terminale gitmediğinde blok halinde tamponlanır, bu yüzden bu olmadan Logged in as satırı journal’a ulaşmak yerine bir tamponda bekleyebilir. systemctl stop tgbot, SIGTERM gönderir ve run_polling() bunu temiz bir şekilde kapanarak işler. Kodu değiştirdikten sonra sudo systemctl restart tgbot çalıştırın. Önce bilgisayarınızdaki tüm kopyaları durdurun, yoksa Telegram 409 Conflict yanıtını verir.
Kendi barındırmanız mı, bot planı mı
- Yönettiğiniz bir VPS’te: sistem güncellemeleri, Python sürümü, sanal ortam, paketlerin yeniden kurulması, unit dosyası, journal’ın okunması ve botun yanıt vermeyi bıraktığının fark edilmesi size aittir. Karşılığında root yetkiniz vardır ve bir alan adı ile HTTPS eklerseniz webhook çalıştırabilirsiniz.
- Bir bot planında panel şunları yapar:
requirements.txtdosyasını değiştiğinde kurar, bir çökmeden sonra botu yeniden başlatır, token’ı kaydetmeden önce Telegram ile doğrular, onu kodunuza beş adla verir, konsolu okur ve bot yanıt vermeyi bıraktığında nedeni adlandırır (reddedilen bir token, ikinci bir kopya, bir webhook); token ve webhook için bir düğme de sunar. Bot planlarımız henüz herkese açık bir HTTPS adresi içermez, bu yüzden oradaki botlar long polling kullanır verun_polling()tam olarak bunu yapar.
Ayrıca bkz. python-telegram-bot botunda MySQL veritabanı kullanma (aiomysql).
Sık sorulan sorular
Bir python-telegram-bot botunu çevrimiçi tutmak için webhook gerekir mi?
Hayır. run_polling() Telegram’a açık bir bağlantı tutar ve yeni mesajları ister, bu yüzden bot, süreç çalıştığı sürece yanıt verir. Webhook herkese açık bir HTTPS adresi gerektirir ve bot planlarımız bunu henüz içermez. Webhook kullanan bir botu taşımak için: Telegram botunuzu PlayNHost’a nasıl taşırsınız.
Token’ım konsolda neden göründü?
İki yaygın yerde görünür: Telegram token’ı reddettiğinde InvalidToken iletisi ve loglama INFO düzeyindeyken HTTP kütüphanesinin istek satırları. Yukarıda gösterildiği gibi httpx logger’ını WARNING olarak ayarlayın. Başlangıç botumuz da InvalidToken yakalar ve onun yerine düz bir satır yazdırır.
run_repeating ve diğer zamanlanmış işleri kullanabilir miyim?
Evet, job-queue ekiyle; bunu requirements.txt dosyasına yazın. Ek, requirements dosyası değiştiği için APScheduler’ı bir sonraki başlatmada kurar. İşler bot sürecinin içinde çalışır, bu yüzden bot çalıştığı sürece çalışmaya devam eder.
Başlangıç botu python-telegram-bot kullanıyor mu?
Evet. Bir Python sunucusunda Başlangıç botu oluştur bot.py dosyasını ve python-telegram-bot 22 içeren bir requirements.txt dosyasını yazar. /start komutuna yanıt verir, Logged in as @your_bot yazdırır ve token’ı log satırlarının dışında tutar. İstediğiniz gibi değiştirin, ardından yeniden başlatın.
python-telegram-bot her PlayNHost bot planında çalışır, STARTER (0,5 GB) ve üzeri. Planları karşılaştırın ve Sunucu oluştur düğmesine Telegram bot barındırma sayfasından tıklayın.



