بازگشت به وبلاگ
بات سرورلس تلگرام
Telegram Bot APICloudflare WorkersServerlessSQLiteWebhook

بات سرورلس تلگرام: راهنمای کامل ساخت ربات بدون VPS با Cloudflare Workers

13 دقیقه مطالعه

مقدمه

اگر تا امروز یک بات تلگرام ساخته باشید، احتمالاً با این چرخه آشنا هستید: یک VPS اجاره می‌کنید، Node.js را روی آن نصب می‌کنید، یک دامنه یا ساب‌دامنه برای Webhook تنظیم می‌کنید، گواهی SSL می‌گیرید (چون Telegram Bot API فقط HTTPS را قبول می‌کند)، یک پایگاه داده راه‌اندازی می‌کنید، فرآیند را با PM2 یا systemd به‌صورت daemon اجرا می‌کنید، و بعد باید نگران آپدیت امنیتی سرور، مانیتورینگ Uptime، و مقیاس‌پذیری در زمان افزایش ناگهانی ترافیک هم باشید.

برای یک بات کوچک شخصی، این حجم از زیرساخت اغلب بیش از خودِ منطق بات وقت می‌گیرد. خیلی از توسعه‌دهنده‌ها یک آخر هفته را صرف «راه‌اندازی سرور» می‌کنند، نه نوشتن منطق واقعی بات. دقیقاً همین نقطه درد باعث شده در چند سال اخیر یک الگوی جدید در جامعه توسعه‌دهندگان تلگرام محبوب شود: ساخت بات سرورلس تلگرام — یعنی حذف کامل VPS از معادله و اجرای بات روی پلتفرم‌های serverless مثل Cloudflare Workers، AWS Lambda یا Vercel Functions.

در این مقاله یک نکته مهم را از همان ابتدا شفاف می‌کنم: تلگرام خودش پلتفرم سرورلس رسمی برای اجرای بات‌ها ارائه نمی‌دهد. چیزی که این روزها با عنوان «Telegram Serverless Bot» در مقالات و آموزش‌ها دیده می‌شود، در واقع یک معماری و الگوی توسعه است که جامعه‌ی توسعه‌دهندگان حول Bot API رسمی تلگرام و پلتفرم‌های serverless شخص ثالث ساخته‌اند، نه یک محصول یا ویژگی که خود تلگرام اعلام کرده باشد. Bot API تلگرام از روز اول (سال ۲۰۱۵) فقط یک HTTP API است — شما یا با polling مداوم آپدیت‌ها را می‌گیرید، یا با webhook منتظر می‌مانید تلگرام درخواست POST به سرور شما بفرستد. اینکه آن سرور یک VPS همیشه‌روشن باشد یا یک تابع serverless که فقط لحظه‌ی دریافت پیام اجرا می‌شود، کاملاً به انتخاب شماست.

در ادامه دقیقاً همین الگو را از صفر تا صد بررسی می‌کنیم: چرا معماری سنتی سخت بود، چطور Cloudflare Workers و SQLite (به‌طور مشخص Cloudflare D1) این معادله را تغییر داده‌اند، چه محدودیت‌هایی دارد، و چه زمانی واقعاً ارزش مهاجرت را دارد.

چرا هنوز خیلی‌ها فکر می‌کنند این «اعلامیه‌ی تلگرام» است

قبل از رفتن به جزئیات فنی، لازم است این سوءتفاهم را روشن کنیم، چون در جست‌وجوهای مربوط به «Telegram Serverless Bot» زیاد دیده می‌شود.

عبارت‌هایی مثل «بدون نیاز به VPS»، «اجرای خودکار در مقیاس»، و «پشتیبانی بومی از Bot API» که معمولاً همراه این موضوع می‌آیند، در واقع ویژگی‌های پلتفرم serverless میزبان هستند (مثل Cloudflare Workers)، نه ویژگی‌های خودِ Telegram. تلگرام صرفاً یک endpoint استاندارد و مستند در اختیارتان می‌گذارد؛ این خودِ شماست که تصمیم می‌گیرید آن endpoint را روی چه زیرساختی اجرا کنید.

