ربات تلگرام باید همیشه در حال اجرا باشد تا به پیامها پاسخ دهد. اجرای آن روی لپتاپ یعنی هر وقت درِ آن را ببندید آفلاین میشود. یک VPS کوچک با چند دلار در ماه این مشکل را حل میکند. این راهنما یک ربات Python را بهصورت سرویس systemd اجرا میکند تا هنگام بوت شروع شود و پس از خرابی دوباره راه بیفتد.
VPS با چه اندازهای؟
بیشتر رباتها سبکاند. طرحی با 1 تا 2 vCPU و 2 GB RAM کاملاً کافی است. برای طرحهای پیشنهادی، هاستینگ ربات تلگرام را ببینید.
مرحله 1: توکن ربات بگیرید
با @BotFather در تلگرام صحبت کنید، /newbot را بفرستید، یک نام و یک نام کاربری که به bot ختم شود انتخاب کنید و توکن را کپی کنید. با آن مانند رمز عبور رفتار کنید، چون هر کس آن را داشته باشد میتواند ربات را کنترل کند.
مرحله 2: سرور را آماده کنید
sudo apt update && sudo apt install -y python3 python3-venv
sudo adduser --disabled-password --gecos "" botuser
sudo -iu botuser
mkdir ~/mybot && cd ~/mybot
python3 -m venv .venv
. .venv/bin/activate
pip install python-telegram-bot
مرحله 3: یک ربات کوچک بنویسید
# bot.py
import os
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
async def start(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Hello! I am running on a VPS.")
app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
Polling به هیچ پورت بازی نیاز ندارد، پس لازم نیست دامنه یا webhook راه بیندازید.
مرحله 4: توکن را امن ذخیره کنید
echo "BOT_TOKEN=123456:ABC..." > ~/mybot/.env
chmod 600 ~/mybot/.env
مرحله 5: آن را بهصورت سرویس اجرا کنید
بهعنوان کاربر مدیر برگردید و /etc/systemd/system/mybot.service را بسازید:
[Unit]
Description=Telegram bot
After=network-online.target
[Service]
User=botuser
WorkingDirectory=/home/botuser/mybot
EnvironmentFile=/home/botuser/mybot/.env
ExecStart=/home/botuser/mybot/.venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo journalctl -u mybot -f
بهروزرسانی و نظارت
- کد را بهروزرسانی کنید، سپس
sudo systemctl restart mybot. - لاگها را با
journalctl -u mybot -n 100بررسی کنید. - اگر ربات داده ذخیره میکند از پشتیبانها استفاده کنید.
Polling یا webhook؟
Polling سادهترین است و برای بیشتر رباتها مناسب. اگر در حجم بالا به تحویل فوری نیاز دارید از webhook استفاده کنید که دامنه و HTTPS لازم دارد. میزبانی با Nginx و HTTPS را ببینید.