Bir aiogram botunu 24/7 barındırmak için onu 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 servisine sahip bir Linux VPS ya da kodunuzu yüklediğiniz, token'ı yapıştırdığınız ve Başlat'a bastığınız bir PlayNHost bot planı (ayda US$1,99'dan başlar, bkz. Telegram bot barındırma). Testimizde aiogram 3.31.0 ile çalışan bir bot yük yokken yaklaşık 173 MB bellek kullandı; en küçük bot planımız STARTER 0,5 GB belleğe sahip. İki yol da long polling kullanır: dp.start_polling(bot) Telegram'dan yeni mesajları ister, bu yüzden botun herkese açık bir adrese ihtiyacı yoktur. PlayNHost'taki 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 söylemelidir: 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ıklayarak Files bölümünü açın ve
bot.pyilerequirements.txtdosyalarını yükleyin ya da Git’i bağla düğmesine tıklayın. - Bot sayfasında, Kod bölümünde, Giriş dosyası'nın
asyncio.run(main())çalıştıran dosya olduğunu kontrol edin (varsayılan olarakbot.py). - Botu başlat düğmesine tıklayın, Console'u açın ve aiogram'ın
Run polling for bot @your_botsatırını bekleyin. Genel bakış sayfasındaki etiket Telegram’da çevrimiçi olarak değişir. Botunuza/startgönderin.
İlk başlatma, pip aiogram'ı ve bağımlılıklarını 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 anlatı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ığı gibi 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şta bellek | Başlangıçtan Telegram'ın yanıtına | Kurulu boyut, bağımlılıklarla |
|---|---|---|---|---|
| aiogram | 3.31.0 | 173 MB | 4,3 sn | 33,9 MB |
| python-telegram-bot | 22.8 | 44 MB | 0,9 sn | 12,3 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 (aiogram: bot.get_me()). Bellek, Telegram token'ı reddettikten 15 saniye sonra botun işlemlerinin tuttuğu miktardır; başlangıç süresi Python'un başlatılmasından kütüphanenin bu yanıtı bildirmesine kadar sürer, dolayısıyla Telegram'a gidiş geliş bir tur içerir. İkisi de bir ısınma turundan 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 (örneğin aiogram'ın bellek depolamasındaki konuşma durumları) ve hizmet verdiği sohbet sayısı bunların üstüne 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, hazır kurulmuş ve başlatılmaya hazır bir bot), bu yüzden oradaki rakamlar bunlarla karşılaştırılamaz.
Minimal bir aiogram botu
/start komutunu yanıtlar, panelin verdiği token'ı okur ve bir hazır satırı yazar. Kütüphaneyi requirements.txt dosyasına koyun:
aiogram>=3,<4
Kodu da bot.py dosyasına yazın:
import asyncio
import logging
import os
import sys
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message
dp = Dispatcher()
@dp.message(CommandStart())
async def start(message: Message) -> None:
await message.answer("Hello! I am running on PlayNHost.")
async def main() -> None:
bot = Bot(os.environ["BOT_TOKEN"])
async with bot.context():
await bot.delete_webhook()
await dp.start_polling(bot)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
asyncio.run(main())
BOT_TOKEN değişkenini okur; bu, aiogram'ın kendi örneklerinin kullandığı addır. Panel token'ı koduna bu adın yanı sıra TELEGRAM_BOT_TOKEN, TOKEN ve TELEGRAM_TOKEN adlarıyla da verir. INFO düzeyinde günlük tutmak, Telegram token'ı kabul ettiğinde aiogram'ın INFO:aiogram.dispatcher:Run polling for bot @your_bot ile başlayan bir satır yazdırmasını sağlar; panel Telegram’da çevrimiçi göstermek için bu satırı okur, dolayısıyla kendi print'inize gerek yoktur. delete_webhook(), polling başlamadan önce başka bir sunucudan kalan webhook'u kaldırır. async with bot.context(), main() bittiğinde, hatayla bittiğinde de, botun Telegram bağlantısını kapatır.
Token yanlışsa
Testimizde, Telegram'ın reddettiği bir token ile test botumuz şunu yazdırdı:
TelegramUnauthorizedError: Telegram server says - Unauthorized
Tam bir traceback'te sınıf aiogram.exceptions.TelegramUnauthorizedError olarak görünür. Telegram'a yapılan ilk çağrı başarısız olur (yukarıdaki botta delete_webhook(); o olmasa getMe, yani start_polling'in yaptığı çağrı), bu yüzden bot hemen 1 çıkış koduyla durur. PlayNHost'ta panel, konsolun üstünde Telegram bot token’ınızı kabul etmedi mesajını Token’ı değiştir düğmesiyle birlikte gösterir.
Düzeltmek için token'ı yeniden kopyalayın: @BotFather'da /mybots gönderin, botunuzu seçin, ardından API Token'ı seçin. Token'ı Bot sayfasında, Telegram bölümünde, Jeton alanına yapıştırın ve botu yeniden başlatın.
Diğer iki durum farklı görünür. Boşluk içeren veya botun numarasından ve gizli kısmın önündeki iki noktadan yoksun bir token, herhangi bir istekten önce başarısız olur: Bot() biçimi kontrol eder ve TokenValidationError fırlatır; mesajı Token is invalid! ile başlar. Bot zaten polling yaparken iptal edilen bir token botu durdurmaz: aiogram Failed to fetch updates - TelegramUnauthorizedError yazar ve birkaç saniyede bir yeniden dener, bu yüzden hiçbir şey yanıt vermezken işlem çalışıyor gibi görünür. Bunu fark etmenin yolu panel bannerıdır.
Bir sunucunun aiogram hakkında bilmesi gerekenler
- Paket ve import adları: ikisi de
aiogram'dır. Yanında aiohttp, pydantic, magic-filter, aiofiles ve certifi de kurulur. - Python sürümü: aiogram 3.31 için Python 3.10 ile 3.14 arası gerekir. Kod bölümündeki Çalışma ortamı tam olarak 3.10 ile 3.14 arasını sunar, 3.12 önerilen olarak işaretlidir.
- aiogram 2 kodu aiogram 3'te çalışmaz:
Executorkaldırıldı, bu yüzdenexecutor.start_polling(dp)yerineawait dp.start_polling(bot)yazılır.requirements.txtdosyasıaiogram==2.25.2gibi bir 2.x sürümünü sabitleyen bir eğitim, sürüm 2 kodudur; aşağıdaki soruya bakın. - Başka bir sunucudan kalan webhook:
start_pollingonu kaldırmaz ve bir webhook ayarlıyken Telegram polling'i reddeder, bu yüzden aiogramTelegramConflictErroryazar ve yeniden dener.await bot.delete_webhook()satırını yukarıdaki gibi tutun ya da Bot sayfasında, Telegram bölümünde Webhook’u kaldır düğmesine tıklayın. - Günlük kaydı:
logging.basicConfigolmadan aiogram'ınINFOsatırları, hazır satırı dahil, görünmez.INFOdüzeyinde ayrıca her güncelleme için bir satır yazar (Update id=... is handled); yoğun bir botta, hazır satırını koruyanlogging.getLogger("aiogram.event").setLevel(logging.WARNING)satırını ekleyin. - Hangi güncellemeler gelir:
allowed_updatesgeçmezsenizstart_polling, Telegram'dan yalnızca handler'ınızın olduğu güncelleme türlerini ister. - İkinci bir kopya: aynı token ile başka bir kopya polling yaptığında Telegram
409 Conflictyanıtı verir ve aiogram çalıştığı sürece yeniden dener. Panel Botunuz başka bir yerde de çalışıyor mesajını gösterir. Bkz. Telegram botu 409 Conflict hatasını düzeltin.
Kendiniz bir Linux VPS'te barındırın
Debian veya Ubuntu'da Python'u kurun, bot için bir kullanıcı oluşturun ve aiogram'ı bir sanal ortama kurun. python3 --version çıktısının 3.10 ile 3.14 arasında 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, tek bir satır yazın, kaydedin, ardından sudo chmod 600 /etc/tgbot.env komutunu çalıştırın:
BOT_TOKEN=123456789:your-token-from-botfather
/etc/systemd/system/tgbot.service dosyasını oluşturun:
[Unit]
Description=Telegram bot (aiogram)
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
Ş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
Günlük satırları olduğu anda journal'a ulaşır; PYTHONUNBUFFERED=1, eklediğiniz her print() için aynısını yapar, aksi halde Python bir terminale yazmadığında onları bir tamponda bekletir. systemctl stop tgbot, SIGTERM gönderir; start_polling bunu polling'i durdurup botun oturumunu kapatarak işler. Kodu değiştirdikten sonra sudo systemctl restart tgbot komutunu çalıştırın. Önce bilgisayarınızdaki her kopyayı durdurun, yoksa Telegram 409 Conflict yanıtı 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, paketleri yeniden kurma, unit dosyası, journal'ı okuma ve botun yanıt vermeyi bıraktığını fark etme size aittir. Karşılığında root yetkiniz olur ve bir alan adı ile HTTPS eklerseniz aiogram'ın webhook modunu kullanabilirsiniz.
- Bot planında panel yapar:
requirements.txtdeğiştiğinde kurar, çökmeden sonra botu yeniden başlatır, token'ı kaydetmeden önce Telegram ile doğrular, onu koduna beş adla verir, konsolu okur ve bot yanıt vermeyi bıraktığında nedeni söyler (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çermiyor, bu yüzden oradaki botlar long polling kullanır,start_pollingda tam olarak bunu yapar.
Ayrıca bkz. aiogram botunda MySQL veritabanı nasıl kullanılır (aiomysql).
Sık sorulan sorular
aiogram 2 botu çalıştırabilir miyim?
Mümkünse aiogram 3'e taşıyın: aiogram'ın geçiş kılavuzu, kaldırılan Executor ile başlayarak değişiklikleri listeler. Son aiogram 2 sürümü olan 2.25.2, 6 Ekim 2023'te çıktı. Python 3.7 ile 3.10 arasını desteklenen olarak listeler ve PyPI'nin hazır paketleri yalnızca Python 3.11'e kadar sunduğu 3.9'dan eski bir aiohttp gerektirir. Taşımadan önce eski kodun çalışması gerekiyorsa aiogram==2.25.2 sürümünü requirements.txt içinde sabitleyin ve Çalışma ortamı'nı listelediği en yeni sürüm olan Python 3.10 yapın.
aiogram botum neden çalışıyor görünüyor ama hiç yanıt vermiyor?
aiogram, polling başladıktan sonra yeniden denemeye devam eder: @BotFather'da iptal edilen bir token, aynı token'ı kullanan başka bir kopya ve botta kalmış bir webhook durumunda. Failed to fetch updates ile başlayan satırlara Console'da bakın; panel bu üç durumun her birini nedenini söyleyen bir banner'a çevirir ve token ile webhook için bir düğme sunar.
aiogram'ın FSM durumları nerede tutulur?
Varsayılan bellek depolamasında bot işleminin içinde: bot yeniden başladığında, örneğin kodu değiştirdikten sonra, kaybolurlar. Onları korumak için işlemin dışında bir depolama kullanın; örneğin erişebildiğiniz bir Redis sunucusuyla aiogram'ın Redis depolaması.
Bir aiogram botunu çevrimiçi tutmak için webhook gerekir mi?
Hayır. start_polling Telegram'dan yeni mesajları istemeye devam eder, bu yüzden işlem çalıştığı sürece bot yanıt verir. Webhook kullanan bir botu taşımak için: Telegram botunuzu PlayNHost’a nasıl taşırsınız.
aiogram, STARTER (0,5 GB) dahil her PlayNHost bot planında çalışır. Planları karşılaştırın ve Sunucu oluştur düğmesine Telegram bot barındırma sayfasında tıklayın.



