همراه ما باشید
با همگامی و خلاقیت، مسیر موفقیت و رشد را هموار می کنیم تا به دستاورد هایی نوین برسیم
شماره تماس
09938878462
پست الکترونیک
info@wingsnovaa.ir
آدرس
مشهد، میدان خیام، مجتمع نگین شرق
شبکه های مجازی
با همگامی و خلاقیت، مسیر موفقیت و رشد را هموار می کنیم تا به دستاورد هایی نوین برسیم
شماره تماس
پست الکترونیک
آدرس
شبکه های مجازی
امین صدیقی
28 تیر 1405

اگر تجربه توسعه ربات رو داشته باشید، احتمالا با دردسرهای همیشگی آن هم آشنا هستید؛ از خرید و راهاندازی VPS گرفته تا تنظیم SSL، مدیریت Webhook و نگرانی بابت از دسترس خارج شدن سرور.
تلگرام حالا با معرفی Telegram Serverless و ابزار tgcloud تلاش کرده این دردسرها رو تا حد زیادی حذف کنه. ما به شما نشان میدهیم که این سرویس دقیقا چگونه کار میکنه، چه مزایا و محدودیتهایی دارد و در چه شرایطی هنوز استفاده از سرویسهایی مثل Cloudflare Workers انتخاب بهتری است. هدف این راهنما این است که با شناخت هر دو روش، بتوانید مناسبترین گزینه را برای پروژه خود انتخاب کنید.
Telegram Serverless سرویس رسمی تلگرام برای اجرای کدهای بکاند رباتها و مینیاپها روی زیرساخت خود تلگرام است. یعنی دیگه لازم نیست برای اجرای ربات، سرور مجزا تهیه کنید یا درگیر تنظیمات هاست شوید.
در این معماری:
npx tgcloud push را اجرا کنید. بعد از آن، کد مستقیما روی زیرساخت تلگرام قرار میگیرد و دیگر خبری از کانتینر، VPS یا تنظیمات پیچیده هاست نیست.قبل از اینکه تلگرام این سرویس را معرفی کند، وقتی از ربات سرورلس صحبت میشد، معمولا منظور اجرای ربات روی سرویسهایی مثل Cloudflare Workers یا AWS Lambda بود. این روش هنوز هم کاملا کاربردی است و در ادامه مقاله آن را با راهکار رسمی تلگرام مقایسه میکنیم.
اگه تا امروز حتی یک ربات تلگرامی توسعه داده باشید، احتمالا این مراحل برایتان آشناست:
برای پروژههای کوچک یا استارتاپی، بخش زیادی از زمان صرف مدیریت زیرساخت میشه؛ زمانی که میتونه صرف توسعه قابلیتهای اصلی ربات بشه.
به همین دلیل، راهکارهای Serverless محبوب شدند. امروز هم دو مسیر اصلی پیش روی توسعهدهندهها قرار داره:
در ادامه هر دو روش رو بررسی میکنیم تا مشخص شه هر کدام برای چه نوع پروژهای مناسبتر هستند.
بر اساس مستندات رسمی تلگرام، این سرویس چند بخش اصلی داره که کنار هم اجرای ربات را سادهتر میکنند.
هر بار که کاربر پیامی ارسال میکنه، کد ربات داخل یک محیط سبک و ایزوله اجرا میشه؛ محیطی که از نظر ساختار، شباهت زیادی به موتور اجرای Cloudflare Workers یا مرورگر Chrome داره.
از اونجایی که این محیط داخل زیرساخت تلگرام قرار گرفته، ارتباط با Bot API و پایگاهداده با کمترین میزان تأخیر انجام میشه.
دیگر نیازی نیست تنظیمات اولیه پیچیده یا مدیریت دستی توکنها رو انجام بدید. SDK رسمی تلگرام دسترسی به Bot API رو ساده کرده و میتوانید با دستوراتی مانند api.sendMessage پیام ارسال کنید.
برای هر ربات یک پایگاهداده SQLite اختصاصی در نظر گرفته میشه که اطلاعات رو بهصورت دائمی نگهداری میکنه. برای اجرای کوئریها هم یک DSL در اختیار توسعهدهنده قرار گرفته که از نظر تجربه کاربری شباهت زیادی به ORMهایی مثل Drizzle داره.
اگه لازم باشه ربات به سرویسهایی مثل OpenAI یا هر API دیگری متصل شه، میتونید از قابلیت fetch موجود در SDK استفاده کنید و درخواستهای HTTP رو بدون نیاز به کتابخانه اضافه ارسال کنید.
ساخت پروژه، بررسی تغییرات فایلها، انتشار نسخه جدید و حتی مدیریت تغییرات پایگاهداده، همگی از طریق ابزار tgcloud انجام میشه. در نتیجه بخش زیادی از فرایند استقرار پروژه سادهتر از قبل خواهد بود.
برخی تنظیمات مدیریتی، مثل دسترسیهای پروژه، وضعیت Handlerها یا اطلاعات پایگاهداده، از طریق BotFather هم در دسترس هستند و بدون ورود به پنل جداگانه میتوان آنها رو مدیریت کرد.
کاربر پیام ارسال میکند
│
▼
سرورهای تلگرام
(مدیریت خودکار Webhook)
│
▼
Telegram Serverless Runtime
(V8 Isolate)
│
▼
پایگاهداده داخلی SQLite
│
▼
Bot API داخلی
│
▼
ارسال پاسخ به کاربر
یکی از تغییرات مهم Telegram Serverless اینه که دیگه لازم نیست خودتون آدرس Webhook رو ثبت یا بهروزرسانی کنید. بعد از انتشار پروژه، تلگرام بهصورت خودکار هندلرهای تعریفشده رو شناسایی و Webhook رو بر همون اساس مدیریت میکنه.
به زبان ساده، اگه برای نوع خاصی از آپدیتها هندلری تعریف نکرده باشید، تلگرام اصلا آن رویداد رو برای اجرای کد ارسال نمیکنه. این کار هم باعث میشه منابع بیهوده مصرف نشه و هم مدیریت ربات سادهتر و کمدردسرتر باشد.
اگر بخواهیم واقعبین باشیم، هنوز نه برای همه کاربران.
تلگرام مستندات این سرویس رو منتشر کرده و ابزارهای موردنیاز هم در دسترس هستند، اما فعالسازی Telegram Serverless بهصورت مرحلهای انجام میشود. یعنی ممکن است این قابلیت برای یک حساب کاربری فعال باشد، اما برای حساب دیگری هنوز نمایش داده نشه.
| بخش | وضعیت |
|---|---|
| مستندات رسمی Telegram | در دسترس برای همه |
| ابزار خط فرمان tgcloud | بدون محدودیت قابل نصب و استفاده |
| دستور tgcloud login | اجرا میشه و منتظر دریافت کلید دسترسی میمونه |
| منوی Serverless در BotFather | هنوز برای بسیاری از کاربران فعال نشده |
| دریافت CLI Access Token | فقط زمانی امکانپذیر است که منوی Serverless در BotFather برای حساب شما فعال باشد. |
| دسترسی کامل به سرویس | در حال عرضه مرحلهای (Gradual Rollout) است. |
ما این سرویس رو با چند ربات و چند حساب کاربری مختلف آزمایش کردیم. ابزار tgcloud بدون مشکل نصب و اجرا شد و فرآیند ورود نیز تا مرحله دریافت توکن پیش رفت، اما منوی Serverless هنوز در BotFather برای حسابهای ما نمایش داده نشد.
بنابراین اگi شما هم هنگام اجرای tgcloud login متوقف شدید و نتونستید توکن دریافت کنید، احتمالا مشکل از تنظیمات پروژه یا سیستم شما نیست. کافی است منتظر بمونید تا تلگرام این قابلیت رو برای حساب کاربریتان فعال کند.
یکی از اشتباههای رایج هنگام کار با Telegram Serverless، یکسان در نظر گرفتن Bot API Token و CLI Access Token است؛ در حالی که این دو کاربرد کاملا متفاوتی دارند.
| ویژگی | Bot API Token | CLI Access Token |
|---|---|---|
| قالب | 123456:AA... | app<id>:<secret> |
| کاربرد | ارسال پیام و استفاده از Bot API | اتصال ابزار tgcloud به زیرساخت تلگرام |
| محل دریافت | BotFather → API Token | BotFather → Serverless → CLI Access |
| محل نگهداری | متغیرهای محیطی یا محیط امن | فایل .tgcloud/credentials |
| استفاده در CI/CD | متغیرهای دلخواه | متغیر TGCLOUD_TOKEN |
اگر از Telegram Serverless استفاده کنید، معمولا هنگام نوشتن هندلرهای ربات نیازی به وارد کردن Bot API Token ندارید. SDK رسمی بهصورت خودکار شیء api رو در اختیار شما قرار میده و ارتباط با Bot API برقراره.
در نتیجه، احتمال قرار گرفتن توکن اصلی ربات داخل کد پروژه کمتر میشه و مدیریت امنیت هم سادهتر خواهد بود.
بعد از اجرای دستور زیر:
npm create @tgcloud/bot my-bot
پروژهای مشابه ساختار زیر ایجاد میشود:
example_bot/
├─ docs/
│ └─ tgcloud-sdk.md
├─ handlers/
│ ├─ message.js
│ └─ callback_query.js
├─ lib/
│ └─ internal/util.js
├─ AGENTS.md
├─ package.json
├─ schema.js
└─ .tgcloud/
این مهمترین بخش پروژه است. هر فایل داخل این پوشه مسئول رسیدگی به یک نوع رویداد در تلگرام است.
برای مثال:
message.js پیامهای متنی را مدیریت میکنه.callback_query.js درخواستهای مربوط به دکمههای شیشهای (Inline Keyboard) رو پردازش میکنه.اگه برای یک نوع رویداد هندلری تعریف نکرده باشید، تلگرام اون رویداد رو اجرا نمیکنه و هیچ پردازشی انجام نمیشه.
کدهای مشترک پروژه در این بخش قرار میگیرند؛ مثل توابع کمکی، ابزارهای عمومی یا منطقهایی که قراره در چند هندلر استفاده بشه.
برخلاف پوشه handlers، داخل lib میتونید هر تعداد زیرپوشه که نیاز دارید ایجاد کنید.
در این فایل ساختار پایگاهداده تعریف میشه؛ یعنی جدولها، ستونها و ارتباط بین دادهها. تمام تغییرات مربوط به دیتابیس از همین بخش مدیریت میشه.
این پوشه شامل اطلاعات موردنیاز ابزار tgcloud؛ مثل فایلهای تنظیمات، کش و اطلاعات ورود. بهتره فایلهای داخل این پوشه رو بهصورت دستی تغییر ندید و اون رو به سیستم مدیریت نسخه (Git) هم اضافه نکنید.
یکی از تفاوتهای Telegram Serverless با اجرای ربات روی یک سرور معمولی، محدودیت در استفاده از پکیجهای زمان اجرا است.
در این محیط نمیتونید هر کتابخانهای رو از npm وارد پروژه کنید. در عمل، بیشتر کدها باید با استفاده از SDK رسمی تلگرام و فایلهای داخلی پروژه نوشته شوند.
برای مثال، import کردن فایلهایی مثل موارد زیر مشکلی نداره:
import { db } from "schema";
import { cart } from "lib/cart";
اما استفاده از بسیاری از کتابخانههای سنگین npm در زمان اجرا پشتیبانی نمیشه. این محدودیت باعث شده محیط اجرای Telegram Serverless سبکتر، سریعتر و قابل پیشبینیتر باشه.
یکی از امکانات کاربردی Telegram Serverless، پایگاهداده داخلی SQLite است. هر رباتی که ایجاد میکنید، یک دیتابیس اختصاصی خودش رو داره و دیگر لازم نیست برای پروژههای کوچک و متوسط سراغ نصب MySQL، PostgreSQL یا سرویسهای جداگانه برید.
برای تعریف جدولها و اجرای کوئریها هم تلگرام یک API طراحی کرده که از نظر ظاهر و نحوه استفاده، شباهت زیادی به Drizzle ORM داره. به همین دلیل اگه قبلا با ORMها کار کرده باشید، یادگیری اون زمان زیادی از شما نمیگیره.
در مثال زیر یک جدول برای شمارش تعداد پیامهای هر کاربر تعریف شده است.
import { table, integer } from 'sdk/db';
export const counters = table('counters', {
chatId: integer('chat_id').primaryKey(),
seen: integer('seen').notNull().default(0),
});
حالا داخل هندلر پیام، اگر کاربر قبلا وجود داشته باشه مقدار شمارنده یک واحد افزایش پیدا میکنه و اگر اولین پیامش باشد، رکورد جدید ساخته میشه.
import { api, db } from 'sdk';
import { counters } from 'schema';
import { sql } from 'sdk/db';
export default async function (message) {
const [row] = await db
.insert(counters)
.values({
chatId: message.chat.id,
seen: 1,
})
.onConflictDoUpdate({
target: counters.chatId,
set: {
seen: sql`${counters.seen} + 1`,
},
})
.returning()
.run();
await api.sendMessage({
chat_id: message.chat.id,
text: `سلام! تا الان ${row.seen} تا پیام برام فرستادی.`,
});
}
نکته جالب اینجاست که برای ارسال پیام، نیازی به وارد کردن Bot API Token داخل کد نیست و SDK این ارتباط را بهصورت خودکار مدیریت میکند.
یکی از تصمیمهای هوشمندانه تلگرام اینه که انتشار کد و تغییر ساختار دیتابیس را از هم جدا کرده.
در بسیاری از پروژهها، تغییر یک جدول امکان داره باعث از بین رفتن اطلاعات شه. به همین دلیل Telegram Serverless اجازه نمیده هر بار که کد جدید منتشر میشه، ساختار دیتابیس هم بدون بررسی تغییر کنه.
در عمل، هر دستور وظیفه مشخصی داره:
npx tgcloud push فقط نسخه جدید کد رو منتشر میکنه. اگر تغییری در ساختار دیتابیس وجود داشته باشه، صرفا به شما اطلاع میده.npx tgcloud migrate تغییرات مربوط به دیتابیس را روی نسخه اصلی اعمال میکند.این جداسازی باعث میشه کنترل بیشتری روی تغییرات داشته باشید و احتمال از دست رفتن اطلاعات به حداقل برسه.
هنگام اجرای Migration، سیستم تغییرات را بر اساس میزان ریسک به سه گروه تقسیم میکنه.
تغییرات کمخطر مثل:
این دسته معمولا بدون مشکل اجرا میشه.
تغییراتی که ممکن است باعث حذف اطلاعات شوند؛ مانند:
در این شرایط، سیستم قبل از اعمال تغییر از شما تأیید میگیره.
بعضی تغییرات رو سیستم نمیتونه بهصورت خودکار انجام بده. در این حالت، Telegram Serverless فقط راهکار پیشنهادی رو نمایش میدهد و اجرای تغییرات بر عهده خود توسعهدهنده است.
اگه قبلا با SQLite یا دیتابیسهای رابطهای کار کرده باشید، احتمالا انتظار دارید بتونید از Foreign Key استفاده کنید. اما در Telegram Serverless این قابلیت پشتیبانی نمیشه.
یعنی اگر بین جدولهای پروژه رابطهای وجود داره، باید اون رو در منطق برنامه مدیریت کنید و نباید روی محدودیتهای دیتابیس برای حفظ این ارتباط حساب باز کنید.
این تصمیم احتمالا برای سبک نگه داشتن محیط اجرا و افزایش سرعت پردازش گرفته شده است. برای بیشتر رباتهای تلگرامی هم معمولا مشکل خاصی ایجاد نمیکنه، اما اگر پروژه شما ساختار داده پیچیدهای داره، بهتر است این محدودیت رو از همان ابتدا در طراحی دیتابیس در نظر بگیرید.
یکی از ویژگیهای جالب Telegram Serverless اینه که از همان ابتدا برای همکاری با ابزارهای برنامهنویسی مبتنی بر هوش مصنوعی طراحی شده. اگه از دستیارهایی مثل کلاد کد و کرسر یا ابزارهای مشابه استفاده میکنید، این پلتفرم تجربه روانتری نسبت به بسیاری از فریمورکهای دیگه در اختیارتان قرار میده.
بعد از ساخت پروژه، چند فایل بهصورت خودکار ایجاد میشه که فقط برای مستندسازی نیستند؛ این فایلها به ابزارهای هوش مصنوعی کمک میکنند ساختار پروژه رو بهتر درک کنند.
برای مثال:
در نتیجه، وقتی از ابزارهایی مثل Cursor یا Claude Code کمک میگیرید، پیشنهادهای آنها بیشتر با ساختار Telegram Serverless هماهنگ خواهد بود و معمولا نیاز به اصلاحات کمتری دارند.
اگه قصد دارید یک چتبات مبتنی بر هوش مصنوعی بسازید، Telegram Serverless زیرساخت مناسبی برای این کار فراهم کرده است.
با استفاده از قابلیت fetch داخل SDK میتوانید درخواستهای HTTP رو به سرویسهایی مثل OpenAI یا سایر مدلهای زبانی ارسال کنید.
یکی از مزیتهای این SDK، پشتیبانی از Stream Reading است. یعنی پاسخ مدل میتونه بهصورت تدریجی (توکنبهتوکن) دریافت شه؛ درست شبیه تجربهای که هنگام استفاده از ChatGPT مشاهده میکنید.
البته این بخش محدودیتهایی هم دارد. در حال حاضر ارسال یا دریافت فایلهای باینری حجیم پشتیبانی نمیشود و حجم پاسخها هم نباید از ۳۲ مگابایت بیشتر باشد.
در استفاده روزمره، بیشتر کارها با همین چند دستور انجام میشود:
npx tgcloud --version
npx tgcloud login
npx tgcloud push
npx tgcloud migrate
هر کدام از این دستورها وظیفه مشخصی داره:
| دستور | کاربرد |
|---|---|
--version | نمایش نسخه نصبشده ابزار |
login | اتصال پروژه محلی به حساب Telegram Serverless |
push | انتشار نسخه جدید پروژه |
migrate | اعمال تغییرات دیتابیس |
علاوه بر چهار دستور اصلی، tgcloud ابزارهای دیگهای هم در اختیار توسعهدهنده قرار میده.
| دستور | کاربرد |
|---|---|
init | ایجاد ساختار اولیه پروژه |
add | ساخت فایلهای جدید مثل Handlerها |
status | بررسی فایلهایی که تغییر کردهاند |
diff | نمایش تفاوت نسخه محلی و نسخه منتشرشده |
run | اجرای محلی پروژه برای تست |
fetch / pull | دریافت آخرین نسخه پروژه از فضای ابری |
reset | حذف تغییرات محلی و بازگشت به آخرین نسخه منتشرشده |
webhook | بررسی وضعیت Webhook پروژه |
با وجود امکانات جدید، این سرویس هنوز محدودیتهایی داره که بهتره قبل از شروع پروژه از اونها مطلع باشید.
در حال حاضر محیط اجرا بر پایه موتور V8 است و فقط از JavaScript پشتیبانی میکنه. بنابراین اگه پروژه شما با زبانهایی مثل Python، Go یا Rust نوشته شده باشه، نمیتونید همون کد رو مستقیما روی Telegram Serverless اجرا کنید.
برخلاف اجرای پروژه روی Node.js، در این محیط امکان استفاده از بسیاری از پکیجهای رایج npm وجود نداره. در عمل باید بیشتر منطق پروژه رو با استفاده از SDK رسمی تلگرام و فایلهای داخلی خود پروژه پیادهسازی کنید.
ارسال و دریافت فایلهای حجیم هنوز محدودیتهایی داره و تلگرام اعلام کرده این بخش در نسخههای بعدی کاملتر خواهد شد.
در حال حاضر محیط اجرا بر پایه موتور V8 است و فقط از JavaScript پشتیبانی میکند. بنابراین اگر پروژه شما با زبانهایی مثل Python، Go یا Rust نوشته شده باشد، نمیتوانید همان کد را مستقیماً روی Telegram Serverless اجرا کنید.
Telegram Serverless بسیاری از کارهای زیرساختی رو از دوش توسعهدهنده برمیداره، ولی این راحتی یک هزینه هم داره.
اگر پروژه رو بر پایه SDK اختصاصی تلگرام و دیتابیس داخلی آن توسعه دهید، مهاجرت به یک سرور شخصی یا حتی یک سرویس ابری دیگر ساده نخواهد بود.
بهخصوص بخش مربوط به دیتابیس و دسترسی به APIها احتمالا نیاز به بازنویسی خواهد داشت. بنابراین اگه از همان ابتدا احتمال میدهید پروژه در آینده روی زیرساخت دیگری اجرا شود، بهتره این موضوع رو در طراحی معماری در نظر بگیرید.
Telegram Serverless تنها گزینه موجود نیست. اگر به هر دلیلی مثلا نیاز به استفاده از کتابخانههای npm، زبانهای برنامهنویسی دیگه یا محدودیتهای دسترسی نتونید از سرویس رسمی تلگرام استفاده کنید، همچنان میتونید از سرویسهای Serverless عمومی استفاده کنید. رایجترین گزینهها عبارتاند از:
در این روش، ربات روی زیرساخت یکی از این سرویسها اجرا میشود و تلگرام فقط از طریق Webhook درخواستها را برای آن ارسال میکند.
معماری سنتی (VPS)
تلگرام
│
▼
Webhook
│
▼
سرور همیشه روشن
│
▼
دیتابیس جداگانه
────────────────────────────
معماری Serverless
تلگرام
│
▼
Runtime سرورلس
(در زمان درخواست اجرا میشود)
│
▼
دیتابیس داخلی یا ابری
| ویژگی | VPS | Serverless |
|---|---|---|
| راهاندازی | نیاز به پیکربندی سرور | انتشار با چند دستور |
| هزینه | پرداخت ماهانه ثابت | پرداخت بر اساس میزان استفاده |
| مقیاسپذیری | نیازمند مدیریت زیرساخت | افزایش ظرفیت بهصورت خودکار |
| امنیت | مدیریت با توسعهدهنده | مدیریت توسط ارائهدهنده سرویس |
| Cold Start | ندارد | ممکن است چند میلیثانیه تأخیر ایجاد شود |
اگه بخواهید از Cloudflare Workers استفاده کنید، ساختار پروژه کمی متفاوت خواهد بود. ابتدا یک جدول در دیتابیس D1 ایجاد میکنید:
CREATE TABLE IF NOT EXISTS messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
chat_id INTEGER NOT NULL,
text TEXT,
created_at INTEGER NOT NULL
);
سپس داخل Worker، درخواستهای ارسالی تلگرام را دریافت میکنید، اطلاعات موردنیاز را در D1 ذخیره میکنید و پاسخ را از طریق Bot API برمیگردانید.
export default {
async fetch(request, env) {
if (request.method !== "POST") {
return new Response("Only POST is supported");
}
const update = await request.json();
const message = update.message;
if (!message) {
return new Response("OK");
}
const chatId = message.chat.id;
const text = message.text ?? "";
await env.DB.prepare(
"INSERT INTO messages (chat_id, text, created_at) VALUES (?, ?, ?)"
)
.bind(chatId, text, Date.now())
.run();
await fetch(
`https://api.telegram.org/bot${env.BOT_TOKEN}/sendMessage`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
chat_id: chatId,
text: `پیام شما ذخیره شد: ${text}`,
}),
}
);
return new Response("OK");
},
};
این مثال نشون میده که معماری Serverless فقط به Telegram Serverless محدود نیست و با سرویسهایی مثل Cloudflare Workers هم میشه رباتهای مقیاسپذیر و کمهزینه توسعه داد. تفاوت اصلی اینجاست که در Cloudflare مدیریت Webhook، توکن ربات و بخشهایی از زیرساخت همچنان بر عهده خود شما خواهد بود، در حالی که Telegram Serverless بخش زیادی از این مسئولیتها را بهصورت خودکار مدیریت میکنه.
اگر قصد دارید یک ربات تلگرامی جدید راهاندازی کنید یا زیرساخت پروژه فعلیتان رو تغییر دهید، احتمالا بین چند گزینه مختلف مردد خواهید بود. هر کدوم از این سرویسها نقاط قوت و محدودیتهای خودشان رو دارند و انتخاب بهترین گزینه به نیاز پروژه بستگی داره.
| ویژگی | Telegram Serverless | Cloudflare Workers | Vercel | AWS Lambda |
|---|---|---|---|---|
| محیط اجرا | V8 Sandbox اختصاصی تلگرام | V8 Isolate | Node.js و Edge Runtime | کانتینرهای مبتنی بر زبانهای مختلف |
| راهاندازی Webhook | کاملاً خودکار | نیاز به تنظیم دستی | نیاز به تنظیم دستی | نیاز به تنظیم دستی |
| دیتابیس | SQLite داخلی | D1 و سایر دیتابیسهای Cloudflare | سرویسهای دیتابیس جداگانه | DynamoDB و سرویسهای AWS |
| پشتیبانی از پکیجها | محدود به SDK رسمی | بسیاری از پکیجهای سازگار با Edge | تقریباً بدون محدودیت | بدون محدودیت |
| هزینه | هنوز اعلام نشده | اقتصادی با پلن رایگان مناسب | پلن رایگان مناسب | پرداخت بر اساس میزان مصرف |
| وابستگی به سرویس | زیاد | متوسط | متوسط | کم تا متوسط |
پاسخ این سؤال برای همه پروژهها یکسان نیست. بهتر است قبل از تصمیمگیری، وضعیت فعلی پروژه را در نظر بگیرید.
اگه ربات شما فقط درخواستهای کاربران رو پردازش میکنه و پردازشهای طولانی یا سنگین مثل تبدیل ویدئو، پردازش تصویر یا محاسبات پیچیده نداره، مهاجرت به یک معماری Serverless میتواند هزینه نگهداری و دردسر مدیریت سرور رو تا حد زیادی کاهش ده.
چه Telegram Serverless رو انتخاب کنید و چه Cloudflare Workers، دیگه نیازی به مدیریت دائمی سرور، مانیتورینگ و بهروزرسانی سیستمعامل نخواهید داشت.
در این حالت عجلهای برای مهاجرت وجود نداره. Cloudflare Workers سالهاست به بلوغ رسیده، مستندات کاملی داره و اکوسیستم اون پایداره. علاوه بر این، آزادی عمل بیشتری برای استفاده از کتابخانهها و معماریهای مختلف در اختیار شما قرار میده.
اگر Telegram Serverless برای حساب شما فعال شده، میتونید ابتدا اون رو روی پروژههای آزمایشی امتحان کنید و بعد درباره مهاجرت پروژههای اصلی تصمیم بگیرید.
این گروه بیشترین سود رو از مهاجرت میبره. هاستهای اشتراکی معمولا برای اجرای دائمی رباتهای تلگرامی طراحی نشدند و مشکلاتی مثل محدودیت منابع، قطعی سرویس یا توقف پردازشها در اونها بیشتر دیده میشه.
در چنین شرایطی، استفاده از یک سرویس Serverless معمولا انتخاب منطقیتری خواهد بود.
Telegram Serverless نشان میده که توسعه رباتهای تلگرامی به سمت سادهتر شدن حرکت میکنه. بسیاری از کارهایی که قبلا باید بهصورت دستی انجام میشد، مثل مدیریت Webhook، نگهداری سرور یا راهاندازی دیتابیس، حالا توسط خود تلگرام انجام میشه.
البته این سرویس هنوز در ابتدای مسیر است و محدودیتهایی مثل پشتیبانی فقط از JavaScript، وابستگی بالا به اکوسیستم تلگرام و مشخص نبودن مدل قیمتگذاری را هم باید در نظر گرفت.
اگه دسترسی Telegram Serverless برای حساب شما فعال شده، فرصت خوبی است تا اون رو روی یک پروژه کوچک یا آزمایشی امتحان کنید و با نحوه کار آن آشنا شوید.
اما اگه هنوز این قابلیت برایتان فعال نشده یا پروژه شما به انعطاف بیشتری نیاز داره، Cloudflare Workers همچنان یکی از بهترین گزینههای Serverless برای توسعه رباتهای تلگرامی محسوب میشه؛ هم اکوسیستم بالغتری داره و هم برای بسیاری از پروژهها، پلن رایگان اون کاملا کافی است.
پیشنهاد عملی: اگه امروز میخواهید توسعه یک ربات جدید را شروع کنید، ابتدا وضعیت دسترسی Telegram Serverless را در BotFather بررسی کنید. اگر این قابلیت برای حساب شما فعال بود، ارزش دارد آن را آزمایش کنید. در غیر این صورت، میتوانید بدون نگرانی پروژه را روی Cloudflare Workers شروع کنید و در آینده، در صورت نیاز، درباره مهاجرت تصمیم بگیرید.
ما در کنار بررسی معماریهای مختلف اجرای رباتهای تلگرامی، تجربه توسعه یک محصول واقعی در این حوزه رو هم داشتهایم.
یکی از پروژههایی که توسط تیم وینگزنوا توسعه داده شده، تایمکلیک است؛ یک سامانه رزرو آنلاین نوبت آرایشگاه که از طریق ربات تلگرامی به کاربران امکان میده بدون تماس تلفنی، زمان موردنظر خود را انتخاب و رزرو کنند.
البته ایده استفاده از ربات تلگرامی برای خدمات رزرو نوبت موضوع جدیدی نیست و پیش از این هم سرویسهایی در این حوزه فعالیت داشتهاند؛ اما چالش اصلی همیشه ارائه یک تجربه ساده، پایدار و قابل اتکا برای کسبوکارها بوده است.
در تایمکلیک تلاش کردیم این مسیر رو کاربردیتر کنیم؛ بهگونهای که آرایشگاهها بتوانند یک سیستم نوبتدهی خودکار داشته باشند و کاربران هم بدون پیچیدگیهای اضافه، از طریق تلگرام نوبت خود را ثبت کنند.
تجربه ساخت چنین محصولی نشان داد که انتخاب معماری مناسب برای رباتها اهمیت زیادی دارد. بسته به نوع پروژه، تعداد کاربران و نیازهای فنی، ممکن است VPS سنتی، Cloudflare Workers یا راهکارهای جدیدی مثل Telegram Serverless انتخاب مناسبتری باشند.