نکته‌ی مثبت این سوءتفاهم این است که پاسخ به آن، دقیقاً همان چیزی است که هر توسعه‌دهنده باید بداند: الگوی serverless برای بات تلگرام واقعی، پایدار، و کاملاً قابل استفاده در پروداکشن است — فقط منبعش اکوسیستم ابری است، نه تلگرام. در ادامه‌ی مقاله همین الگو را با جزئیات کامل می‌سازیم.

معماری سنتی در مقابل معماری سرورلس

برای اینکه تفاوت را ملموس کنیم، بیایید دو رویکرد را کنار هم بگذاریم.

معیار معماری سنتی (VPS) معماری سرورلس
استقرار (Deployment) نصب دستی یا اسکریپت CI/CD روی سرور git push یا دستور CLI، دیپلوی در چند ثانیه
زیرساخت مدیریت کامل توسط شما (سیستم‌عامل، پچ‌های امنیتی، فایروال) کاملاً مدیریت‌شده توسط پلتفرم
هزینه هزینه‌ی ثابت ماهانه، حتی وقتی بات بی‌کار است پرداخت بر اساس مصرف؛ اغلب سطح رایگان کافی است
نگهداری (Maintenance) آپدیت سیستم‌عامل، Node.js، وابستگی‌ها، مانیتورینگ سرور تقریباً صفر؛ فقط کد اپلیکیشن
مقیاس‌پذیری دستی یا نیازمند تنظیم Load Balancer/Auto Scaling خودکار و آنی، از صفر تا هزاران درخواست
پایگاه داده معمولاً PostgreSQL/MySQL روی همان سرور یا سرویس جدا پایگاه‌های داده‌ی edge-native مثل Cloudflare D1 (سازگار با SQLite)
مانیتورینگ نیاز به ابزار جداگانه (Prometheus، Grafana، Uptime Robot) معمولاً Dashboard و Log داخلی پلتفرم
Cold Start صفر (سرور همیشه روشن است) معمولاً چند میلی‌ثانیه تا چند صدم ثانیه، بسته به پلتفرم
امنیت مسئولیت کامل با شماست (پچ، فایروال، SSH) سطح حمله‌ی بسیار کوچک‌تر؛ SSL و شبکه را پلتفرم مدیریت می‌کند

نکته‌ی مهم درباره‌ی ردیف Cold Start: در معماری سنتی، سروری که همیشه روشن است اصلاً cold start ندارد، اما در عوض دائم منابع مصرف می‌کند حتی وقتی هیچ پیامی نمی‌آید. در پلتفرم‌هایی مثل Cloudflare Workers که روی V8 Isolates کار می‌کنند (نه container کامل)، cold start معمولاً آن‌قدر کوچک است که برای یک Webhook که خودش هم چند صد میلی‌ثانیه طول می‌کشد، عملاً محسوس نیست.

این معماری از داخل چطور کار می‌کند

بیایید مسیر کامل یک پیام را، از لحظه‌ای که کاربر در تلگرام تایپ می‌کند تا لحظه‌ای که پاسخ را می‌بیند، دنبال کنیم.

کاربر پیام می‌فرستد
        │
        ▼
  سرورهای تلگرام
        │  (HTTPS POST به آدرس Webhook شما)
        ▼
┌─────────────────────────┐
│   Edge Function          │   ← مثلاً یک Cloudflare Worker
│  (اجرای کد JavaScript)   │
└─────────────────────────┘
        │
        ▼
┌─────────────────────────┐
│  پایگاه داده (SQLite/D1) │   ← خواندن/نوشتن وضعیت کاربر،
└─────────────────────────┘      تاریخچه مکالمه، تنظیمات و غیره
        │
        ▼
  فراخوانی Telegram Bot API
     (متد sendMessage و مشابه)
        │
        ▼
     پیام به کاربر می‌رسد

