بنية Gateway
نظرة عامة
- يمتلك Gateway واحد طويل العمر جميع أسطح المراسلة (WhatsApp عبر Baileys، وTelegram عبر grammY، وSlack، وDiscord، وSignal، وiMessage، وWebChat).
- يتصل عملاء مستوى التحكم (تطبيق macOS، وCLI، وواجهة الويب، وعمليات الأتمتة) بـ
Gateway عبر WebSocket على مضيف الربط المهيأ (الافتراضي
127.0.0.1:18789). - تتصل العقد (macOS/iOS/Android/بلا واجهة) أيضًا عبر WebSocket، ولكن
تعلن
role: nodeمع قدرات/أوامر صريحة. - Gateway واحد لكل مضيف؛ وهو المكان الوحيد الذي يفتح جلسة WhatsApp.
- يتم تقديم مضيف canvas بواسطة خادم HTTP الخاص بـ Gateway تحت:
/__openclaw__/canvas/(HTML/CSS/JS قابل للتحرير بواسطة الوكيل)/__openclaw__/a2ui/(مضيف A2UI) ويستخدم المنفذ نفسه الخاص بـ Gateway (الافتراضي18789).
المكونات والتدفقات
Gateway (daemon)
- يحافظ على اتصالات المزوّدين.
- يكشف WS API مكتوبة الأنواع (طلبات، واستجابات، وأحداث دفع من الخادم).
- يتحقق من الإطارات الواردة مقابل JSON Schema.
- يصدر أحداثًا مثل
agentوchatوpresenceوhealthوheartbeatوcron.
العملاء (تطبيق mac / CLI / إدارة الويب)
- اتصال WS واحد لكل عميل.
- يرسلون طلبات (
healthوstatusوsendوagentوsystem-presence). - يشتركون في الأحداث (
tickوagentوpresenceوshutdown).
العقد (macOS / iOS / Android / بلا واجهة)
- تتصل بـ خادم WS نفسه مع
role: node. - توفّر هوية جهاز في
connect؛ ويكون الاقتران قائمًا على الجهاز (الدورnode) وتوجد الموافقة في مخزن اقتران الأجهزة. - تكشف أوامر مثل
canvas.*وcamera.*وscreen.recordوlocation.get.
WebChat
- واجهة ثابتة تستخدم Gateway WS API لسجل الدردشة وعمليات الإرسال.
- في الإعدادات البعيدة، تتصل عبر نفق SSH/Tailscale نفسه مثل بقية العملاء.
دورة حياة الاتصال (عميل واحد)
البروتوكول على السلك (ملخص)
- النقل: WebSocket، وإطارات نصية بحمولة JSON.
- يجب أن يكون الإطار الأول
connect. - بعد المصافحة:
- الطلبات:
{type:"req", id, method, params}→{type:"res", id, ok, payload|error} - الأحداث:
{type:"event", event, payload, seq?, stateVersion?}
- الطلبات:
- إن
hello-ok.features.methods/eventsهي بيانات وصفية للاكتشاف، وليست تفريغًا مولدًا لكل مسار مساعد قابل للاستدعاء. - تستخدم المصادقة بالسر المشترك
connect.params.auth.tokenأوconnect.params.auth.password، وفقًا لوضع مصادقة gateway المهيأ. - تستوفي الأوضاع الحاملة للهوية مثل Tailscale Serve
(
gateway.auth.allowTailscale: true) أو الربط غير المحليgateway.auth.mode: "trusted-proxy"المصادقة من ترويسات الطلب بدلًا منconnect.params.auth.*. - يقوم
gateway.auth.mode: "none"في الإدخال الخاص بتعطيل مصادقة السر المشترك بالكامل؛ وأبقِ هذا الوضع معطّلًا على الإدخالات العامة/غير الموثوقة. - مفاتيح idempotency مطلوبة للطرق ذات الآثار الجانبية (
sendوagent) من أجل إعادة المحاولة بأمان؛ ويحتفظ الخادم بذاكرة تخزين مؤقت قصيرة العمر لإزالة التكرار. - يجب أن تتضمن العقد
role: "node"بالإضافة إلى caps/commands/permissions فيconnect.
الاقتران + الثقة المحلية
- تتضمن جميع عملاء WS (operators + nodes) هوية جهاز عند
connect. - تتطلب معرّفات الأجهزة الجديدة موافقة اقتران؛ ويصدر Gateway رمز جهاز للاتصالات اللاحقة.
- يمكن الموافقة تلقائيًا على الاتصالات المحلية المباشرة عبر loopback للحفاظ على سلاسة تجربة الاستخدام على المضيف نفسه.
- يمتلك OpenClaw أيضًا مسار اتصال ذاتي ضيقًا داخل الخلفية/الحاوية لتدفقات المساعد الموثوقة ذات السر المشترك.
- لا تزال اتصالات tailnet وLAN، بما في ذلك روابط tailnet على المضيف نفسه، تتطلب موافقة اقتران صريحة.
- يجب أن توقّع جميع الاتصالات قيمة nonce
connect.challenge. - تربط حمولة التوقيع
v3أيضًاplatform+deviceFamily؛ ويثبّت gateway البيانات الوصفية المقترنة عند إعادة الاتصال ويتطلب اقتران إصلاح عند تغيّر البيانات الوصفية. - لا تزال الاتصالات غير المحلية تتطلب موافقة صريحة.
- لا تزال مصادقة Gateway (
gateway.auth.*) تنطبق على كل الاتصالات، المحلية أو البعيدة.
كتابة أنواع البروتوكول وتوليد الشيفرة
- تعرّف مخططات TypeBox البروتوكول.
- يتم توليد JSON Schema من هذه المخططات.
- يتم توليد نماذج Swift من JSON Schema.
الوصول البعيد
- المفضل: Tailscale أو VPN.
-
البديل: نفق SSH
- تنطبق المصافحة نفسها + رمز المصادقة نفسه عبر النفق.
- يمكن تمكين TLS + التثبيت الاختياري لـ WS في الإعدادات البعيدة.
لمحة تشغيلية
- البدء:
openclaw gateway(في الواجهة الأمامية، مع تسجيل السجلات إلى stdout). - الصحة:
healthعبر WS (ومضمنة أيضًا فيhello-ok). - الإشراف: launchd/systemd لإعادة التشغيل التلقائي.
الثوابت
- يتحكم Gateway واحد فقط في جلسة Baileys واحدة لكل مضيف.
- المصافحة إلزامية؛ وأي إطار أول غير JSON أو غير
connectيؤدي إلى إغلاق صارم. - لا تتم إعادة تشغيل الأحداث؛ ويجب على العملاء إعادة التحديث عند وجود فجوات.
ذو صلة
- حلقة الوكيل — دورة تنفيذ الوكيل بالتفصيل
- بروتوكول Gateway — عقد بروتوكول WebSocket
- الطابور — طابور الأوامر والتزامن
- الأمان — نموذج الثقة والتقوية