پرش به محتوای اصلی
پرش به محتوای مقاله

تلگرام با زیرساخت Serverless نیاز به سرورهای خارجی برای ربات‌ها را حذف کرد

·۲۴ تیر ۱۴۰۵۳۱ دقیقه مطالعه
لوگوی تلگرام و نماد رایانش بدون سرور روی پس‌زمینه‌ای آبی-بنفش
لوگوی تلگرام و نماد رایانش بدون سرور روی پس‌زمینه‌ای آبی-بنفش
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

ادغام مستقیم دیتابیس SQLite و محیط اجرای جاوا اسکریپت در لایه‌ی زیرساختی تلگرام؛ به گونه‌ای که توسعه‌دهنده دیگر هیچ دسترسی یا نیازی به سرور خارجی (VPS) ندارد.

اگر تا امروز برای پاسخ به یک دستور ساده‌ی /start، مجبور بودید یک VPS اجاره کنید و با تنظیمات پیچیده وب‌هوک کلنجار بروید، دوران «مالکیت سرور» برای ربات‌های تلگرامی به پایان رسیده است. این تحول یعنی حذف کامل هزینه‌ها و دردسرهای مدیریتی برای هر کسی که می‌خواهد یک ابزار کاربردی در تلگرام بسازد.

به نقل از مستندات رسمی، تلگرام در ۱۵ ژوئیه ۲۰۲۶ سرویس Telegram Serverless را عرضه کرد؛ لایه‌ای از زیرساخت که اجازه می‌دهد ماژول‌های جاوا اسکریپت مستقیماً روی سرورهای تلگرام مستقر شوند. این اقدام یعنی لایه‌ی میانی بین کد توسعه‌دهنده و Bot API به‌طور کامل حذف شده است. دیگر نیازی به تامین سرور، زنده نگه داشتن کانتینرها یا مدیریت مقیاس‌پذیری (Scaling) نیست.

سال‌ها بود که سازندگان ربات باید «لوله‌کشی» برنامه‌هایشان را مدیریت می‌کردند؛ از اجاره سرور و آپدیت سیستم‌عامل گرفته تا پیکربندی Webhookها تا بتوانند تعاملات پایه با کاربر را مدیریت کنند. تلگرام با ادغام محیط اجرا و ذخیره‌سازی داده‌ها در یک بسته، اکوسیستم ربات‌ها را به پلتفرمی مدیریت‌شده شبیه به Vercel یا Netlify تبدیل کرده است، با این تفاوت که این پلتفرم به‌طور عمیقی با سیستم‌های داخلی اپلیکیشن پیام‌رسان تلگرام جفت شده است. اگر تا به حال برای پاسخ دادن به یک دستور ساده، رباتی را به یک VPS یا پنل هاست متصل کرده‌اید، این دقیقاً همان بخشی است که دیگر نیازی به انجام آن ندارید. همان‌طور که در تحلیل‌های قبلی ما درباره‌ی بهینه‌سازی هزینه‌های استنتاج اشاره کردیم، حذف لایه‌های زائد در معماری، کلید افزایش سرعت و کاهش هزینه در مقیاس است.

معماری سندباکس V8

قلب این سیستم یک سندباکس V8 (V8 Sandbox) — که شبیه به یک اتاق ایزوله و سریع برای اجرای کد است تا امنیت سیستم اصلی به خطر نیفتد — است که دقیقاً در کنار Bot API قرار دارد. این نزدیکی باعث می‌شود درخواست‌های ارسال پیام یا پرس‌وجوی داده‌ها با کمترین تأخیر (Latency) انجام شود. هر فراخوانی در یک ایزوله‌ی سبک اجرا می‌شود که بر اساس حجم ترافیک ربات، به‌طور خودکار مقیاس می‌گیرد.

توسعه‌دهندگان با سه جزء اصلی تعامل دارند که به‌طور منظم با یکدیگر متناظر هستند:

  • پوشه پروژه: ماژول‌های محلی جاوا اسکریپت شامل هندلرها، کتابخانه‌های مشترک و طرح‌واره (Schema) پایگاه‌داده. این جایی است که شما فایل‌ها را ویرایش کرده و کنترل نسخه (Version Control) را مدیریت می‌کنید.
  • ابر (Cloud): نسخه‌ی مستقر شده از آن ماژول‌ها، به‌علاوه پایگاه‌داده پایدار ربات شما که بر پایه SQLite است. این رویکرد یادآور تغییر پارادایم در ابزارهایی است که مدیریت کد را از چت‌های ساده به محیط‌های ابری منتقل کرده‌اند تا بهره‌وری افزایش یابد.
  • tgcloud CLI: ابزار ارتباطی یا پل ارتباطی که تفاوت‌ها را نمایش داده و تغییرات محلی را از طریق دستوراتی مانند npx tgcloud push با ابر همگام‌سازی می‌کند.