مراحل به‌صورت دقیق‌تر:

  1. Incoming Update: وقتی کاربر پیامی می‌فرستد، تلگرام یک شیء JSON به نام Update می‌سازد که شامل اطلاعات پیام، فرستنده، چت، و غیره است، و آن را با یک درخواست POST به آدرس Webhook شما ارسال می‌کند.
  2. Runtime: پلتفرم serverless (مثلاً Cloudflare Workers) بلافاصله یک نمونه‌ی سبک از محیط اجرای JavaScript را فعال می‌کند — نه یک ماشین مجازی کامل، بلکه یک V8 Isolate که در حد میلی‌ثانیه آماده است.
  3. Execution: کد شما Update را پردازش می‌کند: تشخیص می‌دهد این یک دستور است یا پیام معمولی، منطق کسب‌وکار را اجرا می‌کند، و در صورت نیاز به پایگاه داده مراجعه می‌کند.
  4. SQLite: برای ذخیره‌سازی وضعیت (مثل تاریخچه‌ی مکالمه، تنظیمات کاربر، یا داده‌های سفارش)، از یک پایگاه‌داده‌ی سازگار با SQLite که مستقیماً در لبه‌ی شبکه (edge) در دسترس است استفاده می‌شود — Cloudflare D1 دقیقاً همین است: یک SQLite توزیع‌شده که بدون نیاز به سرور جداگانه، از همان Worker شما در دسترس است.
  5. Response: در نهایت کد شما یک درخواست HTTP به متدهای Bot API (مثل sendMessage) می‌زند تا پاسخ را برای کاربر ارسال کند — و اجرای تابع همان‌جا تمام می‌شود؛ هیچ فرآیندی در پس‌زمینه باقی نمی‌ماند.

این چرخه‌ی کامل، از دریافت پیام تا پاسخ، معمولاً کمتر از یک ثانیه طول می‌کشد و هیچ سروری در این میان «همیشه روشن» نیست.

مزایای این رویکرد

بهره‌وری توسعه‌دهنده: بدون نیاز به تنظیم SSH، فایروال، یا پیکربندی Nginx، توسعه‌دهنده می‌تواند مستقیماً روی منطق بات تمرکز کند. زمان بین «ایده» تا «اولین دیپلوی» می‌تواند از چند روز به چند دقیقه کاهش پیدا کند.

کاهش هزینه: بیشتر پلتفرم‌های serverless سطح رایگان سخاوتمندانه‌ای دارند. یک بات با ترافیک متوسط (مثلاً چند هزار پیام در روز) اغلب کاملاً در محدوده‌ی رایگان Cloudflare Workers یا Vercel جا می‌شود، در حالی که کوچک‌ترین VPS معمولاً حداقل ۵ دلار در ماه هزینه دارد — حتی وقتی بات کاملاً بی‌کار است.

دیپلوی سریع‌تر: با CLI پلتفرم (مثل wrangler deploy در Cloudflare) یا حتی یک git push ساده، نسخه‌ی جدید کد در عرض چند ثانیه در سراسر شبکه‌ی جهانی زنده می‌شود.

مقیاس‌پذیری خودکار: چه بات شما یک کاربر داشته باشد چه ده هزار کاربر هم‌زمان، پلتفرم به‌صورت خودکار تعداد نمونه‌های اجرایی را تنظیم می‌کند. نیازی به تنظیم دستی Auto Scaling Group یا نگرانی درباره‌ی ترافیک ناگهانی نیست.

امنیت: چون سروری برای پچ کردن یا مدیریت وجود ندارد، سطح حمله (attack surface) به‌شدت کوچک‌تر است. مدیریت گواهی SSL، فایروال شبکه، و ایزوله‌سازی محیط اجرا به‌طور کامل به عهده‌ی پلتفرم است.

مناسب برای MVP، هکاتون و پروژه‌های شخصی: وقتی هدف اعتبارسنجی سریع یک ایده است، صرف چند ساعت روی راه‌اندازی زیرساخت منطقی نیست. این الگو دقیقاً برای همین سناریوها طراحی شده — از ساخت یک بات در طول یک هکاتون ۴۸ ساعته تا راه‌اندازی یک ربات شخصی برای یادآوری کارها.

محدودیت‌ها

هیچ معماری‌ای بدون Trade-off نیست، و این یکی هم استثنا نیست.

قفل‌شدگی به فروشنده (Vendor Lock-in): کدی که با API اختصاصی یک پلتفرم (مثلاً D1Database در Cloudflare Workers) نوشته می‌شود، به‌سادگی به پلتفرم دیگری قابل انتقال نیست. مهاجرت از Cloudflare Workers به AWS Lambda معمولاً به معنای بازنویسی بخش قابل‌توجهی از لایه‌ی زیرساخت است.

