الوسائط والأجهزة
العُقَد
العُقدة هي جهاز مُرافق (macOS/iOS/Android/بدون واجهة) يتصل بـ WebSocket الخاص بالبوابة (نفس المنفذ الخاص بالمشغِّلين) باستخدام role: "node" ويعرض سطحًا للأوامر (مثل canvas.*, camera.*, device.*, notifications.*, system.*) عبر node.invoke. تفاصيل البروتوكول: بروتوكول البوابة. النقل القديم: بروتوكول الجسر (TCP JSONL؛ مُهمَل/مُزال للعُقَد الحالية). يمكن لـ macOS أيضًا التشغيل في وضع العُقدة: يتصل تطبيق شريط القائمة بخادم WS الخاص بالبوابة ويعرض أوامر canvas/الكاميرا المحلية الخاصة به كعُقدة (وبالتالي تعمل openclaw nodes … ضد هذا الجهاز Mac). ملاحظات:
- العُقَد هي أجهزة طرفية، وليست بوابات. إنها لا تشغِّل خدمة البوابة.
- تصل رسائل Telegram/WhatsApp/إلخ إلى البوابة، وليس إلى العُقَد.
- دليل استكشاف الأخطاء وإصلاحها: /nodes/troubleshooting
الإقران + الحالة
تستخدم عُقَد WS إقران الأجهزة. تقدم العُقَد هوية جهاز أثناء connect؛ تنشئ البوابة طلب إقران جهاز لـ role: node. قم بالموافقة عبر واجهة سطر أوامر الأجهزة (أو واجهة المستخدم). واجهة سطر الأو امر السريعة:
openclaw devices list
openclaw devices approve <requestId>
openclaw devices reject <requestId>
openclaw nodes status
openclaw nodes describe --node <idOrNameOrIp>
ملاحظات:
nodes statusيضع علامة على العُقدة على أنها مُقرَنة عندما يتضمن دور إقران الجهاز الخاص بهاnode.node.pair.*(CLI:openclaw nodes pending/approve/reject) هو مخزن إقران عُقَد منفصل تملكه البوابة؛ إنه لا يتحكم في مصافحةconnectالخاصة بـ WS.
مضيف العُقدة البعيدة (system.run)
استخدم مضيف عُقدة عندما يع مل البوابة على جهاز واحد وتريد تنفيذ الأوامر على جهاز آخر. لا يزال النموذج يتحدث إلى البوابة؛ تقوم البوابة بتوجيه مكالمات exec إلى مضيف العُقدة عند تحديد host=node.
ما الذي يعمل أين
- مضيف البوابة: يستقبل الرسائل، يشغِّل النموذج، يُوجِّه مكالمات الأدوات.
- مضيف العُقدة: ينفذ
system.run/system.whichعلى جهاز العُقدة. - الموافقات: يتم فرضها على مضيف العُقدة عبر
~/.openclaw/exec-approvals.json.
بدء تشغيل مضيف عُقدة (في المقدمة)
على جهاز العُقدة:
openclaw node run --host <gateway-host> --port 18789 --display-name "Build Node"
بوابة بعيدة عبر نفق SSH (ربط loopback)
إذا كانت البوابة تربط loopback (gateway.bind=loopback، الافتراضي في الوضع المحلي)، لا يمكن لمضيفي العُقدة البعيدة الاتصال مباشرة. أنشئ نفق SSH وأشر مضيف العُقدة إلى الطرف المحلي للنفق. مثال (مضيف العُقدة -> مضيف البوابة):
# Terminal A (استمر في التشغيل): توجيه المنفذ المحلي 18790 -> بوابة 127.0.0.1:18789
ssh -N -L 18790:127.0.0.1:18789 user@gateway-host
# Terminal B: تصدير رمز البوابة والاتصال عبر النفق
export OPENCLAW_GATEWAY_TOKEN="<gateway-token>"
openclaw node run --host 127.0.0.1 --port 18790 --display-name "Build Node"
ملاحظات:
- الرمز هو
gateway.auth.tokenمن تكوين البوابة (~/.openclaw/openclaw.jsonعلى مضيف البوابة). - يقرأ
openclaw node runOPENCLAW_GATEWAY_TOKENللمصادقة.
بدء تشغيل مضيف عُقدة (خدمة)
openclaw node install --host <gateway-host> --port 18789 --display-name "Build Node"
openclaw node restart
الإقران + التسمية
على مضيف البوابة:
openclaw devices list
openclaw devices approve <requestId>
openclaw nodes status
خيارات التسمية:
--display-nameعلىopenclaw node run/openclaw node install(يستمر في~/.openclaw/node.jsonعلى العُقدة).openclaw nodes rename --node <id|name|ip> --name "Build Node"(تجاوز من البوابة).
قائمة السماح للأوامر
موافقات التنفيذ هي لكل مضيف عُقدة. أضف مدخلات قائمة السماح من البوابة:
openclaw approvals allowlist add --node <id|name|ip> "/usr/bin/uname"
openclaw approvals allowlist add --node <id|name|ip> "/usr/bin/sw_vers"
تعيش الموافقات على مضيف العُقدة في ~/.openclaw/exec-approvals.json.
توجيه exec إلى العُقدة
تكوين الإعدادات الافتراضية (تكوين البوابة):
openclaw config set tools.exec.host node
openclaw config set tools.exec.security allowlist
openclaw config set tools.exec.node "<id-or-name>"
أو لكل جلسة:
/exec host=node security=allowlist node=<id-or-name>
بمجرد التعيين، أي استدعاء exec مع host=node يعمل على مضيف العُقدة (خاضع لقائمة السماح/الموافقات الخاصة بالعُقدة). متعلق:
استدعاء الأوامر
مستوى منخفض (RPC خام):
openclaw nodes invoke --node <idOrNameOrIp> --command canvas.eval --params '{"javaScript":"location.href"}'
توجد مساعدات ذات مستوى أعلى لسير عمل "إرفاق ملف MEDIA للوكيل" الشائعة.
لقطات الشاشة (لقطات canvas)
إذا كانت العُقدة تعرض Canvas (WebView)، فإن canvas.snapshot تُرجع { format, base64 }. مساعد CLI (يكتب إلى ملف مؤقت ويطبع MEDIA:):
openclaw nodes canvas snapshot --node <idOrNameOrIp> --format png
openclaw nodes canvas snapshot --node <idOrNameOrIp> --format jpg --max-width 1200 --quality 0.9
عناصر تحكم Canvas
openclaw nodes canvas present --node <idOrNameOrIp> --target https://example.com
openclaw nodes canvas hide --node <idOrNameOrIp>
openclaw nodes canvas navigate https://example.com --node <idOrNameOrIp>
openclaw nodes canvas eval --node <idOrNameOrIp> --js "document.title"
ملاحظات:
canvas presentتقبل عناوين URL أو مسارات الملفات المحلية (--target)، بالإضافة إلى--x/--y/--width/--heightاختيارية لوضعها.canvas evalتقبل JS مضمن (--js) أو وسيطة موضعية.
A2UI (Canvas)
openclaw nodes canvas a2ui push --node <idOrNameOrIp> --text "Hello"
openclaw nodes canvas a2ui push --node <idOrNameOrIp> --jsonl ./payload.jsonl
openclaw nodes canvas a2ui reset --node <idOrNameOrIp>
ملاحظات:
- فقط A2UI v0.8 JSONL مدعوم (يتم رفض v0.9/createSurface).
الصور + مقاطع الفيديو (كاميرا العُقدة)
الصور (jpg):
openclaw nodes camera list --node <idOrNameOrIp>
openclaw nodes camera snap --node <idOrNameOrIp> # الافتراضي: كلا الاتجاهين (سطرين MEDIA)
openclaw nodes camera snap --node <idOrNameOrIp> --facing front
مقاطع فيديو (mp4):
openclaw nodes camera clip --node <idOrNameOrIp> --duration 10s
openclaw nodes camera clip --node <idOrNameOrIp> --duration 3000 --no-audio
ملاحظات:
- يجب أن تكون العُقدة في المقدمة لـ
canvas.*وcamera.*(تُرجع المكالمات في الخلفيةNODE_BACKGROUND_UNAVAILABLE). - يتم تحديد مدة المقطع (حاليًا
<= 60s) لتجنب حمولات base64 كبيرة الحجم. - سيطالب Android بأذونات
CAMERA/RECORD_AUDIOعندما يكون ذلك ممكنًا؛ تفشل الأذونات المرفوضة بـ*_PERMISSION_REQUIRED.
تسجيلات الشاشة (العُقَد)
تعرض العُقَد screen.record (mp4). مثال:
openclaw nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10
openclaw nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10 --no-audio
ملاحظات:
- تتطلب
screen.recordأن يكون تطبيق العُقدة في المقدمة. - سيعرض Android مطالبة تسجيل الشاشة للنظام قبل التسجيل.
- يتم تحديد تسجيلات الشاشة إلى
<= 60s. --no-audioتعطيل التقاط الميكروفون (مدعوم على iOS/Android؛ يستخدم macOS تقاطعات صوت النظام).- استخدم
--screenلتحديد شاشة عند توفر شاشات متعددة.
الموقع (العُقَد)
تعرض العُقدة location.get عندما يكون الموقع مفعلًا في الإعدادات. مساعد CLI:
openclaw nodes location get --node <idOrNameOrIp>
openclaw nodes location get --node <idOrNameOrIp> --accuracy precise --max-age 15000 --location-timeout 10000
ملاحظات:
- الموقع معطَّل افتراضيًا.
- يتطلب "دائمًا" إذنًا من النظام؛ جلب الخلفية هو أفضل جهد.
- تتضمن الاستجابة خط العرض/خط الطول والدقة (بالأمتار) والطابع الزمني.
الرسائل النصية (عُقَد Android)
يمكن لعُقَد Android عرض sms.send عندما يمنح المستخدم إذن SMS ويدعم الجهاز الاتصالات الهاتفية. استدعاء منخفض المستوى:
openclaw nodes invoke --node <idOrNameOrIp> --command sms.send --params '{"to":"+15555550123","message":"Hello from OpenClaw"}'
ملاحظات:
- يجب قبول مطالبة الإذن على جهاز Android قبل الإعلان عن القدرة.
- لن تعلن الأجهزة التي تعمل فقط عبر Wi-Fi بدون اتصالات هاتفية عن
sms.send.