RPC and API

یکپارچه‌سازی‌های Gateway برای برنامه‌های خارجی

اپ‌های خارجی از طریق پروتکل Gateway با OpenClaw ارتباط برقرار می‌کنند: انتقال WebSocket به‌همراه متدهای RPC. وقتی یک اسکریپت، داشبورد، کار CI، افزونهٔ IDE یا فرایند دیگری می‌خواهد اجرای عامل‌ها را آغاز کند، رویدادها را به‌صورت جریانی دریافت کند، منتظر نتایج بماند، کار را لغو کند یا منابع Gateway را بررسی کند، از آن استفاده کنید.

آنچه امروز در دسترس است

سطح وضعیت کاربرد
راهنمای کلاینت Gateway چرخهٔ انتشار بسته‌های npm، احراز هویت، اتصال مجدد، تاریخچه، رویدادها، تأییدها و سیاست نسخه.
راهنمای تعبیه چرخهٔ انتشار محیط فرایند فرزند، آمادگی، چرخهٔ حیات، بازیابی، مالکیت RPC و بسته‌بندی.
پروتکل Gateway آماده انتقال WebSocket، دست‌دهی اتصال، دامنه‌های احراز هویت، نسخه‌بندی پروتکل و رویدادها.
مرجع RPC ‏Gateway آماده متدهای فعلی Gateway برای عامل‌ها، نشست‌ها، وظایف، مدل‌ها، ابزارها، مصنوعات و تأییدها.
openclaw agent آماده یکپارچه‌سازی تک‌مرحله‌ای اسکریپت، هنگامی که فراخوانی CLI از پوسته کافی است.
openclaw message آماده ارسال پیام‌ها یا کنش‌های کانال از اسکریپت‌ها.

مسیر پیشنهادی

  1. یک Gateway را اجرا یا کشف کنید.
  2. از طریق پروتکل Gateway متصل شوید.
  3. متدهای مستندشدهٔ RPC را از مرجع RPC ‏Gateway فراخوانی کنید.
  4. نسخهٔ OpenClaw را که با آن آزمایش می‌کنید ثابت نگه دارید.
  5. هنگام ارتقای OpenClaw، مرجع RPC را دوباره بررسی کنید.

برای اجرای عامل‌ها، با RPC ‏agent شروع کنید و برای دریافت نتیجهٔ نهایی، آن را با agent.wait همراه کنید. برای وضعیت پایدار مکالمه، از متدهای sessions.* استفاده کنید. برای یکپارچه‌سازی‌های رابط کاربری، در رویدادهای Gateway مشترک شوید و فقط خانواده‌های رویدادی را رندر کنید که اپ شما می‌شناسد.

تعلیق هماهنگ میزبان

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

  1. پذیرش ورودی خارجی تحت کنترل میزبان را متوقف کنید.
  2. متد gateway.suspend.prepare را با یک requestId پایدار و یکتا فراخوانی کنید.
  3. اگر پاسخ busy است، فرایند را در حال اجرا نگه دارید و بعداً دوباره تلاش کنید.
  4. اگر پاسخ ready است، مقدار بازگشتی suspensionId را ذخیره کنید، سپس پیش از expiresAtMs فرایند را منجمد کنید یا از آن اسنپ‌شات بگیرید.
  5. پس از رفع انجماد، یا اگر تعلیق کنار گذاشته شد، متد gateway.suspend.resume را با همان suspensionId از طریق WebSocket موجود یا مسیر کنترل Admin HTTP فراخوانی کنید.

یک Gateway آماده‌شده دست‌دهی‌های جدید WebSocket را رد می‌کند. کنترل‌کنندهٔ WebSocket باید اتصال احرازشدهٔ خود را در سراسر عملیات میزبان باز نگه دارد. اگر تضمین این موضوع ممکن نیست، پیش از آماده‌سازی Plugin ‏RPC ‏Admin HTTP را فعال و استفاده کنید. اگر مسیر کنترل از دست برود، پیش از اتصال مجدد منتظر انقضای اجارهٔ دو‌دقیقه‌ای بمانید؛ انقضا پذیرش را به‌طور خودکار دوباره باز می‌کند.