محدودیت زمان اجرا (Execution Limits): توابع serverless معمولاً یک سقف زمانی سخت‌گیرانه دارند. Cloudflare Workers در سطح رایگان محدودیت زمان CPU دارد (نه زمان کل درخواست) و در سطح پولی این محدودیت بازتر می‌شود؛ AWS Lambda حداکثر ۱۵ دقیقه اجازه‌ی اجرا می‌دهد. برای منطق ساده‌ی بات این کاملاً کافی است، اما برای عملیات سنگین، محدودکننده می‌شود.

کارهای طولانی‌مدت (Long-running Jobs): اگر بات شما نیاز به یک فرآیند پس‌زمینه دارد که ساعت‌ها طول بکشد (مثلاً پردازش دسته‌ای فایل‌ها یا polling مداوم یک سرویس خارجی)، معماری serverless گزینه‌ی مناسبی نیست؛ این نوع کار باید در جای دیگری (مثل یک Worker Queue یا Cron Job جدا) انجام شود.

بارهای سنگین محاسباتی: پردازش تصویر، مدل‌های یادگیری ماشین سنگین، یا هر عملیاتی که به CPU/GPU زیادی نیاز دارد، معمولاً با محدودیت‌های منابع پلتفرم‌های edge سازگار نیست.

نیازمندی‌های سازمانی: شرکت‌های بزرگ اغلب به کنترل کامل روی شبکه (VPC)، انطباق با استانداردهای خاص (مثل نگهداری داده در یک منطقه‌ی جغرافیایی مشخص)، یا معماری‌های چندلایه‌ی پیچیده نیاز دارند که با مدل ساده‌ی serverless هم‌خوانی کامل ندارد.

مقایسه‌ی Cloudflare Workers، AWS Lambda و Vercel Functions

از بین پلتفرم‌های serverless، این سه گزینه بیشترین محبوبیت را برای ساخت بات تلگرام دارند. انتخاب درست بین آن‌ها به نوع بات، حجم ترافیک، و تجربه‌ی تیم توسعه بستگی دارد.

Cloudflare Workers

Cloudflare Workers روی مدل V8 Isolates کار می‌کند — یعنی به‌جای اجرای یک container کامل برای هر درخواست، کد شما در یک نمونه‌ی سبک از موتور جاوااسکریپت کروم اجرا می‌شود. نتیجه‌ی مستقیم این معماری، سریع‌ترین cold start در بین این سه گزینه است (اغلب زیر چند میلی‌ثانیه).

از نظر ذخیره‌سازی، Cloudflare مجموعه‌ای کامل ارائه می‌دهد: D1 (پایگاه‌داده‌ی سازگار با SQLite)، KV (ذخیره‌سازی کلید-مقدار برای دسترسی سریع)، و Durable Objects (برای وضعیت‌های پیچیده‌تر و هماهنگ‌سازی). این ترکیب دقیقاً همان چیزی است که برای اکثر بات‌های تلگرام لازم است.

از نظر قیمت‌گذاری، سطح رایگان Cloudflare Workers یکی از سخاوتمندانه‌ترین‌هاست و برای بیشتر بات‌های شخصی و MVP کاملاً کافی است.

AWS Lambda

AWS Lambda پیشگام واقعی مفهوم serverless است و از نظر بلوغ اکوسیستم، یکپارچگی با سایر سرویس‌های AWS (مثل DynamoDB، S3، و API Gateway)، و انعطاف‌پذیری در انتخاب زبان برنامه‌نویسی، گزینه‌ی قدرتمندی است.

نقطه‌ضعف اصلی آن نسبت به Cloudflare Workers، cold start کندتر است — چون Lambda از مدل container استفاده می‌کند، نه Isolate سبک. برای بات‌هایی که نیاز به تأخیر (latency) بسیار پایین دارند، این تفاوت محسوس می‌شود. اما اگر تیم شما از قبل زیرساخت AWS دارد، یکپارچگی Lambda با آن اکوسیستم می‌تواند مزیت تعیین‌کننده‌ای باشد.

