Gateway WS protocol هو مستوى التحكم الوحيد + نقل العقد في OpenClaw. يتصل جميع العملاء (CLI، واجهة الويب، تطبيق macOS، عقد iOS/Android، العقد بلا واجهة) عبر WebSocket ويعلنون الدور + النطاق أثناء وقت المصافحة.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
النقل
- WebSocket، إطارات نصية بحمولات JSON.
- يجب أن يكون الإطار الأول طلب
connect. - تُحد إطارات ما قبل الاتصال بـ 64 KiB. بعد مصافحة ناجحة، ينبغي للعملاء
اتباع حدود
hello-ok.policy.maxPayloadوhello-ok.policy.maxBufferedBytes. عند تمكين التشخيصات، تصدر الإطارات الواردة الزائدة الحجم والمخازن الصادرة البطيئة أحداثpayload.largeقبل أن يغلق Gateway الإطار المتأثر أو يسقطه. تحتفظ هذه الأحداث بالأحجام والحدود والأسطح ورموز الأسباب الآمنة. ولا تحتفظ بنص الرسالة أو محتويات المرفقات أو نص الإطار الخام أو الرموز المميزة أو ملفات تعريف الارتباط أو القيم السرية.
المصافحة (connect)
Gateway → العميل (تحدي ما قبل الاتصال):connect
أن يعيد خطأ UNAVAILABLE قابلا لإعادة المحاولة مع ضبط details.reason على
"startup-sidecars" وretryAfterMs. ينبغي للعملاء إعادة محاولة تلك الاستجابة
ضمن ميزانية الاتصال الإجمالية بدلا من عرضها كفشل مصافحة نهائي.
كل من server وfeatures وsnapshot وpolicy مطلوب حسب المخطط
(src/gateway/protocol/schema/frames.ts). كذلك فإن auth مطلوب ويبلّغ
عن الدور/النطاقات المتفاوض عليها. pluginSurfaceUrls اختياري ويربط أسماء أسطح Plugin،
مثل canvas، بعناوين URL مستضافة ومحددة النطاق.
قد تنتهي صلاحية عناوين URL المحددة النطاق لأسطح Plugin. يمكن للعقد استدعاء
node.pluginSurface.refresh مع { "surface": "canvas" } لتلقي إدخال جديد
في pluginSurfaceUrls. لا يدعم إعادة بناء Plugin Canvas التجريبية
مسار التوافق المهمل canvasHostUrl أو canvasCapability أو
node.canvas.capability.refresh؛ يجب على العملاء الأصليين وGateways الحاليين استخدام أسطح Plugin.
عندما لا يصدر رمز جهاز، يبلّغ hello-ok.auth عن الأذونات المتفاوض عليها
دون حقول الرموز:
client.id: "gateway-client"،
client.mode: "backend") حذف device في اتصالات local loopback المباشرة عندما
يصادقون باستخدام رمز/كلمة مرور Gateway المشتركة. هذا المسار مخصص
لاستدعاءات RPC الداخلية لمستوى التحكم، ويمنع خطوط أساس إقران CLI/الجهاز القديمة من
حظر عمل الواجهة الخلفية المحلي مثل تحديثات جلسات الوكلاء الفرعيين. لا يزال العملاء البعيدون،
والعملاء الصادرون من المتصفح، وعملاء العقد، وعملاء رمز الجهاز/هوية الجهاز الصريحون
يستخدمون فحوصات الإقران وترقية النطاق العادية.
عند إصدار رمز جهاز، يتضمن hello-ok أيضا:
hello-ok.auth أيضا إدخالات دور إضافية
محدودة في deviceTokens:
scopes: [] وأي رمز مشغّل مُسلّم يبقى محدودا بقائمة السماح الخاصة بمشغّل التمهيد
(operator.approvals، operator.read,
operator.talk.secrets، operator.write). تبقى فحوصات نطاق التمهيد
مسبوقة بالدور: إدخالات المشغّل تفي فقط بطلبات المشغّل، ولا تزال الأدوار غير المشغّلة
تحتاج إلى نطاقات تحت بادئة دورها الخاصة.
مثال العقدة
التأطير
- الطلب:
{type:"req", id, method, params} - الاستجابة:
{type:"res", id, ok, payload|error} - الحدث:
{type:"event", event, payload, seq?, stateVersion?}
الأدوار + النطاقات
للاطلاع على نموذج نطاقات المشغّل الكامل، وفحوصات وقت الموافقة، ودلالات السر المشترك، راجع نطاقات المشغّل.الأدوار
operator= عميل مستوى التحكم (CLI/واجهة المستخدم/الأتمتة).node= مضيف الإمكانات (camera/screen/canvas/system.run).
النطاقات (المشغّل)
النطاقات الشائعة:operator.readoperator.writeoperator.adminoperator.approvalsoperator.pairingoperator.talk.secrets
talk.config مع includeSecrets: true النطاق operator.talk.secrets
(أو operator.admin).
قد تطلب طرق RPC الخاصة بـ Gateway والمسجلة من Plugin نطاق المشغّل الخاص بها، لكن
بادئات الإدارة الأساسية المحجوزة (config.*، exec.approvals.*، wizard.*،
update.*) تُحل دائما إلى operator.admin.
نطاق الطريقة هو البوابة الأولى فقط. بعض أوامر الشرطة المائلة التي تصل عبر
chat.send تطبق فحوصات أشد على مستوى الأمر فوق ذلك. على سبيل المثال، تتطلب كتابات
/config set و/config unset الدائمة operator.admin.
يملك node.pair.approve أيضا فحص نطاق إضافيا وقت الموافقة فوق
نطاق الطريقة الأساسي:
- الطلبات بلا أوامر:
operator.pairing - الطلبات مع أوامر عقدة غير تنفيذية:
operator.pairing+operator.write - الطلبات التي تتضمن
system.runأوsystem.run.prepareأوsystem.which:operator.pairing+operator.admin
الإمكانات/الأوامر/الأذونات (العقدة)
تعلن العقد ادعاءات الإمكانات وقت الاتصال:caps: فئات إمكانات عالية المستوى مثلcameraوcanvasوscreen، وlocationوvoiceوtalk.commands: قائمة السماح للأوامر الخاصة بالاستدعاء.permissions: مفاتيح تبديل تفصيلية (مثلscreen.recordوcamera.capture).
الحضور
- يعيد
system-presenceإدخالات مفهرسة حسب هوية الجهاز. - تتضمن إدخالات الحضور
deviceIdوrolesوscopesحتى تتمكن واجهات المستخدم من عرض صف واحد لكل جهاز حتى عندما يتصل بصفته مشغّلا وعقدة معا. - يتضمن
node.listالحقلين الاختياريينlastSeenAtMsوlastSeenReason. تبلّغ العقد المتصلة عن وقت اتصالها الحالي كـlastSeenAtMsمع السببconnect؛ كما يمكن للعقد المقترنة أن تبلّغ عن حضور خلفي دائم عندما يحدّث حدث عقدة موثوق بيانات تعريف إقرانها.
حدث بقاء العقدة في الخلفية
قد تستدعي العقدnode.event مع event: "node.presence.alive" لتسجيل أن عقدة مقترنة كانت
حية أثناء إيقاظ في الخلفية دون وضع علامة عليها كمتصلة.
trigger تعداد مغلق: background أو silent_push أو bg_app_refresh
أو significant_location أو manual أو connect. تُطبّع سلاسل المشغّل غير المعروفة إلى
background بواسطة Gateway قبل الحفظ. يكون الحدث دائما فقط لجلسات أجهزة العقد
المصادق عليها؛ وتعيد الجلسات بلا جهاز أو غير المقترنة handled: false.
تعيد Gateways الناجحة نتيجة مهيكلة:
{ "ok": true } لـ node.event؛ ينبغي للعملاء التعامل مع ذلك كـ
استدعاء RPC مُقر به، وليس كاستمرارية حضور دائمة.
تحديد نطاق أحداث البث
تخضع أحداث بث WebSocket المدفوعة من الخادم لبوابات النطاق حتى لا تتلقى الجلسات محددة نطاق الإقران أو الخاصة بالعقدة فقط محتوى الجلسة بشكل سلبي.- تتطلب إطارات الدردشة والوكيل ونتائج الأدوات (بما في ذلك أحداث
agentالمتدفقة ونتائج استدعاء الأدوات) على الأقلoperator.read. تتخطى الجلسات التي لا تملكoperator.readهذه الإطارات بالكامل. - تخضع بثوث
plugin.*المعرفة من Plugin إلىoperator.writeأوoperator.admin، حسب كيفية تسجيلها بواسطة Plugin. - تبقى أحداث الحالة والنقل (
heartbeatوpresenceوtickودورة حياة الاتصال/قطع الاتصال وما إلى ذلك) غير مقيدة حتى تبقى صحة النقل قابلة للملاحظة لكل جلسة مصادق عليها. - تخضع عائلات أحداث البث غير المعروفة لبوابة النطاق افتراضيا (فشل مغلق) ما لم يرخّصها معالج مسجل صراحة.
عائلات طرق RPC الشائعة
سطح WS العام أوسع من أمثلة المصافحة/المصادقة أعلاه. هذه ليست تفريغا مولدا —hello-ok.features.methods قائمة اكتشاف محافظة
مبنية من src/gateway/server-methods-list.ts بالإضافة إلى صادرات طرق Plugin/القناة
المحمّلة. تعامل معها كاكتشاف ميزات، لا كتعداد كامل
لـ src/gateway/server-methods/*.ts.
النظام والهوية
النظام والهوية
- يعيد
healthلقطة صحة Gateway المخزنة مؤقتا أو المفحوصة حديثا. - يعيد
diagnostics.stabilityمسجل استقرار التشخيصات المحدود الأخير. يحتفظ ببيانات تعريف تشغيلية مثل أسماء الأحداث، والأعداد، وأحجام البايت، وقراءات الذاكرة، وحالة قائمة الانتظار/الجلسة، وأسماء القنوات/Plugin، ومعرّفات الجلسات. ولا يحتفظ بنص الدردشة، أو نصوص Webhook، أو مخرجات الأدوات، أو نصوص الطلبات أو الاستجابات الخام، أو الرموز المميزة، أو ملفات تعريف الارتباط، أو القيم السرية. يتطلب نطاق قراءة المشغّل. - يعيد
statusملخص Gateway بنمط/status؛ لا تُضمن الحقول الحساسة إلا لعملاء المشغّل ذوي نطاق الإدارة. - يعيد
gateway.identity.getهوية جهاز Gateway المستخدمة في تدفقات الترحيل والإقران. - يعيد
system-presenceلقطة الحضور الحالية لأجهزة المشغّل/العقدة المتصلة. - يلحق
system-eventحدث نظام ويمكنه تحديث/بث سياق الحضور. - يعيد
last-heartbeatأحدث حدث Heartbeat محفوظ. - يبدّل
set-heartbeatsمعالجة Heartbeat على Gateway.
النماذج والاستخدام
النماذج والاستخدام
- تُرجع
models.listكتالوج النماذج المسموح بها وقت التشغيل. مرّر{ "view": "configured" }للنماذج المكوّنة بحجم مناسب للمنتقي (agents.defaults.modelsأولًا، ثمmodels.providers.*.models)، أو{ "view": "all" }للكتالوج الكامل. - تُرجع
usage.statusملخصات نوافذ استخدام المزوّدين/الحصة المتبقية. - تُرجع
usage.costملخصات استخدام التكلفة المجمّعة لنطاق تاريخ. - تُرجع
doctor.memory.statusجاهزية ذاكرة المتجهات / التضمينات المخزنة مؤقتًا لمساحة عمل الوكيل الافتراضي النشط. مرّر{ "probe": true }أو{ "deep": true }فقط عندما يريد المستدعي صراحةً تنفيذ اختبار اتصال مباشر بمزوّد التضمين. - تُرجع
doctor.memory.remHarnessمعاينة محدودة وللقراءة فقط لحزام REM لعملاء مستوى التحكم البعيد. يمكن أن تتضمن مسارات مساحة العمل، ومقتطفات الذاكرة، وMarkdown مؤسّسًا معروضًا، ومرشحي ترقية عميقة، لذلك يحتاج المستدعون إلىoperator.read. - تُرجع
sessions.usageملخصات الاستخدام لكل جلسة. - تُرجع
sessions.usage.timeseriesاستخدام السلاسل الزمنية لجلسة واحدة. - تُرجع
sessions.usage.logsإدخالات سجل الاستخدام لجلسة واحدة.
القنوات ومساعدات تسجيل الدخول
القنوات ومساعدات تسجيل الدخول
- تُرجع
channels.statusملخصات حالة القنوات/Plugin المدمجة + المحزّمة. - تُسجّل
channels.logoutالخروج من قناة/حساب محدد حيث تدعم القناة تسجيل الخروج. - تبدأ
web.login.startتدفق تسجيل دخول QR/ويب لمزوّد قناة الويب الحالي القادر على QR. - تنتظر
web.login.waitاكتمال تدفق تسجيل دخول QR/ويب هذا وتبدأ القناة عند النجاح. - ترسل
push.testدفعة APNs اختبارية إلى عقدة iOS مسجلة. - تُرجع
voicewake.getمشغلات كلمة التنبيه المخزنة. - تحدّث
voicewake.setمشغلات كلمة التنبيه وتبث التغيير.
المراسلة والسجلات
المراسلة والسجلات
sendهو RPC التسليم الصادر المباشر للإرسالات المستهدفة بالقناة/الحساب/المحادثة خارج مشغّل الدردشة.- تُرجع
logs.tailذيل سجل ملف Gateway المكوّن مع عناصر تحكم المؤشر/الحد والحد الأقصى للبايتات.
Talk وTTS
Talk وTTS
- تُرجع
talk.catalogكتالوج مزوّدي Talk للقراءة فقط للكلام، والنسخ المتدفق، والصوت الفوري. يتضمن معرّفات المزوّدين، والتسميات، وحالة التهيئة، ومعرّفات النماذج/الأصوات المعروضة، والأوضاع القياسية، ووسائل النقل، واستراتيجيات الدماغ، وأعلام الصوت/القدرات الفورية، دون إرجاع أسرار المزوّد أو تعديل الإعدادات العامة. - تُرجع
talk.configحمولة إعدادات Talk الفعالة؛ يتطلبincludeSecretsالصلاحيةoperator.talk.secrets(أوoperator.admin). - تنشئ
talk.session.createجلسة Talk مملوكة من Gateway لـrealtime/gateway-relayأوtranscription/gateway-relayأوstt-tts/managed-room. يتطلبbrain: "direct-tools"الصلاحيةoperator.admin. - تتحقق
talk.session.joinمن رمز جلسة غرفة مُدارة، وتصدر أحداثsession.readyأوsession.replacedحسب الحاجة، وتُرجع بيانات تعريف الغرفة/الجلسة مع أحداث Talk الحديثة دون رمز النص الصريح أو تجزئة الرمز المخزنة. - تضيف
talk.session.appendAudioصوت إدخال PCM بترميز base64 إلى جلسات الترحيل الفوري والنسخ المملوكة من Gateway. - تقود
talk.session.startTurnوtalk.session.endTurnوtalk.session.cancelTurnدورة حياة الدور في الغرفة المُدارة مع رفض الأدوار القديمة قبل مسح الحالة. - توقف
talk.session.cancelOutputإخراج صوت المساعد، أساسًا للمقاطعة المقيّدة بـ VAD في جلسات ترحيل Gateway. - تُكمل
talk.session.submitToolResultاستدعاء أداة مزوّد صدر عن جلسة ترحيل فورية مملوكة من Gateway. مرّرoptions: { willContinue: true }لإخراج أداة مؤقت عندما ستتبعه نتيجة نهائية، أوoptions: { suppressResponse: true }عندما يجب أن تفي نتيجة الأداة باستدعاء المزوّد دون بدء استجابة مساعد فورية أخرى. - تغلق
talk.session.closeجلسة ترحيل أو نسخ أو غرفة مُدارة مملوكة من Gateway وتصدر أحداث Talk النهائية. - تضبط
talk.modeحالة وضع Talk الحالية وتبثها لعملاء WebChat/واجهة التحكم. - تنشئ
talk.client.createجلسة مزوّد فورية مملوكة للعميل باستخدامwebrtcأوprovider-websocketبينما يمتلك Gateway الإعدادات وبيانات الاعتماد والتعليمات وسياسة الأدوات. - تتيح
talk.client.toolCallلوسائل النقل الفورية المملوكة للعميل تمرير استدعاءات أدوات المزوّد إلى سياسة Gateway. أول أداة مدعومة هيopenclaw_agent_consult؛ يتلقى العملاء معرّف تشغيل وينتظرون أحداث دورة حياة الدردشة العادية قبل إرسال نتيجة الأداة الخاصة بالمزوّد. talk.eventهي قناة أحداث Talk الوحيدة للمحوّلات الفورية، والنسخ، وSTT/TTS، والغرفة المُدارة، والاتصالات الهاتفية، والاجتماعات.- تُولّد
talk.speakالكلام عبر مزوّد كلام Talk النشط. - تُرجع
tts.statusحالة تمكين TTS، والمزوّد النشط، والمزوّدين الاحتياطيين، وحالة إعدادات المزوّد. - تُرجع
tts.providersمخزون مزوّدي TTS المرئي. - تبدّل
tts.enableوtts.disableحالة تفضيلات TTS. - تحدّث
tts.setProviderمزوّد TTS المفضّل. - تُشغّل
tts.convertتحويلًا لمرة واحدة من النص إلى كلام.
الأسرار، والإعدادات، والتحديث، والمعالج
الأسرار، والإعدادات، والتحديث، والمعالج
- تعيد
secrets.reloadحل SecretRefs النشطة وتبدّل حالة أسرار وقت التشغيل فقط عند النجاح الكامل. - تحل
secrets.resolveتعيينات الأسرار المستهدفة بالأوامر لمجموعة أوامر/أهداف محددة. - تُرجع
config.getلقطة الإعدادات الحالية والتجزئة. - تكتب
config.setحمولة إعدادات تم التحقق منها. - تدمج
config.patchتحديثًا جزئيًا للإعدادات. - تتحقق
config.applyمن حمولة الإعدادات الكاملة وتستبدلها. - تُرجع
config.schemaحمولة مخطط الإعدادات الحية المستخدمة بواسطة واجهة التحكم وأدوات CLI: المخطط، وuiHints، والإصدار، وبيانات تعريف التوليد، بما في ذلك بيانات تعريف مخطط Plugin + القناة عندما يستطيع وقت التشغيل تحميلها. يتضمن المخطط بيانات تعريف الحقولtitle/descriptionالمستمدة من التسميات ونص المساعدة نفسيهما المستخدمين بواسطة الواجهة، بما في ذلك فروع الكائنات المتداخلة، وأحرف البدل، وعناصر المصفوفات، وتركيباتanyOf/oneOf/allOfعندما توجد وثائق حقول مطابقة. - تُرجع
config.schema.lookupحمولة بحث محددة المسار لمسار إعداد واحد: المسار المطبّع، وعقدة مخطط سطحية، والتلميح المطابق +hintPath، وملخصات الأبناء المباشرين للتنقل التفصيلي في واجهة المستخدم/CLI. تحتفظ عقد مخطط البحث بوثائق المستخدم وحقول التحقق الشائعة (title، وdescription، وtype، وenum، وconst، وformat، وpattern، وحدود الأرقام/السلاسل/المصفوفات/الكائنات، وأعلام مثلadditionalPropertiesوdeprecatedوreadOnlyوwriteOnly). تعرض ملخصات الأبناءkey، وpathالمطبّع، وtype، وrequired، وhasChildren، بالإضافة إلىhint/hintPathالمطابقين. - تُشغّل
update.runتدفق تحديث Gateway وتجدول إعادة تشغيل فقط عندما ينجح التحديث نفسه؛ يمكن للمستدعين ذوي الجلسة تضمينcontinuationMessageحتى يستأنف بدء التشغيل دور وكيل متابعة واحد عبر قائمة انتظار متابعة إعادة التشغيل. تفرض تحديثات مدير الحزم إعادة تشغيل تحديث غير مؤجلة وبلا فترة تهدئة بعد تبديل الحزمة حتى لا تستمر عملية Gateway القديمة في التحميل الكسول من شجرةdistمستبدلة. - تُرجع
update.statusأحدث علامة حارس مخزنة مؤقتًا لإعادة تشغيل التحديث، بما في ذلك إصدار التشغيل بعد إعادة التشغيل عند توفره. - تعرض
wizard.startوwizard.nextوwizard.statusوwizard.cancelمعالج الإعداد الأولي عبر WS RPC.
مساعدات الوكيل ومساحة العمل
مساعدات الوكيل ومساحة العمل
- تُرجع
agents.listإدخالات الوكلاء المكوّنة، بما في ذلك النموذج الفعال وبيانات تعريف وقت التشغيل. - تدير
agents.createوagents.updateوagents.deleteسجلات الوكلاء وربط مساحة العمل. - تدير
agents.files.listوagents.files.getوagents.files.setملفات مساحة عمل الإقلاع المعروضة لوكيل. - تعرض
tasks.listوtasks.getوtasks.cancelدفتر مهام Gateway لعملاء SDK والمشغّلين. - تعرض
artifacts.listوartifacts.getوartifacts.downloadملخصات وتنزيلات العناصر المشتقة من النصوص ضمن نطاقsessionKeyأوrunIdأوtaskIdصريح. تحل استعلامات التشغيل والمهام الجلسة المالكة على جانب الخادم ولا تُرجع إلا وسائط النصوص ذات المصدر المطابق؛ وتُرجع مصادر URL غير الآمنة أو المحلية تنزيلات غير مدعومة بدلًا من الجلب من جانب الخادم. - تعرض
environments.listوenvironments.statusاكتشاف بيئات Gateway المحلية وبيئات العقد للقراءة فقط لعملاء SDK. - تُرجع
agent.identity.getهوية المساعد الفعالة لوكيل أو جلسة. - تنتظر
agent.waitانتهاء تشغيل وتُرجع اللقطة النهائية عند توفرها.
التحكم في الجلسة
التحكم في الجلسة
- تُرجع
sessions.listفهرس الجلسات الحالي، بما في ذلك بيانات تعريفagentRuntimeلكل صف عندما تكون خلفية وقت تشغيل وكيل مهيأة. - تبدّل
sessions.subscribeوsessions.unsubscribeاشتراكات أحداث تغيير الجلسة لعميل WS الحالي. - تبدّل
sessions.messages.subscribeوsessions.messages.unsubscribeاشتراكات أحداث النص/الرسائل لجلسة واحدة. - تُرجع
sessions.previewمعاينات نصوص محدودة لمفاتيح جلسات محددة. - تُرجع
sessions.describeصف جلسة Gateway واحدًا لمفتاح جلسة مطابق تمامًا. - تحل
sessions.resolveهدف جلسة أو تضفي عليه صيغة قياسية. - تنشئ
sessions.createإدخال جلسة جديدًا. - ترسل
sessions.sendرسالة إلى جلسة موجودة. sessions.steerهو متغير المقاطعة والتوجيه لجلسة نشطة.- تلغي
sessions.abortالعمل النشط لجلسة. يمكن للمستدعي تمريرkeyمعrunIdاختياري، أو تمريرrunIdوحده للتشغيلات النشطة التي يستطيع Gateway حلها إلى جلسة. - تحدّث
sessions.patchبيانات تعريف الجلسة/التجاوزات وتبلّغ عن النموذج القياسي المحلول بالإضافة إلىagentRuntimeالفعال. - تنفذ
sessions.resetوsessions.deleteوsessions.compactصيانة الجلسة. - تُرجع
sessions.getصف الجلسة المخزن الكامل. - لا يزال تنفيذ الدردشة يستخدم
chat.historyوchat.sendوchat.abortوchat.inject. يتم تطبيعchat.historyللعرض لعملاء الواجهة: تُزال وسوم التوجيه المضمنة من النص المرئي، وتُزال حمولات XML النصية الصريحة لاستدعاءات الأدوات (بما في ذلك<tool_call>...</tool_call>، و<function_call>...</function_call>، و<tool_calls>...</tool_calls>، و<function_calls>...</function_calls>، وكتل استدعاء الأدوات المقتطعة) ورموز التحكم المسرّبة في النموذج ASCII/كاملة العرض، وتُحذف صفوف المساعد ذات الرموز الصامتة الخالصة مثلNO_REPLY/no_replyالمطابقة تمامًا، ويمكن استبدال الصفوف كبيرة الحجم بعناصر نائبة.
إقران الأجهزة ورموز الأجهزة
إقران الأجهزة ورموز الأجهزة
- تُرجع
device.pair.listالأجهزة المقترنة المعلقة والمعتمدة. - تدير
device.pair.approveوdevice.pair.rejectوdevice.pair.removeسجلات إقران الأجهزة. - تدوّر
device.token.rotateرمز جهاز مقترن ضمن حدود دوره المعتمد ونطاق المستدعي. - تلغي
device.token.revokeرمز جهاز مقترن ضمن حدود دوره المعتمد ونطاق المستدعي.
إقران Node، والاستدعاء، والعمل المعلق
إقران Node، والاستدعاء، والعمل المعلق
- تغطي
node.pair.requestوnode.pair.listوnode.pair.approveوnode.pair.rejectوnode.pair.removeوnode.pair.verifyإقران Node والتحقق من الإقلاع. - تُرجع
node.listوnode.describeحالة Node المعروفة/المتصلة. - تحدّث
node.renameتسمية Node مقترنة. - تمرر
node.invokeأمرًا إلى Node متصلة. - تُرجع
node.invoke.resultنتيجة طلب استدعاء. - ينقل
node.eventالأحداث الصادرة من Node إلى Gateway. node.pending.pullوnode.pending.ackهما واجهتا API لقائمة انتظار Node المتصلة.- تدير
node.pending.enqueueوnode.pending.drainالعمل المعلق الدائم للعقد غير المتصلة/المنفصلة.
عائلات الموافقات
عائلات الموافقات
- تغطي
exec.approval.requestوexec.approval.getوexec.approval.listوexec.approval.resolveطلبات موافقة التنفيذ لمرة واحدة، إضافة إلى البحث عن الموافقات المعلّقة وإعادة تشغيلها. - ينتظر
exec.approval.waitDecisionموافقة تنفيذ معلّقة واحدة ويعيد القرار النهائي (أوnullعند انتهاء المهلة). - يدير
exec.approvals.getوexec.approvals.setلقطات سياسات موافقة التنفيذ في Gateway. - يدير
exec.approvals.node.getوexec.approvals.node.setسياسة موافقة التنفيذ المحلية على العقدة عبر أوامر ترحيل العقدة. - تغطي
plugin.approval.requestوplugin.approval.listوplugin.approval.waitDecisionوplugin.approval.resolveتدفقات الموافقة التي يعرّفها Plugin.
الأتمتة وSkills والأدوات
الأتمتة وSkills والأدوات
- الأتمتة: يجدول
wakeحقن نص تنبيه فوري أو عند Heartbeat التالية؛ وتديرcron.getوcron.listوcron.statusوcron.addوcron.updateوcron.removeوcron.runوcron.runsالأعمال المجدولة. - Skills والأدوات:
commands.listوskills.*وtools.catalogوtools.effectiveوtools.invoke.
عائلات الأحداث الشائعة
chat: تحديثات دردشة واجهة المستخدم مثلchat.injectوأحداث الدردشة الأخرى الخاصة بالنص فقط.session.messageوsession.tool: تحديثات النص/تدفق الأحداث لجلسة مشترَك فيها.sessions.changed: تغيّر فهرس الجلسات أو بياناتها الوصفية.presence: تحديثات لقطات حضور النظام.tick: حدث keepalive / liveness دوري.health: تحديث لقطة صحة Gateway.heartbeat: تحديث تدفق أحداث Heartbeat.cron: حدث تغيّر تشغيل/مهمة cron.shutdown: إشعار إيقاف تشغيل Gateway.node.pair.requested/node.pair.resolved: دورة حياة إقران العقدة.node.invoke.request: بث طلب استدعاء العقدة.device.pair.requested/device.pair.resolved: دورة حياة الجهاز المقترن.voicewake.changed: تغيّر إعدادات محفّز كلمة التنبيه.exec.approval.requested/exec.approval.resolved: دورة حياة موافقة التنفيذ.plugin.approval.requested/plugin.approval.resolved: دورة حياة موافقة Plugin.
طرق مساعدة العقدة
- يمكن للعقد استدعاء
skills.binsلجلب القائمة الحالية بملفات Skills التنفيذية لاستخدامها في فحوص السماح التلقائي.
استدعاءات RPC لسجل المهام
يمكن لعملاء المشغّل فحص سجلات مهام Gateway الخلفية وإلغاؤها عبر استدعاءات RPC لسجل المهام. تعيد هذه الطرق ملخصات مهام منقّحة، لا حالة وقت التشغيل الخام.- يتطلب
tasks.listإذنoperator.read.- المعلمات:
statusاختياري ("queued"أو"running"أو"completed"أو"failed"أو"cancelled"أو"timed_out") أو مصفوفة من تلك الحالات، وagentIdاختياري، وsessionKeyاختياري، وlimitاختياري من1إلى500، وcursorنصي اختياري. - النتيجة:
{ "tasks": TaskSummary[], "nextCursor"?: string }.
- المعلمات:
- يتطلب
tasks.getإذنoperator.read.- المعلمات:
{ "taskId": string }. - النتيجة:
{ "task": TaskSummary }. - تعيد معرّفات المهام المفقودة شكل خطأ عدم العثور في Gateway.
- المعلمات:
- يتطلب
tasks.cancelإذنoperator.write.- المعلمات:
{ "taskId": string, "reason"?: string }. - النتيجة:
{ "found": boolean, "cancelled": boolean, "reason"?: string, "task"?: TaskSummary }. - يوضّح
foundما إذا كان السجل يحتوي على مهمة مطابقة. ويوضّحcancelledما إذا كان وقت التشغيل قد قبل الإلغاء أو سجّله.
- المعلمات:
TaskSummary الحقول id وstatus وبيانات وصفية اختيارية مثل kind
وruntime وtitle وagentId وsessionKey وchildSessionKey وownerKey
وrunId وtaskId وflowId وparentTaskId وsourceId والطوابع الزمنية
والتقدّم والملخص النهائي ونص الخطأ المنقّح.
طرق مساعدة المشغّل
- يمكن للمشغّلين استدعاء
commands.list(operator.read) لجلب مخزون أوامر وقت التشغيل لوكيل.agentIdاختياري؛ احذفه لقراءة مساحة عمل الوكيل الافتراضية.- يتحكم
scopeفي السطح الذي يستهدفهnameالأساسي:- يعيد
textرمز أمر النص الأساسي دون/البادئة - يعيد
nativeومسارbothالافتراضي الأسماء الأصلية الواعية بالمزوّد عندما تكون متاحة
- يعيد
- يحمل
textAliasesالأسماء المستعارة المائلة الدقيقة مثل/modelو/m. - يحمل
nativeNameاسم الأمر الأصلي الواعي بالمزوّد عند وجوده. providerاختياري ولا يؤثر إلا في التسمية الأصلية إضافة إلى توافر أوامر Plugin الأصلية.- يؤدي
includeArgs=falseإلى حذف بيانات المعلمات المتسلسلة من الاستجابة.
- يمكن للمشغّلين استدعاء
tools.catalog(operator.read) لجلب كتالوج أدوات وقت التشغيل لوكيل. تتضمن الاستجابة أدوات مجمّعة وبيانات وصفية عن المصدر:source:coreأوpluginpluginId: مالك Plugin عندما تكونsource="plugin"optional: ما إذا كانت أداة Plugin اختيارية
- يمكن للمشغّلين استدعاء
tools.effective(operator.read) لجلب مخزون الأدوات الفعّال في وقت التشغيل لجلسة.sessionKeyمطلوب.- يستنتج Gateway سياق وقت التشغيل الموثوق من الجلسة على جانب الخادم بدلاً من قبول سياق مصادقة أو تسليم يقدّمه المستدعي.
- تكون الاستجابة محددة بنطاق الجلسة وتعكس ما يمكن للمحادثة النشطة استخدامه الآن، بما في ذلك أدوات النواة وPlugin والقناة.
- يمكن للمشغّلين استدعاء
tools.invoke(operator.write) لاستدعاء أداة واحدة متاحة عبر مسار سياسة Gateway نفسه مثل/tools/invoke.nameمطلوب.argsوsessionKeyوagentIdوconfirmوidempotencyKeyاختيارية.- إذا كان كل من
sessionKeyوagentIdموجودين، فيجب أن يطابق وكيل الجلسة المحلولagentId. - الاستجابة غلاف موجّه إلى SDK يحتوي على
okوtoolNameوoutputاختياري وحقولerrorذات أنواع. تعيد حالات رفض الموافقة أو السياسةok:falseفي الحمولة بدلاً من تجاوز مسار سياسة أدوات Gateway.
- يمكن للمشغّلين استدعاء
skills.status(operator.read) لجلب مخزون Skills المرئي لوكيل.agentIdاختياري؛ احذفه لقراءة مساحة عمل الوكيل الافتراضية.- تتضمن الاستجابة الأهلية والمتطلبات المفقودة وفحوص الإعدادات وخيارات التثبيت المنقّحة دون كشف قيم الأسرار الخام.
- يمكن للمشغّلين استدعاء
skills.searchوskills.detail(operator.read) للحصول على بيانات وصفية لاكتشاف ClawHub. - يمكن للمشغّلين استدعاء
skills.upload.beginوskills.upload.chunkوskills.upload.commit(operator.admin) لتجهيز أرشيف skill خاص قبل تثبيته. هذا مسار رفع إداري منفصل للعملاء الموثوقين، وليس تدفق تثبيت skill العادي من ClawHub، وهو معطّل افتراضياً ما لم يكنskills.install.allowUploadedArchivesمفعّلاً.- ينشئ
skills.upload.begin({ kind: "skill-archive", slug, sizeBytes, sha256?, force?, idempotencyKey? })رفعاً مرتبطاً بتلك قيمة slug وقيمة force. - يضيف
skills.upload.chunk({ uploadId, offset, dataBase64 })بايتات عند الإزاحة المفككة الدقيقة. - يتحقق
skills.upload.commit({ uploadId, sha256? })من الحجم النهائي و SHA-256. لا يؤدي commit إلا إلى إنهاء الرفع؛ ولا يثبّت skill. - أرشيفات skill المرفوعة هي أرشيفات zip تحتوي على جذر
SKILL.md. ولا يحدد اسم الدليل الداخلي للأرشيف هدف التثبيت أبداً.
- ينشئ
- يمكن للمشغّلين استدعاء
skills.install(operator.admin) بثلاثة أوضاع:- وضع ClawHub: يثبّت
{ source: "clawhub", slug, version?, force? }مجلد skill في دليلskills/ضمن مساحة عمل الوكيل الافتراضية. - وضع الرفع: يثبّت
{ source: "upload", uploadId, slug, force?, sha256?, timeoutMs? }رفعاً مكتمل commit في دليلskills/<slug>ضمن مساحة عمل الوكيل الافتراضية. يجب أن تطابق قيمة slug وقيمة force طلبskills.upload.beginالأصلي. يُرفض هذا الوضع ما لم يكنskills.install.allowUploadedArchivesمفعّلاً. لا يؤثر الإعداد في تثبيتات ClawHub. - وضع مثبّت Gateway: يشغّل
{ name, installId, dangerouslyForceUnsafeInstall?, timeoutMs? }إجراءmetadata.openclaw.installمعلناً على مضيف Gateway.
- وضع ClawHub: يثبّت
- يمكن للمشغّلين استدعاء
skills.update(operator.admin) بوضعين:- يحدّث وضع ClawHub قيمة slug واحدة متتبعة أو جميع تثبيتات ClawHub المتتبعة في مساحة عمل الوكيل الافتراضية.
- يطبّق وضع الإعدادات تصحيحات على قيم
skills.entries.<skillKey>مثلenabledوapiKeyوenv.
عروض models.list
يقبل models.list معلمة view اختيارية:
- محذوفة أو
"default": سلوك وقت التشغيل الحالي. إذا كانagents.defaults.modelsمهيأً، فستكون الاستجابة هي الكتالوج المسموح، بما في ذلك النماذج المكتشفة ديناميكياً لإدخالاتprovider/*. وإلا تكون الاستجابة هي كتالوج Gateway الكامل. "configured": سلوك بحجم المنتقي. إذا كانagents.defaults.modelsمهيأً، فإنه يظل صاحب الأولوية، بما في ذلك الاكتشاف المحدد بنطاق المزوّد لإدخالاتprovider/*. ومن دون قائمة سماح، تستخدم الاستجابة إدخالاتmodels.providers.*.modelsالصريحة، مع الرجوع إلى الكتالوج الكامل فقط عندما لا توجد صفوف نماذج مهيأة."all": كتالوج Gateway الكامل، مع تجاوزagents.defaults.models. استخدم هذا لواجهات التشخيص والاكتشاف، لا لمنتقيات النماذج العادية.
موافقات التنفيذ
- عندما يحتاج طلب تنفيذ إلى موافقة، يبث Gateway الحدث
exec.approval.requested. - يحل عملاء المشغّل ذلك باستدعاء
exec.approval.resolve(يتطلب نطاقoperator.approvals). - بالنسبة إلى
host=node، يجب أن يتضمنexec.approval.requestقيمةsystemRunPlan(الحقول القانونيةargv/cwd/rawCommand/بيانات الجلسة الوصفية). تُرفض الطلبات التي تفتقدsystemRunPlan. - بعد الموافقة، تعيد استدعاءات
node.invoke system.runالمعاد توجيهها استخدامsystemRunPlanالقانونية تلك كسياق موثوق للأمر/cwd/الجلسة. - إذا عدّل مستدعٍ
commandأوrawCommandأوcwdأوagentIdأوsessionKeyبين التحضير والتوجيه النهائي الموافق عليه إلىsystem.run، فإن Gateway يرفض التشغيل بدلاً من الوثوق بالحمولة المعدّلة.
رجوع تسليم الوكيل
- يمكن أن تتضمن طلبات
agentالقيمةdeliver=trueلطلب تسليم صادر. - يحافظ
bestEffortDeliver=falseعلى السلوك الصارم: أهداف التسليم غير المحلولة أو الداخلية فقط تعيدINVALID_REQUEST. - يسمح
bestEffortDeliver=trueبالرجوع إلى التنفيذ الخاص بالجلسة فقط عندما يتعذر حل مسار خارجي قابل للتسليم (على سبيل المثال جلسات داخلية/دردشة ويب أو إعدادات متعددة القنوات مبهمة). - قد تتضمن نتائج
agentالنهائيةresult.deliveryStatusعندما يكون التسليم مطلوباً، باستخدام حالاتsentوsuppressedوpartial_failedوfailedنفسها الموثقة لـopenclaw agent --json --deliver.
تحديد الإصدارات
- يوجد
PROTOCOL_VERSIONفيsrc/gateway/protocol/version.ts. - يرسل العملاء
minProtocol+maxProtocol؛ ويرفض الخادم النطاقات التي لا تتضمن بروتوكوله الحالي. تستخدم العملاء الأصلية حداً أدنى v3 حتى تتمكن عملاء v4 الإضافية من الوصول إلى بوابات v3. - تُولَّد المخططات + النماذج من تعريفات TypeBox:
pnpm protocol:genpnpm protocol:gen:swiftpnpm protocol:check
ثوابت العميل
يستخدم العميل المرجعي فيsrc/gateway/client.ts هذه القيم الافتراضية. القيم
ثابتة عبر protocol v4 وهي خط الأساس المتوقع للعملاء الخارجيين.
| الثابت | الافتراضي | المصدر |
|---|---|---|
PROTOCOL_VERSION | 4 | src/gateway/protocol/version.ts |
MIN_CLIENT_PROTOCOL_VERSION | 3 | src/gateway/protocol/version.ts |
| مهلة الطلب (لكل RPC) | 30_000 ms | src/gateway/client.ts (requestTimeoutMs) |
| مهلة المصادقة المسبقة / تحدي الاتصال | 15_000 ms | src/gateway/handshake-timeouts.ts (يمكن أن يرفع config/env ميزانية الخادم/العميل المقترنة) |
| تأخير إعادة الاتصال الأولي | 1_000 ms | src/gateway/client.ts (backoffMs) |
| أقصى تأخير لإعادة الاتصال | 30_000 ms | src/gateway/client.ts (scheduleReconnect) |
| حد إعادة المحاولة السريعة بعد إغلاق رمز الجهاز | 250 ms | src/gateway/client.ts |
فترة السماح للإيقاف القسري قبل terminate() | 250 ms | FORCE_STOP_TERMINATE_GRACE_MS |
مهلة stopAndWait() الافتراضية | 1_000 ms | STOP_AND_WAIT_TIMEOUT_MS |
فاصل النبض الافتراضي (قبل hello-ok) | 30_000 ms | src/gateway/client.ts |
| إغلاق مهلة النبض | الرمز 4000 عندما يتجاوز الصمت tickIntervalMs * 2 | src/gateway/client.ts |
MAX_PAYLOAD_BYTES | 25 * 1024 * 1024 (25 ميغابايت) | src/gateway/server-constants.ts |
policy.tickIntervalMs وpolicy.maxPayload
وpolicy.maxBufferedBytes في hello-ok؛ وينبغي للعملاء الالتزام بهذه القيم
بدلا من الافتراضيات السابقة للمصافحة.
المصادقة
- تستخدم مصادقة Gateway بالسر المشترك
connect.params.auth.tokenأوconnect.params.auth.password، حسب وضع المصادقة المكوَّن. - أوضاع حاملة الهوية مثل Tailscale Serve
(
gateway.auth.allowTailscale: true) أوgateway.auth.mode: "trusted-proxy"غير المعتمدة على local loopback تفي بفحص مصادقة الاتصال من ترويسات الطلب بدلا منconnect.params.auth.*. - يتجاوز
gateway.auth.mode: "none"للإدخال الخاص مصادقة الاتصال بالسر المشترك بالكامل؛ لا تعرض هذا الوضع على إدخال عام/غير موثوق. - بعد الاقتران، يصدر Gateway رمز جهاز مقيَّدا بدور الاتصال + النطاقات. يُعاد في
hello-ok.auth.deviceTokenوينبغي أن يحفظه العميل لاستخدامه في الاتصالات المستقبلية. - ينبغي للعملاء حفظ
hello-ok.auth.deviceTokenالأساسي بعد أي اتصال ناجح. - ينبغي أن تعيد إعادة الاتصال باستخدام رمز الجهاز المخزَّن استخدام مجموعة النطاقات الموافق عليها والمخزنة لذلك الرمز أيضا. يحافظ هذا على وصول القراءة/الفحص/الحالة الذي مُنح مسبقا، ويتجنب تضييق إعادة الاتصالات بصمت إلى نطاق ضمني مقتصر على المدير فقط.
- تجميع مصادقة الاتصال من جانب العميل (
selectConnectAuthفيsrc/gateway/client.ts):auth.passwordمستقل، ويُمرَّر دائما عند ضبطه.- يُملأ
auth.tokenحسب ترتيب الأولوية: الرمز المشترك الصريح أولا، ثمdeviceTokenصريح، ثم رمز مخزن لكل جهاز (مفهرس حسبdeviceId+role). - لا يُرسل
auth.bootstrapTokenإلا عندما لا ينتج أي مما سبقauth.token. يمنعه الرمز المشترك أو أي رمز جهاز محلول. - تخضع الترقية التلقائية لرمز جهاز مخزن عند إعادة محاولة
AUTH_TOKEN_MISMATCHلمرة واحدة لـ نقاط النهاية الموثوقة فقط — loopback، أوwss://معtlsFingerprintمثبت. لا يتأهلwss://العام دون تثبيت.
- إدخالات
hello-ok.auth.deviceTokensالإضافية هي رموز تسليم bootstrap. احفظها فقط عندما يستخدم الاتصال مصادقة bootstrap على نقل موثوق مثلwss://أو الاقتران عبر loopback/محلي. - إذا قدّم العميل
deviceTokenصريحا أوscopesصريحة، فإن مجموعة النطاقات التي طلبها المستدعي تبقى المرجع؛ لا يُعاد استخدام النطاقات المخزنة مؤقتا إلا عندما يعيد العميل استخدام الرمز المخزن لكل جهاز. - يمكن تدوير/إبطال رموز الأجهزة عبر
device.token.rotateوdevice.token.revoke(يتطلب نطاقoperator.pairing). - يعيد
device.token.rotateبيانات وصفية للتدوير. يعكس رمز الحامل البديل فقط للاستدعاءات من الجهاز نفسه التي تمت مصادقتها بالفعل باستخدام رمز ذلك الجهاز، بحيث يمكن للعملاء المعتمدين على الرمز فقط حفظ البديل قبل إعادة الاتصال. لا تعكس تدويرات السر المشترك/المدير رمز الحامل. - يبقى إصدار الرموز وتدويرها وإبطالها محصورا في مجموعة الأدوار الموافق عليها والمسجلة في إدخال اقتران ذلك الجهاز؛ لا يمكن لتعديل الرمز توسيع أو استهداف دور جهاز لم تمنحه موافقة الاقتران مطلقا.
- بالنسبة إلى جلسات رموز الأجهزة المقترنة، تكون إدارة الجهاز ذاتية النطاق ما لم يكن لدى
المستدعي أيضا
operator.admin: يستطيع المستدعون غير المديرين إزالة/إبطال/تدوير إدخال جهازهم الخاص فقط. - يتحقق
device.token.rotateوdevice.token.revokeأيضا من مجموعة نطاقات رمز المشغل الهدف مقابل نطاقات جلسة المستدعي الحالية. لا يستطيع المستدعون غير المديرين تدوير أو إبطال رمز مشغل أوسع مما لديهم بالفعل. - تتضمن إخفاقات المصادقة
error.details.codeإضافة إلى تلميحات الاسترداد:error.details.canRetryWithDeviceToken(boolean)error.details.recommendedNextStep(retry_with_device_token,update_auth_configuration,update_auth_credentials,wait_then_retry,review_auth_configuration)
- سلوك العميل عند
AUTH_TOKEN_MISMATCH:- يمكن للعملاء الموثوقين محاولة إعادة محاولة واحدة محدودة باستخدام رمز مخزن لكل جهاز.
- إذا فشلت تلك المحاولة، ينبغي للعملاء إيقاف حلقات إعادة الاتصال التلقائية وإظهار إرشادات إجراء للمشغل.
- يعني
AUTH_SCOPE_MISMATCHأن رمز الجهاز تم التعرف عليه لكنه لا يغطي الدور/النطاقات المطلوبة. ينبغي ألا يقدّم العملاء هذا على أنه رمز سيئ؛ اطلب من المشغل إعادة الاقتران أو الموافقة على عقد نطاق أضيق/أوسع.
هوية الجهاز + الاقتران
- ينبغي أن تتضمن Nodes هوية جهاز مستقرة (
device.id) مشتقة من بصمة زوج مفاتيح. - تصدر Gateways رموزا لكل جهاز + دور.
- موافقات الاقتران مطلوبة لمعرّفات الأجهزة الجديدة ما لم تكن الموافقة التلقائية المحلية مفعّلة.
- تتمحور الموافقة التلقائية على الاقتران حول اتصالات local loopback المباشرة.
- يمتلك OpenClaw أيضا مسار اتصال ذاتي ضيق للخلفية/الحاوية المحلية من أجل تدفقات المساعد الموثوقة بالسر المشترك.
- ما تزال اتصالات tailnet أو LAN على المضيف نفسه تُعامل كاتصالات بعيدة للاقتران وتتطلب موافقة.
- عادةً ما يتضمن عملاء WS هوية
deviceأثناءconnect(المشغل + node). استثناءات المشغل دون جهاز الوحيدة هي مسارات الثقة الصريحة:gateway.controlUi.allowInsecureAuth=trueلتوافق HTTP غير الآمن المقتصر على localhost.- نجاح مصادقة واجهة Control UI للمشغل عبر
gateway.auth.mode: "trusted-proxy". gateway.controlUi.dangerouslyDisableDeviceAuth=true(كسر طارئ، خفض أمني شديد).- استدعاءات RPC الخلفية المباشرة عبر loopback لـ
gateway-clientوالمصادق عليها باستخدام رمز/كلمة مرور Gateway المشتركة.
- يجب على جميع الاتصالات توقيع nonce في
connect.challengeالمقدم من الخادم.
تشخيصات ترحيل مصادقة الجهاز
بالنسبة إلى العملاء القدامى الذين ما زالوا يستخدمون سلوك التوقيع السابق للتحدي، يعيدconnect الآن
رموز تفاصيل DEVICE_AUTH_* ضمن error.details.code مع error.details.reason مستقر.
إخفاقات الترحيل الشائعة:
| الرسالة | details.code | details.reason | المعنى |
|---|---|---|---|
device nonce required | DEVICE_AUTH_NONCE_REQUIRED | device-nonce-missing | أغفل العميل device.nonce (أو أرسله فارغا). |
device nonce mismatch | DEVICE_AUTH_NONCE_MISMATCH | device-nonce-mismatch | وقّع العميل باستخدام nonce قديم/خاطئ. |
device signature invalid | DEVICE_AUTH_SIGNATURE_INVALID | device-signature | حمولة التوقيع لا تطابق حمولة v2. |
device signature expired | DEVICE_AUTH_SIGNATURE_EXPIRED | device-signature-stale | الطابع الزمني الموقّع خارج الانحراف المسموح. |
device identity mismatch | DEVICE_AUTH_DEVICE_ID_MISMATCH | device-id-mismatch | device.id لا يطابق بصمة المفتاح العام. |
device public key invalid | DEVICE_AUTH_PUBLIC_KEY_INVALID | device-public-key | فشل تنسيق/توحيد المفتاح العام. |
- انتظر دائما
connect.challenge. - وقّع حمولة v2 التي تتضمن nonce الخادم.
- أرسل nonce نفسه في
connect.params.device.nonce. - حمولة التوقيع المفضلة هي
v3، والتي تربطplatformوdeviceFamilyإضافة إلى حقول الجهاز/العميل/الدور/النطاقات/الرمز/nonce. - تظل توقيعات
v2القديمة مقبولة للتوافق، لكن تثبيت البيانات الوصفية للأجهزة المقترنة ما يزال يتحكم في سياسة الأوامر عند إعادة الاتصال.
TLS + التثبيت
- TLS مدعوم لاتصالات WS.
- يمكن للعملاء اختياريا تثبيت بصمة شهادة Gateway (راجع إعداد
gateway.tlsإضافة إلىgateway.remote.tlsFingerprintأو CLI--tls-fingerprint).
النطاق
يعرض هذا البروتوكول واجهة Gateway API الكاملة (الحالة، القنوات، النماذج، الدردشة، الوكيل، الجلسات، Nodes، الموافقات، إلخ). يُعرَّف السطح الدقيق بواسطة مخططات TypeBox فيsrc/gateway/protocol/schema.ts.