قرارداد RPC به این صورت است:

  • gateway.suspend.prepareoperator.admin؛ پارامترها { "requestId": "stable-host-operation-id" }
  • gateway.suspend.statusoperator.read؛ پارامترها { "suspensionId": "id-from-prepare" }
  • gateway.suspend.resumeoperator.admin؛ پارامترها { "suspensionId": "id-from-prepare" }

فاصله‌های ابتدا و انتهای شناسه‌ها حذف می‌شوند، شناسه‌ها باید دست‌کم یک نویسهٔ غیرفاصله داشته باشند و حداکثر به 128 نویسه محدودند. نتیجهٔ آماده‌سازی مشغول دارای status: "busy"، reason، retryAfterMs، activeCount و blockers است. نتیجهٔ آماده این ساختار را دارد:

json
{  "status": "ready",  "suspensionId": "2c3f...",  "expiresAtMs": 1770000000000,  "activeCount": 0,  "blockers": []}

وضعیت، {"status":"running"} یا یک نتیجهٔ آماده همراه با expiresAtMs را برمی‌گرداند. ازسرگیری {"ok":true,"status":"running","resumed":true} را برمی‌گرداند؛ تکرار آن پس از ازسرگیری موفق، resumed: false را برمی‌گرداند.

یک شناسهٔ درخواست رقیب یا شکست موقت در ازسرگیری زمان‌بند، خطای قابل‌تلاش‌مجدد UNAVAILABLE را همراه با retryAfterMs برمی‌گرداند. هنگام بازیابی زمان‌بند، آماده‌سازی، وضعیت و ازسرگیری همگی آن خطا را برمی‌گردانند، Gateway آماده باقی نمی‌ماند و به‌صورت بسته در برابر خطا عمل می‌کند، و میزبان نباید آن را منجمد کند یا از آن اسنپ‌شات بگیرد. OpenClaw به‌طور خودکار زمان‌بند را دوباره امتحان می‌کند و تنها پس از موفقیت بازیابی، پذیرش را دوباره باز می‌کند. شناسهٔ نامطابق ازسرگیری، INVALID_REQUEST را برمی‌گرداند. آماده‌سازی از بودجهٔ نوشتن صفحهٔ کنترل Gateway با سه تلاش در دقیقه استفاده می‌کند؛ تأخیر بازگشتی برای تلاش مجدد را رعایت کنید. کلاینت‌های WebSocket بر پایهٔ دستگاه و IP دسته‌بندی می‌شوند. کنترل‌کننده‌های Admin HTTP بر پایهٔ IP حل‌شدهٔ کلاینت دسته‌بندی می‌شوند، بنابراین کنترل‌کننده‌های پشت یک پراکسی می‌توانند بودجه‌ای مشترک داشته باشند.

آماده‌سازی فقط مبتنی بر امتناع است: OpenClaw پذیرش جدید ریشه/نشست/فرمان را می‌بندد، تیک‌های خودکار Cron را مکث می‌کند و کار را به‌صورت هم‌زمان بررسی می‌کند. اگر چیزی فعال باشد، پیش از بازگرداندن busy زمان‌بند را از سر می‌گیرد و پذیرش را دوباره باز می‌کند؛ آن کار را قطع یا تخلیه نمی‌کند. اجارهٔ آماده دو دقیقه دوام دارد. تکرار prepare با همان requestId آن را تمدید می‌کند؛ انقضا پیش از بازگشایی پذیرش، زمان‌بند را از سر می‌گیرد. انتشار راه‌اندازی مجدد که موعد آن در طول اجارهٔ آماده فرا می‌رسد تا ازسرگیری اجاره منتظر می‌ماند؛ راه‌اندازی مجدد در حال انجام باعث می‌شود آماده‌سازی busy را برگرداند.