Vercel Functions

Vercel اساساً برای فرانت‌اند (به‌خصوص Next.js) طراحی شده، و همین باعث می‌شود اگر بات تلگرام شما بخشی از یک پروژه‌ی بزرگ‌تر با داشبورد وب یا لندینگ‌پیج باشد، Vercel Functions تجربه‌ی توسعه‌ی بسیار روانی ارائه دهد — همه‌چیز در یک ریپازیتوری و یک دیپلوی.

از نظر پایگاه داده، Vercel به‌خودی‌خود SQLite بومی ندارد، اما به‌راحتی با سرویس‌هایی مثل Vercel Postgres یا پایگاه‌های داده‌ی edge دیگر یکپارچه می‌شود.

جدول مقایسه‌ی خلاصه

معیار Cloudflare Workers AWS Lambda Vercel Functions
Runtime V8 Isolate (بسیار سبک) Container-based Node.js Serverless / Edge
قیمت‌گذاری سطح رایگان سخاوتمندانه پرداخت بر اساس تعداد اجرا و زمان یکپارچه با پلن Vercel
مدل اجرا Event-driven، بدون سرور کامل Event-driven با Container Event-driven، متصل به فریم‌ورک
ذخیره‌سازی بومی D1 (SQLite)، KV، Durable Objects DynamoDB، S3 (نیازمند یکپارچه‌سازی) Vercel Postgres/KV
تجربه‌ی توسعه ساده و مستقل قدرتمند اما پیچیده‌تر عالی برای پروژه‌های Next.js
Cold Start بسیار کم متوسط تا کند کم تا متوسط

کاربردهای عملی

الگوی بات سرورلس تلگرام برای طیف وسیعی از سناریوهای واقعی مناسب است:

  • بات‌های پشتیبانی مشتری: پاسخ‌گویی خودکار به سؤالات متداول، هدایت کاربر به بخش صحیح، و در صورت نیاز، انتقال مکالمه به یک اپراتور انسانی.
  • بات‌های CRM: ثبت لیدها و مخاطبین مستقیماً از طریق تلگرام، بدون نیاز به فرم جداگانه.
  • مدیریت سفارش: پیگیری وضعیت سفارش، اطلاع‌رسانی تغییر وضعیت، و حتی پردازش سفارش‌های ساده مستقیماً در چت.
  • اعلان‌ها (Notifications): ارسال هشدار قیمت، یادآوری، یا اعلان‌های سیستمی از یک سرویس بک‌اند به کاربران.
  • دستیارهای هوش مصنوعی: اتصال بات به یک مدل زبانی (LLM) برای پاسخ‌گویی هوشمند، خلاصه‌سازی، یا ترجمه — با ذخیره‌ی تاریخچه‌ی مکالمه در همان پایگاه‌داده‌ی SQLite.
  • بات‌های داخلی سازمانی: اتوماسیون فرآیندهای داخلی تیم، مثل ثبت مرخصی، گزارش روزانه، یا هشدارهای مانیتورینگ سرور — بدون نیاز به یک اپلیکیشن جداگانه.

آیا بات‌های موجود باید مهاجرت کنند؟

پاسخ کوتاه: بستگی دارد، و تصمیم باید بر اساس واقعیت‌های فنی بات شما گرفته شود، نه صرفاً به این دلیل که «serverless مد روز است».

مهاجرت منطقی است وقتی:

  • بات شما ترافیک متوسط تا پایین دارد و بیشتر منابع سرور فعلی بلااستفاده می‌ماند.
  • منطق بات عمدتاً واکنشی است (پاسخ به پیام) و نیازی به فرآیندهای پس‌زمینه‌ی طولانی ندارد.
  • هزینه یا بار نگهداری سرور فعلی برای شما یا تیم‌تان مشکل‌ساز شده است.
  • می‌خواهید مقیاس‌پذیری خودکار داشته باشید بدون درگیر شدن با تنظیمات زیرساخت.