با این سازوکار، نیاز به دسترسی SSH به ماشین‌های سرور کاملاً حذف شده است. یک پروژه صرفاً یک پوشه ساده در سیستم شخصی است. شما فایل‌ها را ویرایش می‌کنید، تغییرات دقیق را می‌بینید و به‌صورت اتمیک (Atomic) منتشر می‌کنید. ترافیک ربات شما توسط ماژول‌های مستقر شده مدیریت می‌شود، در حالی که پایگاه‌داده وضعیت (State) را بین فراخوانی‌های مجزا حفظ می‌کند. این حذف وابستگی به SSH، تغییر رویکردی است که در دسترسی به عامل‌های خودکار نیز مشاهده شده تا لایه‌های کنترل مستقیم جایگزین شوند.

مدیریت پایگاه‌داده و طرح‌واره

هر ربات یک پایگاه‌داده مبتنی بر SQLite دریافت می‌کند که از طریق یک Query Builder روان بر پایه Drizzle ORM در دسترس است. برای جلوگیری از پاک شدن تصادفی داده‌ها، تلگرام فرآیند استقرار دو مرحله‌ای سخت‌گیرانه‌ای را اجرا می‌کند: ارسال کد از طریق CLI منطق برنامه را به‌روز می‌کند، اما تغییرات پایگاه‌داده نیازمند دستور مجزای npx tgcloud migrate است. این اطمینان می‌دهد که یک استقرار کد، توسعه‌دهنده را با یک مهاجرت داده‌ای (Data Migration) غیرمنتظره غافلگیر نکند.

جزئیات فنی دیتابیس عبارتند از:

تعریف جداول (Table Definitions)

  • زبان تعریف طرح‌واره (Schema DSL): جداول در یک فایل schema.js به عنوان خروجی‌های نام‌گذاری شده (Named Exports) تعریف می‌شوند. انواع داده‌های پشتیبانی شده عبارتند از: integer()، text()، boolean()، real()، numeric()، blob() (برای Uint8Array) و json().
  • تغییردهنده‌های ستونی (Column Modifiers): توسعه‌دهندگان می‌توانند متدهایی مانند .primaryKey({ autoIncrement: true })، .notNull()، .unique()، .default() و .generatedAlwaysAs() برای ستون‌های ذخیره شده یا مجازی را به هم زنجیر کنند. برای مثال، یک slug را می‌توان به صورت sqllower(name)`` تولید کرد.
  • اندکس‌ها (Indexes): محدودیت‌ها در یک callback اضافی تعریف می‌شوند و از unique()، check()، index() و uniqueIndex() پشتیبانی می‌کنند. همچنین اندکس‌های عبارتی مانند index('idx_lower').on(sqllower(${t.email})) و اندکس‌های جزئی با استفاده از .where()(مثلاًindex('idx_active').on(t.userId).where(sqldone = 0)`) پشتیبانی می‌شوند.

محدودیت‌های داده‌ای (Data Constraints)

  • عدم پشتیبانی از کلیدهای خارجی: محیط اجرا با دستور PRAGMA foreign_keys off عمل می‌کند. اگر از .references() یا foreignKey() استفاده شود، DSL صراحتاً خطا می‌دهد. یکپارچگی داده‌ها باید در لایه‌ی کد برنامه مدیریت شود (مثلاً حذف فرزندان قبل از والدین) و داده‌های یتیم (Orphans) را می‌توان با یک LEFT JOIN ... WHERE parent.id IS NULL پاکسازی کرد.
  • تبدیل حالت (Mode Conversion): گزینه mode تبدیل JS به SQLite را مدیریت می‌کند. برای مثال، mode: 'timestamp' اعداد صحیح SQLite را به اشیاء Date در جاوا اسکریپت تبدیل می‌کند؛ mode: 'json' عملیات Stringification و Parsing را انجام می‌دهد. نوع blob() داده‌های Uint8Array را می‌خواند و می‌نویسد، زیرا محیط اجرا Node Buffer ندارد.
  • اصلاح‌کننده‌های جدول: جداول را می‌توان با متدهایی مثل .strict()، .withoutRowid() و .deprecated('reason') دقیق‌تر تعریف کرد.

منطق مهاجرت (Migration Logic)
ابزار میگریشن، تغییرات را به چهار دسته تقسیم می‌کند:

  • safe (ایمن): تغییرات افزایشی (جداول یا ستون‌های جدید) که در یک مرحله با هم اعمال می‌شوند.
  • warning (هشدار): تغییراتی که احتمالاً مخرب یا کند هستند (مانند حذف ستون‌ها یا ایجاد اندکس روی جداول بسیار بزرگ) و باید یکی‌یکی تأیید شوند.
  • manual (دستی): تغییرات نوع داده که به دلیل محدودیت‌های SQLite نیازمند دخالت مستقیم با Raw SQL هستند.
  • undocumented (مستند نشده): اشیائی که در دیتابیس وجود دارند اما در طرح‌واره محلی تعریف نشده‌اند.

برای حذف یک جدول یا ستون، توسعه‌دهندگان باید ابتدا آن را با .deprecated('reason') علامت‌گذاری کنند. این کار باعث می‌شود قبل از حذف نهایی، وضعیت warning در طول میگریشن فعال شود. دستور npx tgcloud migrate تفاوت بین schema.js و دیتابیس زنده را محاسبه می‌کند. این دستور با پرچم‌هایی مانند --dry-run (فقط چاپ تغییرات)، --safe (اعمال خودکار تغییرات ایمن)، --yes (اعمال خودکار ایمن‌ها و هشدارها) یا --local (مقایسه با طرح‌واره محلی) قابل اجرا است.

جریان کاری توسعه‌دهنده و SDK

کدها در سه منطقه تخصصی سازمان‌دهی می‌شوند:

  • handlers/: نقاط ورود. هر فایل متناظر با یک نوع Update تلگرام است (مثلاً handlers/message.js یا handlers/callback_query.js). این‌ها دایرکتوری‌های تخت (Flat) هستند. اگر هندلری برای یک نوع آپدیت خاص گم شود یا خالی باشد، تلگرام صرفاً آن آپدیت‌ها را نادیده می‌گیرد تا از اجرای کدهای غیرضروری جلوگیری شود.
  • lib/: منطق مشترک و ماژول‌های کمکی. این تنها دایرکتوری است که اجازه ساخت زیرپوشه دارد (مثلاً lib/internal/util.js یا lib/payments/stripe.js).
  • schema.js: یک تک‌فایل در ریشه پروژه که تمام جداول پایگاه‌داده را تعریف می‌کند.

برای حفظ امنیت و سرعت (کاهش Cold-start)، استفاده از پکیج‌های npm، دسترسی مستقیم به سیستم فایل یا مسیرهای نسبی (Relative Paths) در Import‌ها ممنوع است. مسیرهایی مانند ./schema یا ../schema کامپایل نخواهند شد. در عوض، همه چیز از طریق یک SDK یکپارچه با استفاده از Importهای نام ساده (Bare Name Imports) دسترسی‌پذیر است (مثلاً import { db } from 'sdk').

اجزای SDK:

  • api: دسترسی مستقیم به تمام متدهای فعلی و آتی Bot API از طریق api.<method>(params). پوشش‌های پاسخ (Response Envelopes) به‌طور خودکار باز می‌شوند؛ برای مثال، getMe() مستقیماً شیء کاربر را برمی‌گرداند. پارامترها از snake_case استفاده می‌کنند (مثلاً chat_id). خطاها یک BotApiError پرتاب می‌کنند که شامل .code (کد خطای Bot API)، .description، .method و .parameters (مانند retry_after برای خطاهای ۴۲۹) است.
  • db: ابزار پرس‌وجوی مشابه Drizzle که از .select()، .insert()، .update() و .delete() پشتیبانی می‌کند. متدهای نهایی مانند .all()، .get()، .values() و .run() را شامل می‌شود. همچنین از Projectionهای پیچیده با Aggregateهایی مثل count()، sum()، avg()، min() و max() پشتیبانی می‌کند. Raw SQL از طریق تگ sql پشتیبانی می‌شود و db.run برای نوشتن و db.all یا db.get برای خواندن به کار می‌روند.
  • fetch: یک کلاینت HTTP تخصصی برای فراخوانی APIهای شخص ثالث. از کمک‌کننده‌های بدنه مانند fetch.body.json()، fetch.body.form() و fetch.body.text() پشتیبانی می‌کند. استریم افزایشی از طریق for await (const chunk of res.body) ممکن است، هرچند حجم کل پاسخ تا ۳۲ مگابایت محدود شده است. Payloadهای باینری پشتیبانی نمی‌شوند و محتوای پاسخ باید متنی باشد. این قابلیت دسترسی به APIهای خارجی، شباهتی به رویکردهای خودکارسازی ابزارهای ایجنتیک از طریق مهندسی معکوس APIها دارد تا ربات‌ها بتوانند با دنیای بیرون تعامل داشته باشند.

تست و توسعه با کمک هوش مصنوعی

برای تسریع چرخه توسعه، پلتفرم دستور npx tgcloud run را معرفی کرده است. این دستور به توسعه‌دهندگان اجازه می‌دهد یک هندلر را روی پلتفرم با استفاده از فایل‌های محلی و یک Payload به فرمت JSON5 اجرا کنند، بدون اینکه نیاز به استقرار نسخه کامل باشد. برای مثال، اجرای npx tgcloud run handlers/message '{ chat: { id: 1 }, text: "hi" }' یک Payload شبیه‌سازی شده را به هندلر می‌فرستد. همچنین می‌توان یک شیء Context را با پرچم --ctx ارسال کرد (مثلاً --ctx '{ update: { update_id: 1 } }'). این دستور لاگ‌های console.* را با پیشوندهای رنگی، مقدار بازگشتی و زمان اجرا چاپ می‌کند.

تلگرام این محیط را به عنوان محیطی «AI-Native» معرفی می‌کند. پروژه‌های جدید با فایل‌های AGENTS.md و docs/tgcloud-sdk.md آماده می‌شوند که مخصوصاً برای خوانده شدن توسط دستیارهای کدنویسی AI مانند Cursor یا Claude Code طراحی شده‌اند. این کار تضمین می‌کند که ایجنت‌های هوش مصنوعی از کنوانسیون‌های پلتفرم پیروی کنند:

  • استفاده از Bare Name Imports (بدون پسوند .js).
  • اجتناب از استفاده از کلیدهای خارجی.
  • اجرای جریان دو مرحله‌ای push/migrate.
  • نوشتن تنها یک هندلر برای هر نوع آپدیت.

ارکستراسیون پروژه و CLI

ابزار tgcloud CLI به عنوان پل ارتباطی اصلی عمل می‌کند و به Node.js نسخه ۱۸ یا جدیدتر نیاز دارد. این ابزار را می‌توان به‌صورت جهانی با npm install -g @tgcloud/cli یا به‌صورت محلی با npx نصب کرد.

دستورات ضروری عبارتند از:

  • npx tgcloud login: اتصال پروژه با استفاده از توکن دسترسی CLI (app<id>:<secret>) که از @BotFather دریافت می‌شود. این توکن در .tgcloud/credentials ذخیره می‌شود و در git-ignore قرار می‌گیرد.
  • npx tgcloud status و diff: انجام مقایسه‌های آفلاین بین فایل‌های محلی و کپی مرجع در ابر. دستور status درباره‌ی فایل‌های .js پراکنده در ریشه پروژه هشدار می‌دهد.
  • npx tgcloud push: استقرار ماژول‌ها در یک دسته اتمیک. اگر همکارتان نسخه جدیدتری را مستقر کرده باشد، برای جلوگیری از بازنویسی خاموش، push رد می‌شود مگر اینکه پرچم --force استفاده شود.
  • npx tgcloud webhook sync: بازتنظیم وب‌هوک و بازسازی لیست allowed_updates بر اساس هندلرهای مستقر شده. پرچم --drop-pending می‌تواند آپدیت‌های در صف را در هنگام همگام‌سازی دور بریزد.
  • npx tgcloud add <target>: ساخت یک ماژول جدید. برای هندلرها، نام را با انواع آپدیت‌های پشتیبانی شده تلگرام اعتبارسنجی می‌کند.
  • npx tgcloud pull و reset: دستور pull فایل‌های محلی را با ابر هم‌راستا می‌کند؛ reset تغییرات محلی را دور می‌ریزد تا آخرین وضعیت شناخته شده در ابر را بازیابی کند.

مدیریت موبایلی از طریق BotFather

برای توسعه‌دهندگانی که از کیبورد دور هستند، تمام پروژه سرورلس در @BotFather آینه شده است. کاربران می‌توانند به مسیر ربات $\rightarrow$ Serverless بروند تا به موارد زیر دسترسی داشته باشند:

  • Handlers: ایجاد، ویرایش و اجرای تست هندلرهای آپدیت. BotFather وب‌هوک را به‌طور خودکار همگام نگه می‌دارد.
  • Library: مدیریت ماژول‌های مشترک lib/ روی صفحه لمسی.
  • Database: ویرایش schema.js با سینتکس مشابه Drizzle، بررسی تغییرات در انتظار و اعمال آن‌ها.
  • CLI Access: دریافت توکن دسترسی CLI برای استفاده در کامپیوتر.

هر تغییری که از طریق BotFather ایجاد شود، می‌تواند با استفاده از npx tgcloud pull به لپ‌تاپ محلی بازگردانده شود. همچنین اجرای یک هندلر در محیط BotFather، خروجی کنسول آن را مستقیماً در چت نمایش می‌دهد.

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

این انتقال به‌طور بنیادی تحلیل هزینه-فایده را برای توسعه‌دهندگان ربات تغییر می‌دهد. با حذف «مالیات سرور» (حداقل هزینه ماهانه یک VPS)، تلگرام مانع ورود برای ربات‌های پیچیده، حالت‌دار (Stateful) و مبتنی بر هوش مصنوعی را پایین آورده است. گنجاندن یک پایگاه‌داده داخلی به این معنی است که تداوم وضعیت پیچیده برای هر کاربر اکنون رایگان و بدون زحمت است و احتمالاً منجر به موجی از Mini Appهای پیشرفته، تابلوهای امتیازات (Leaderboards) و هوش مصنوعی مکالمه‌ای می‌شود.

علاوه بر این، محدودیت عمدی در استفاده از پکیج‌های npm و دسترسی به سیستم فایل نشان‌دهنده اولویت تلگرام است: عملکرد فوق‌العاده در شروع سرد (Cold-start) و امنیت. با کنترل محیط اجرا از طریق سندباکس‌های ایزوله V8 و حذف نیاز به کانتینرها، آن‌ها تضمین می‌کنند که ربات‌ها صرف‌نظر از مقیاس موج آپدیت‌های ورودی، پاسخگو باقی بمانند. این کار عملاً بک‌اند ربات‌ها را تبدیل به یک کالای عمومی (Commoditize) کرده و ارزش را از «چگونه میزبانی کنیم» به «ربات واقعاً چه کاری انجام می‌دهد» منتقل می‌کند.

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

گام بعدی شما

  • اگر رباتی دارید که هزینه VPS ماهانه‌اش برای شما زیاد است، کدها را به ساختار handlers/ و lib/ منتقل کنید.
  • برای مدیریت دیتابیس، ابتدا طرح‌واره خود را در schema.js بنویسید و سپس با npx tgcloud migrate آن را تست کنید.
  • از npx tgcloud run برای تست سریع پیام‌ها بدون نیاز به آپلود روی سرور استفاده کنید.

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

چرا این موضوع مهم است؟

این تغییر با حذف «مالیات سرور»، مانع ورود توسعه‌دهندگان برای ساخت ربات‌های پیچیده و داده‌محور را از بین می‌برد. اعتبار این سیستم بر پایه معماری ایزوله‌های V8 است که تضمین می‌کند ربات‌ها در مقیاس میلیونی بدون افت سرعت اجرا شوند.

تأثیر برای ایران

این ابزار با حذف نیاز به خرید سرورهای خارجی و پرداخت ارزی برای VPS، هزینه‌ی تولید ربات‌های پیشرفته را برای برنامه‌نویسان ایرانی به‌شدت کاهش می‌دهد.

·نگاه ما
تحریریه دات‌هوش

تلگرام با این اقدام، ربات‌ها را از «برنامه‌های متصل به API» به «اپلیکیشن‌های بومی پلتفرم» تبدیل کرده است. حذف وابستگی به npm و سیستم فایل، نشان‌دهنده اولویت مطلق تلگرام بر روی سرعت راه‌اندازی سرد (Cold Start) و امنیت است تا حتی در موج‌های عظیم ترافیک، هیچ رباتی دچار تأخیر نشود. این مدل، ارزش افزوده را از «میزبانی و زیرساخت» به‌طور کامل به «منطق و تجربه کاربر» منتقل می‌کند.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.