چرا ربات تلگرام باید روی سرور خارج از ایران باشد؟
ربات تلگرام یک برنامهی معمولی است که مدام با سرورهای تلگرام حرف میزند: پیامهای جدید را از Bot API میگیرد و جوابها را به همانجا میفرستد. تلگرام در ایران فیلتر است و سرورهای داخل ایران به api.telegram.org دسترسی ندارند؛ بنابراین ربات روی هاست یا سرور ایرانی اصلاً اجرا نمیشود، مگر با پروکسی که هم کند است و هم هر لحظه ممکن است قطع شود. اجرای ربات روی کامپیوتر شخصی هم راهحل نیست، چون با خاموش شدن سیستم یا قطعی اینترنت، ربات هم از کار میافتد.
هاست ربات تلگرام آریا گستران روی دیتاسنتر آلمان اجرا میشود و دسترسی آزاد و مستقیم به API تلگرام دارد. این سرویس روی همان پلنهای هاست پایتون آلمان و هاست نود جی اس آلمان ارائه میشود: دسترسی SSH، محیط مجازی پایتون (venv) و نسخهی دلخواه Node.js، Supervisor برای روشن نگه داشتن ربات، PostgreSQL 17 برای ذخیرهی کاربران و RabbitMQ برای صف پیام. پرداخت ریالی است؛ ماهانه از ۲۹۹ هزار تومان یا ساعتی از ۴۲۰ تومان.
polling یا webhook؟ دو روش دریافت پیام در ربات تلگرام
هر ربات تلگرام باید به یکی از این دو روش پیامهای جدید را دریافت کند و هر دو روی این هاست ممکن است:
- Long polling: ربات مدام از تلگرام میپرسد «پیام جدید داری؟» (متد getUpdates). راهاندازی آن سادهترین حالت است، به دامنه و SSL نیاز ندارد و برای شروع، رباتهای شخصی و رباتهایی با ترافیک کم و متوسط کاملاً کافی است. فقط باید پردازش ربات همیشه روشن باشد که Supervisor این را تضمین میکند.
- Webhook: تلگرام هر پیام جدید را خودش به آدرس HTTPS ربات شما میفرستد (متد setWebhook). تلگرام webhook را فقط روی HTTPS و پورتهای 443، 80، 88 یا 8443 قبول میکند؛ روی این هاست دامنه و SSL رایگان دارید و درخواستها از پورت 443 به اپ شما میرسد. webhook برای رباتهای پرمخاطب کارآمدتر است، چون ربات فقط وقتی پیامی هست کار میکند.
توجه کنید این دو روش همزمان کار نمیکنند؛ اگر webhook ثبت شده باشد، getUpdates خطا میدهد و برای برگشتن به polling باید webhook را حذف کنید. توصیهی ما: با polling شروع کنید و وقتی ربات بزرگ شد یا خواستید ربات را کنار یک سایت روی همان دامنه داشته باشید، به webhook بروید. برای امنیت webhook هم پارامتر secret_token را تنظیم کنید و در اپ هدر X-Telegram-Bot-Api-Secret-Token را بررسی کنید تا فقط درخواستهای واقعی تلگرام پذیرفته شوند.
کتابخانههای ساخت ربات: aiogram، python-telegram-bot و Telegraf
| کتابخانه | زبان | ویژگی |
| aiogram | پایتون | کاملاً async، سریع و محبوب در جامعهی فارسیزبان؛ مناسب رباتهای پرمخاطب |
| python-telegram-bot | پایتون | مستندات کامل و مثالهای زیاد؛ از نسخهی ۲۰ به بعد async |
| pyTelegramBotAPI (telebot) | پایتون | ساده و سریع برای رباتهای کوچک |
| Telegraf | Node.js | قدیمیترین و پرکاربردترین کتابخانهی Node با middleware و پشتیبانی TypeScript |
| grammY | Node.js | مدرن، با مستندات خوب و افزونههای آماده برای مکالمه و محدودیت نرخ |
همهی این کتابخانهها با pip یا npm از مخزنهای بینالمللی نصب میشوند و روی هاست آلمان دسترسی به PyPI و npm آزاد است. اگر زبان خاصی را ترجیح نمیدهید، برای ربات پایتونی aiogram و برای ربات نود grammY یا Telegraf شروع خوبی است.
اجرای دائمی ربات با Supervisor
مهمترین نیاز هر ربات این است که شبانهروز روشن بماند. روی هاستهای معمولی، اسکریپتی که با SSH اجرا کردهاید با بستن ترمینال یا ریاستارت سرور متوقف میشود. روی هاست ربات تلگرام، Supervisor این کار را برعهده دارد: ربات را اجرا میکند، اگر به خطا خورد یا سرور ریاستارت شد دوباره بالا میآورد و خروجی و خطاهای ربات را در فایل لاگ نگه میدارد. تعریف یک ربات در Supervisor چنین شکلی دارد:
[program:mybot]
command=/home/USER/venvs/bot/bin/python bot.py
directory=/home/USER/bot
autorestart=true
اگر اولین بار است که ربات را روی هاست راه میاندازید، تیم پشتیبانی در تعریف پردازش کمکتان میکند. روی یک پلن میتوانید چند ربات را بهشکل پردازشهای جدا اجرا کنید؛ هر ربات فقط بخشی از رم پلن را مصرف میکند.
دیتابیس و صف: PostgreSQL 17 و RabbitMQ برای ربات
رباتهای جدی فقط جواب ثابت نمیدهند؛ فهرست کاربران، سفارشها، اشتراکها و وضعیت مکالمه را ذخیره میکنند. PostgreSQL 17 روی همهی پلنها در دسترس است و با SQLAlchemy یا asyncpg در پایتون و Prisma یا pg در Node به آن وصل میشوید. ذخیرهی وضعیت در دیتابیس بهجای حافظهی برنامه یعنی با ریاستارت ربات، هیچ کاربری وسط مکالمه گم نمیشود.
برای ارسال پیام همگانی (broadcast) به هزاران کاربر، محدودیتهای تلگرام را در نظر بگیرید: Bot API بهطور کلی حدود ۳۰ پیام در ثانیه و در هر چت حدود یک پیام در ثانیه را میپذیرد و بیشتر از آن خطای ۴۲۹ میدهد. پیامها را در صف RabbitMQ بگذارید و یک worker جداگانه با سرعت مجاز ارسالشان کند تا ربات اصلی برای پاسخ به کاربران آزاد بماند.
عیبیابی رایج ربات تلگرام روی هاست
- ربات جواب نمیدهد ولی خطایی هم نیست: احتمالاً webhook قبلی هنوز ثبت است و polling کار نمیکند. با متد deleteWebhook آن را حذف کنید یا webhook را درست روی دامنهی جدید ثبت کنید.
- خطای Conflict در لاگ: دو نسخه از یک ربات همزمان در حال اجراست؛ مثلاً یکی روی کامپیوتر شخصی و یکی روی هاست. فقط یک نسخه را روشن نگه دارید.
- خطای ۴۲۹: از محدودیت نرخ تلگرام عبور کردهاید؛ ارسالهای همگانی را با صف و فاصلهی زمانی انجام دهید.
- توکن لو رفته: فوراً از BotFather توکن را باطل کنید و توکن جدید را در متغیر محیطی جایگزین کنید.
کاربردهای رایج ربات تلگرام روی هاست
- ربات پشتیبانی و پاسخ به سؤالات مشتریان کسبوکار.
- ربات فروش فایل، اشتراک کانال یا محصول دیجیتال با ثبت سفارش در دیتابیس.
- ربات اطلاعرسانی که قیمت، خبر یا وضعیت سفارش را در کانال یا گروه منتشر میکند.
- ربات متصل به APIهای هوش مصنوعی؛ هاست آلمان به سرویسهایی مثل OpenAI هم دسترسی آزاد دارد.
- ربات مدیریت گروه، ضداسپم و خوشآمدگویی.
اگر ربات شما برای پیامرسانهای داخلی مثل بله است، باید روی سرور داخل ایران اجرا شود؛ برای این حالت هاست پایتون ایران را ببینید.
ماهانه یا ساعتی؟ هاست یا سرور مجازی برای ربات پرمخاطب؟
برای رباتهایی که قرار است همیشه روشن باشند، خرید ماهانه بهصرفهتر است و با دورهی سه تا دوازده ماهه ۵ تا ۲۰ درصد تخفیف میگیرید. اگر میخواهید ربات را چند روز تست کنید، برای یک رویداد یا کمپین کوتاه ربات بسازید یا نمونه را به مشتری نشان بدهید، هاست ساعتی آلمان بهترین گزینه است؛ از ۴۲۰ تومان در ساعت و فقط برای ساعتهایی که سرویس روشن است.
| پلن | پردازنده / رم | ماهانه (تومان) | ساعتی (تومان) | مناسب برای |
| آریا پایه | ۲ هسته / ۲ گیگ | ۲۹۹٬۰۰۰ | ۴۲۰ | یک ربات با polling |
| آریا ۵ | ۴ هسته / ۴ گیگ | ۵۹۰٬۰۰۰ | ۸۲۰ | چند ربات یا ربات با دیتابیس و پنل وب |
| آریا ۱۰ | ۶ هسته / ۶ گیگ | ۸۹۰٬۰۰۰ | ۱٬۲۴۰ | ربات webhook با صف ارسال همگانی |
| آریا ۳۰ | ۸ هسته / ۱۲ گیگ | ۱٬۲۹۰٬۰۰۰ | ۱٬۸۰۰ | رباتهای پرکاربر و چند worker |
پلنهای آریا ۵۰ و آریا ۱۰۰ هم برای پروژههای بزرگتر در جدول بالای صفحه آمدهاند. هاست برای اکثر رباتها کافی است، اما اگر ربات شما دهها هزار کاربر فعال همزمان دارد، به پردازش سنگین (مثل پردازش ویدیو یا تصویر) نیاز دارد، باید Bot API Server محلی تلگرام را برای فایلهای حجیم اجرا کنید یا به Docker و دسترسی root احتیاج دارید، سرور مجازی آلمان با منابع اختصاصی انتخاب درست است. فهرست همهی سرویسها را در صفحهی هاست ببینید. آریا گستران از سال ۱۳۹۸ در مشهد فعال است؛ برای مشاوره با ۰۵۱-۹۱۰۰۲۶۴۱ تماس بگیرید.