در حالت آماده، /healthz فعال می‌ماند و /readyz مقدار 503 را برمی‌گرداند. پاسخ‌های آمادگی محلی یا احرازشده شامل gateway-draining هستند؛ پروب‌های راه دور احرازنشده فقط { "ready": false } را دریافت می‌کنند. پروب سلامت HTTP، متدهای تعلیق روی اتصال‌های WebSocket موجود و مسیر RPC ‏Admin HTTP که از قبل فعال شده است، در دسترس می‌مانند. سایر RPCها خطای قابل‌تلاش‌مجدد UNAVAILABLE را برمی‌گردانند. مسیرهای داخلی HTTP برای کار کاربر و مسیرهای عادی HTTP ‏Plugin، از جمله APIهای سازگار با OpenAI، عملیات ابزار/نشست، پایش‌های Node و هوک‌های پیکربندی‌شده، 503 را همراه با error.code: "gateway_unavailable" برمی‌گردانند. ارتقاهای جدید WebSocket تحت مالکیت Plugin نیز 503 را برمی‌گردانند؛ این مورد مالکیت ارتقا را پوشش می‌دهد، نه کاری را که بعداً از طریق سوکت تثبیت‌شدهٔ Plugin انجام می‌شود.

این دست‌دهی پیام‌های ورودی را پایدار نمی‌کند، انتقال‌های کانال شخص ثالث را متوقف نمی‌کند و پلتفرم میزبانی را کنترل نمی‌کند. میزبان باید پیش از آماده‌سازی ورودی خود را مسدود کند و همچنان مسئول بیدارسازی، اسنپ‌شات/انجماد و توقف باقی می‌ماند. activeCount شمار کل کارهای رهگیری‌شده است، درحالی‌که blockers شمار دسته‌های غیرصفر و جزئیات محدود وظایف را در بر دارد. این یک مانع عمومی سکون فرایند نیست. مسدودکنندهٔ background-exec فقط تجمیعی است: متن فرمان، شناسه‌های فرایند، خروجی و شناسه‌های نشست یا دامنه هرگز از پروتکل عبور نمی‌کنند. سلامت کانال، نگه‌داری، نوسازی کش، نشست‌های تثبیت‌شدهٔ WebSocket ‏Plugin و کار پس‌زمینهٔ ثبت‌نشدهٔ تحت مالکیت Plugin می‌توانند فعال باقی بمانند. پلتفرم میزبانی باید کل درخت فرایند و سیستم فایل آن را به‌طور سازگار منجمد کند یا از آن اسنپ‌شات بگیرد؛ با این قرارداد اولیه نمی‌توان بی‌کاری کار ثبت‌نشده را اثبات کرد.

کد اپ در برابر کد Plugin

وقتی کد بیرون از OpenClaw قرار دارد، از RPC ‏Gateway استفاده کنید:

  • اسکریپت‌های Node که اجرای عامل‌ها را آغاز یا مشاهده می‌کنند
  • کارهای CI که یک Gateway را فراخوانی می‌کنند
  • داشبوردها و پنل‌های مدیریت
  • افزونه‌های IDE
  • پل‌های خارجی که لازم نیست به Plugin کانال تبدیل شوند
  • آزمون‌های یکپارچه‌سازی با انتقال‌های ساختگی یا واقعی Gateway

وقتی کد درون OpenClaw اجرا می‌شود، از Plugin SDK استفاده کنید:

  • Pluginهای ارائه‌دهنده
  • Pluginهای کانال
  • هوک‌های ابزار یا چرخهٔ حیات
  • Pluginهای چارچوب اجرای عامل
  • کمک‌ابزارهای قابل‌اعتماد زمان اجرا

اپ‌های خارجی نباید openclaw/plugin-sdk/* را وارد کنند؛ آن زیرمسیرها برای Pluginهایی هستند که OpenClaw بارگذاری می‌کند.

مرتبط

Was this useful?
On this page

On this page