مهاجرت منطقی نیست وقتی:

  • بات به وظایف زمان‌بندی‌شده یا فرآیندهای طولانی‌مدت (بیش از چند ثانیه) وابسته است.
  • از یک پایگاه‌داده‌ی رابطه‌ای سنگین با کوئری‌های پیچیده استفاده می‌کنید که به‌سختی با مدل edge سازگار می‌شود.
  • تیم شما از قبل زیرساخت پایداری روی VPS دارد و مهاجرت هزینه‌ی مهندسی بیشتری نسبت به مزایای آن دارد.
  • نیازمندی‌های سازمانی خاص (انطباق، کنترل شبکه، محل نگهداری داده) دارید که با مدل serverless همخوانی ندارد.

در بسیاری از موارد، رویکرد ترکیبی منطقی‌تر است: منطق سبک و واکنشی بات (دریافت پیام و پاسخ سریع) روی serverless، و فرآیندهای سنگین‌تر (مثل پردازش دسته‌ای یا Cron Job‌های طولانی) همچنان روی یک سرور یا سرویس صف‌بندی جدا.

آینده‌ی این اکوسیستم

چند روند در سال‌های اخیر نشان می‌دهد این مسیر همچنان در حال رشد است:

  • بلوغ پایگاه‌داده‌های edge-native: ابزارهایی مثل Cloudflare D1، Turso، و راه‌حل‌های مشابه هر روز پخته‌تر می‌شوند و محدودیت‌های اولیه‌ی SQLite توزیع‌شده (مثل تأخیر در نوشتن هم‌زمان) کمتر می‌شود.
  • ادغام عمیق‌تر با هوش مصنوعی: با رشد دستیارهای مبتنی بر LLM، الگوی serverless برای بات‌های تلگرام مبتنی بر AI جذاب‌تر می‌شود، چون هزینه و پیچیدگی نگهداری زیرساخت را از معادله حذف می‌کند و توسعه‌دهنده می‌تواند صرفاً روی منطق هوش مصنوعی تمرکز کند.
  • ابزارهای توسعه‌ی بهتر: فریم‌ورک‌هایی که مستقیماً برای «بات تلگرام + serverless» طراحی شده‌اند (به‌جای فریم‌ورک‌های عمومی serverless) در حال رشد هستند و می‌توانند بخش زیادی از boilerplate را حذف کنند.
  • رقابت بین پلتفرم‌ها: با رقابت فعال Cloudflare، Vercel، AWS و بازیگران کوچک‌تر، احتمالاً محدودیت‌های اجرا و قیمت‌گذاری در سال‌های آینده مناسب‌تر خواهد شد، نه سخت‌گیرانه‌تر.

آنچه بعید است اتفاق بیفتد، این است که خودِ تلگرام وارد بازار میزبانی serverless شود — چون این کار Telegram را از یک پلتفرم پیام‌رسان با یک API ساده و باز، به یک ارائه‌دهنده‌ی زیرساخت ابری تبدیل می‌کند که به‌وضوح خارج از حوزه‌ی اصلی محصول آن‌هاست.

جمع‌بندی

اگر دنبال یک «اعلامیه‌ی بزرگ از تلگرام» بودید، خبر این است: چنین چیزی وجود ندارد. تلگرام همان Bot API ساده و پایدار همیشگی را دارد که از سال ۲۰۱۵ عملاً بدون تغییر اساسی در فلسفه‌اش باقی مانده است.

اما آنچه واقعاً وجود دارد، مهم‌تر و کاربردی‌تر از یک اعلامیه‌ی بازاریابی است: بلوغ اکوسیستم serverless — به‌خصوص Cloudflare Workers به همراه D1 — به نقطه‌ای رسیده که ساخت یک بات تلگرام کامل، مقیاس‌پذیر، و کم‌هزینه، بدون لمس یک VPS، امروز یک گزینه‌ی جدی و آماده‌ی پروداکشن است، نه یک آزمایش.

این تغییر بزرگی در «نحوه‌ی فکر کردن درباره‌ی زیرساخت» است، حتی اگر تغییر بزرگی در خودِ Telegram Bot API نباشد. برای اکثر بات‌های جدید — به‌خصوص MVP، پروژه‌های شخصی، و ابزارهای داخلی — این احتمالاً باید نقطه‌ی شروع پیش‌فرض شما باشد، نه یک گزینه‌ی جایگزین.

مقالات مرتبط