Yalnızca dizüstünüz açıkken çalışan bir Telegram botu gerçekte çalışıyor değildir — demo yapıyordur. Gerçekten çevrimiçi olması, gece 3'te yanıt vermesi, sizin yeniden başlatmalarınızdan ve kendi çökmelerinden sağ çıkması için bir sunucuda yaşaması gerekir. İşte baştan sona tüm yol, komutlarla.
Önce iyi haber: bir bot minik bir iş yüküdür. Çoğunlukla mesaj bekleyerek boşta durur, o yüzden en ucuz kutu onu sorunsuz çalıştırır — özel IP yok, alan adı yok, süslü bir şey yok.
1. BotFather'dan bir token al
Telegram'da @BotFather'a mesaj at, /newbot gönder, bir ad ve kullanıcı adı seç. Sana 12345:AAH... gibi görünen bir token verir. Onu bir parola gibi ele al — ona sahip olan herkes botunu kontrol eder.
2. Minimal bir bot
Sunucuya SSH ile bağlan, Python'u ve kütüphaneyi kur:
sudo apt update && sudo apt install -y python3-venv
mkdir ~/mybot && cd ~/mybot
python3 -m venv venv && source venv/bin/activate
pip install python-telegram-bot
Yanıt veren bir bot — ~/mybot/bot.py:
import os
from telegram.ext import ApplicationBuilder, CommandHandler
async def start(update, ctx):
await update.message.reply_text("Alive and on a server. 🟢")
app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
Token'ı bir ortam değişkeninden okuduğuna dikkat et — sabit kodlanmış değil. Bu bir sonraki adımda önemli.
3. Onu gerçekten çalışır tutan kısım: systemd
Sadece python bot.py çalıştırırsan, SSH'ı kapattığın an ölür. Bir systemd hizmeti onu çıkıştan, çökmelerden ve yeniden başlatmalardan sağ çıkaran şeydir. /etc/systemd/system/mybot.service oluştur:
[Unit]
Description=Telegram bot
After=network-online.target
[Service]
WorkingDirectory=/home/youruser/mybot
Environment=BOT_TOKEN=12345:AAH...your-token
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser
[Install]
WantedBy=multi-user.target
Sonra:
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot # active (running) demeli
journalctl -u mybot -f # canlı loglar
Restart=always asıl işi yapan satırdır — çök, ve 5 saniyede geri gelir. enable bir yeniden başlatmadan sonra ayağa kalkması demektir. "Bir kez bir bot çalıştırdım" ile "botum ayakta" arasındaki tüm fark budur.
4. Neden alan adı ya da açık port yok
Bot uzun sorgulama kullanır — güncellemeler için Telegram'a uzanır, o yüzden hiçbir şeyin içeri ulaşmasına gerek yoktur. Genel URL yok, gelen güvenlik duvarı kuralı yok, özel IP yok. NAT bir VPS'in (paylaşımlı IP, bir portta SSH) bir bot için iyi ve ucuz bir ev olmasının sebebi tam olarak bu. Webhook'lar çok yüksek hacim için vardır ama başlamak için neredeyse kesinlikle onlara ihtiyacın yok.
Dürüst uyarılar
- Token hijyeni: burada netlik için birim dosyasında satır içi — kilitli bir kutuda sorun değil, ama paylaşılan herhangi bir şey için onu yalnızca root'un okuyabileceği bir
EnvironmentFile'dan yükle ve asla git'e commit etme. Sızdı mı? BotFather'da iptal et, yenisini çıkar. - Ağır botlar: botun işi kendisi yapıyorsa (görüntü üretimi, yerel bir model), artık minik değildir — buna göre büyüt.
Bu kadar. Önce kutuyu güvenlik kontrol listesiyle kilitle, hizmeti bırak ve botun sen olsan da olmasan da çevrimiçi kalsın. Kripto parayla ödenen bir VPS'te, karar verdikten bir dakika sonra çalışır durumda olabilir.
Yorumlar
Henüz yorum yok. İlk olun.