رباتی که روی لپتاپ شخصی اجرا میشود، با اولین قطعی برق یا بستهشدن درِ لپتاپ از دسترس خارج میشود — و کاربری که دو بار پیام بدهد و جواب نگیرد، بار سوم نمیآید. راهحل درست، اجرای ربات تلگرام روی سرور مجازی است: یک ماشین لینوکسی که ۲۴ ساعته روشن است و اگر ربات به هر دلیلی کرش کند، خودش دوباره بالایش میآورد. در این راهنما مسیر کامل را قدمبهقدم میرویم: گرفتن توکن از BotFather، نوشتن یک ربات ساده با پایتون، و تبدیل آن به سرویسی که هرگز نمیخوابد.
چرا ربات تلگرام روی سرور مجازی اجرا کنیم؟
ربات تلگرام یک پروسهی همیشهروشن است: باید دائم به سرورهای تلگرام وصل باشد تا پیامها را بگیرد و جواب بدهد. همین یک جمله تکلیف زیرساخت را روشن میکند:
- کامپیوتر شخصی مناسب نیست: خاموش میشود، ویندوز ریاستارت میگیرد، اینترنت خانگی IP ثابت و پایدار ندارد.
- هاست اشتراکی هم مناسب نیست: وقتی دنبال «هاست ربات تلگرام» میگردید، منظور واقعی یک سرور مجازی کوچک است. هاست اشتراکی برای سایتهای PHP طراحی شده و اجازهی اجرای پروسهی دائمی پایتون را نمیدهد (یا بعد از چند دقیقه آن را میکُشد).
- سرور مجازی دقیقاً همان چیزی است که لازم دارید: دسترسی root، آپتایم بالا، و systemd که ربات را بعد از هر کرش یا ریبوت، خودکار دوباره اجرا میکند.
خبر خوب اینکه ربات تلگرام جزو سبکترین بارهای کاری دنیاست — به کوچکترین و ارزانترین پلن هم راضی است. پایینتر دقیقتر حساب میکنیم.
قدم اول: گرفتن توکن از BotFather
هویت هر ربات یک «توکن» است که از ربات رسمی مادر میگیرید:
- در تلگرام
@BotFatherرا جستوجو و باز کنید (تیک تأیید آبی داشته باشد). - دستور
/newbotرا بفرستید. - یک نام نمایشی بدهید (مثلاً «ربات فروشگاه من»).
- یک نام کاربری یکتا بدهید که به
botختم شود (مثلاًMyShopHelperBot).
BotFather در جواب، توکنی شبیه 123456789:AAE...xyz میدهد. این رشته کلید کامل کنترل ربات شماست.
/revoke فوراً باطلش کنید و توکن جدید بگیرید.ساخت ربات تلگرام با پایتون: یک ربات اکو در بیست خط
برای ساخت ربات تلگرام با پایتون، کتابخانهی python-telegram-bot استاندارد عملی ماجراست: بالغ، مستندسازیشده و async. با SSH به سرور وصل شوید و محیط را آماده کنید:
apt update && apt install -y python3-venv
mkdir -p /opt/echobot && cd /opt/echobot
python3 -m venv venv
venv/bin/pip install "python-telegram-bot==21.*"
حالا فایل /opt/echobot/bot.py را بسازید:
from telegram import Update
from telegram.ext import (Application, CommandHandler,
MessageHandler, filters, ContextTypes)
TOKEN = "PUT-YOUR-TOKEN-HERE"
async def start(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Salam! Har chi befresti, bar migardoonam.")
async def echo(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(update.message.text)
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
app.run_polling()
تست اولیه:
venv/bin/python bot.py
به رباتتان در تلگرام /start بفرستید؛ باید جواب بگیرید و هر متنی بفرستید، عیناً برگردد. همین بیست خط، اسکلت هر ربات جدیتری است — فقط هندلرهای بیشتری اضافه میکنید.
آنلاین دائمی با systemd
اجرای دستی با python bot.py فقط تا وقتی زنده است که ترمینال SSH باز باشد. راهحل حرفهای، تعریف ربات بهعنوان یک سرویس systemd است. فایل /etc/systemd/system/echobot.service را بسازید:
[Unit]
Description=Telegram Echo Bot
After=network-online.target
Wants=network-online.target
[Service]
User=botuser
WorkingDirectory=/opt/echobot
ExecStart=/opt/echobot/venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
خط Restart=always قلب ماجراست: اگر ربات به هر دلیلی کرش کند، systemd پنج ثانیه بعد دوباره اجرایش میکند. سرویس را فعال کنید:
useradd -r -s /usr/sbin/nologin botuser
chown -R botuser: /opt/echobot
systemctl daemon-reload
systemctl enable --now echobot
systemctl status echobot
لاگ زنده را هم همیشه با journalctl -u echobot -f ببینید. از این لحظه، ربات تلگرام روی سرور مجازی شما یک سرویس واقعی است: با ریبوت سرور خودش بالا میآید و با کرش خودش برمیگردد.
botuser اجرا کردیم، نه root — اگر کد ربات آسیبپذیری داشته باشد، دامنهی خسارت کوچک میماند. بقیهی کارهای پایه را هم از چکلیست امنیت سرور لینوکس انجام دهید.Polling یا Webhook؟
ربات از دو راه میتواند پیامهای جدید را بگیرد. کد بالا از polling استفاده میکند: ربات مدام از تلگرام میپرسد «پیام تازهای هست؟». در webhook برعکس است: تلگرام هر پیام را مستقیم به آدرس HTTPS شما push میکند.
| معیار | Polling | Webhook |
|---|---|---|
| پیچیدگی راهاندازی | صفر — همین کد بالا | دامنه + گواهی SSL معتبر + پورت باز |
| نیاز به IP/دامنه عمومی | ندارد | دارد (تلگرام باید سرور شما را ببیند) |
| تأخیر پاسخ | معمولاً زیر یک ثانیه | تقریباً لحظهای |
| مناسب برای | اکثر رباتها، شروع کار | ترافیک خیلی بالا، چند ربات روی یک سرور |
توصیهی صادقانه: با polling شروع کنید. برای ۹۵ درصد رباتها همیشه کافی میماند و یک قطعهی خرابشدنی (وبسرور و گواهی SSL) کمتر دارید. سراغ webhook فقط وقتی بروید که واقعاً به مقیاسش رسیدهاید.
شبکه و انتخاب سرور برای ربات تلگرام
یک واقعیت فنی که باید قبل از استقرار بدانید: ربات شما برای کار کردن باید از خود سرور به api.telegram.org دسترسی داشته باشد. مسیر شبکه و سیاستهای دسترسی در شبکههای مختلف یکسان نیست و این موضوع در زیرساختهای داخل ایران هم مطرح است؛ پس بهجای حدس زدن، از خود سرور تست بگیرید:
curl -sS -m 10 -o /dev/null -w "%{http_code}\n" https://api.telegram.org
اگر یک کد HTTP برگشت (مثلاً 302)، مسیر باز است؛ اگر timeout شد، یعنی از این سرور دسترسی مستقیم ندارید و باید پیش از هر کاری تکلیف مسیر ارتباطی را روشن کنید. مزیت پرداخت ساعتی دقیقاً همینجاست: در مهران هاست سرور را میسازید، در دو دقیقه تست شبکه میگیرید، و اگر سناریوی شما جواب نداد، سرور را حذف میکنید و فقط هزینهی همان چند ساعت از کیف پولتان کم شده است.
چقدر منابع لازم است؟
در انتخاب سرور برای ربات تلگرام، بزرگترین اشتباه، بزرگ خریدن است. یک ربات python-telegram-bot معمولی در حالت عادی حدود ۶۰ تا ۱۲۰ مگابایت RAM مصرف میکند و CPU آن اکثر اوقات نزدیک صفر است:
- ربات شخصی یا فروشگاه کوچک: کوچکترین پلن (۱ هسته / ۱ گیگ RAM) با فاصله کافی است.
- ربات با دیتابیس و چند هزار کاربر: ۲ گیگ RAM انتخاب راحتی است؛ دیسک NVMe اینجا خودش را در سرعت کوئریها نشان میدهد.
- دیسک: کل پروژه با venv معمولاً زیر ۲۰۰ مگابایت است — فضای دیسک تقریباً هیچوقت گلوگاه ربات نیست.
به همین دلیل هاست ربات تلگرام یکی از ارزانترین بارهای کاری ابری است: سروری که ماهانه به اندازهی چند فنجان چای هزینه دارد، بهراحتی چند ربات را کنار هم اجرا میکند.
قدم بعدی
حالا نقشهی کامل را دارید: توکن از BotFather، بیست خط پایتون، یک یونیت systemd — و ربات تلگرام روی سرور مجازی شما بهطور دائمی آنلاین است. همین حالا یک سرور کوچک بسازید و کل این آموزش را با پرداخت ساعتی، به قیمت یک عصرانه تمرین کنید. اگر مفهوم پرداخت ساعتی برایتان تازه است، راهنمای سرور ابری ساعتی را بخوانید و یادتان نرود قبل از معرفی عمومی ربات، امنیت سرور را جدی بگیرید.