Nodes and media
التقاط الكاميرا
يدعم OpenClaw التقاط الكاميرا لسير عمل الوكلاء:
- عقدة iOS (مقترنة عبر Gateway): التقط صورة (
jpg) أو مقطع فيديو قصيرًا (mp4، مع صوت اختياري) عبرnode.invoke. - عقدة Android (مقترنة عبر Gateway): التقط صورة (
jpg) أو مقطع فيديو قصيرًا (mp4، مع صوت اختياري) عبرnode.invoke. - تطبيق macOS (عقدة عبر Gateway): التقط صورة (
jpg) أو مقطع فيديو قصيرًا (mp4، مع صوت اختياري) عبرnode.invoke.
كل وصول إلى الكاميرا محمي خلف إعدادات يتحكم بها المستخدم.
عقدة iOS
إعداد المستخدم (مفعّل افتراضيًا)
- تبويب إعدادات iOS ← الكاميرا ← السماح بالكاميرا (
camera.enabled)- الافتراضي: مفعّل (يُعامل المفتاح المفقود على أنه مفعّل).
- عند إيقافه: تعيد أوامر
camera.*القيمةCAMERA_DISABLED.
الأوامر (عبر Gateway node.invoke)
-
camera.list- حمولة الاستجابة:
devices: مصفوفة من{ id, name, position, deviceType }
- حمولة الاستجابة:
-
camera.snap- المعاملات:
facing:front|back(الافتراضي:front)maxWidth: رقم (اختياري؛ الافتراضي1600على عقدة iOS)quality:0..1(اختياري؛ الافتراضي0.9)format: حاليًاjpgdelayMs: رقم (اختياري؛ الافتراضي0)deviceId: سلسلة نصية (اختياري؛ منcamera.list)
- حمولة الاستجابة:
format: "jpg"base64: "<...>"width,height
- حماية الحمولة: يُعاد ضغط الصور لإبقاء حمولة base64 أقل من 5 ميغابايت.
- المعاملات:
-
camera.clip- المعاملات:
facing:front|back(الافتراضي:front)durationMs: رقم (الافتراضي3000، ومحدود بحد أقصى60000)includeAudio: قيمة منطقية (الافتراضيtrue)format: حاليًاmp4deviceId: سلسلة نصية (اختياري؛ منcamera.list)
- حمولة الاستجابة:
format: "mp4"base64: "<...>"durationMshasAudio
- المعاملات:
متطلب الواجهة الأمامية
مثل canvas.*، لا تسمح عقدة iOS بأوامر camera.* إلا في الواجهة الأمامية. تعيد الاستدعاءات في الخلفية NODE_BACKGROUND_UNAVAILABLE.
مساعد CLI
أسهل طريقة للحصول على ملفات الوسائط هي عبر مساعد CLI، الذي يكتب الوسائط المفكوكة الترميز إلى ملف مؤقت ويطبع المسار المحفوظ.
أمثلة:
openclaw nodes camera snap --node <id> # default: both front + back (2 MEDIA lines)openclaw nodes camera snap --node <id> --facing frontopenclaw nodes camera clip --node <id> --duration 3000openclaw nodes camera clip --node <id> --no-audioملاحظات:
- يستخدم
nodes camera snapكلا الاتجاهين معًا افتراضيًا ليمنح الوكيل كلا المنظورين. - ملفات الإخراج مؤقتة (في دليل النظام المؤقت) ما لم تبنِ مغلّفك الخاص.
عقدة Android
إعداد مستخدم Android (مفعّل افتراضيًا)
- ورقة إعدادات Android ← الكاميرا ← السماح بالكاميرا (
camera.enabled)- الافتراضي: مفعّل (يُعامل المفتاح المفقود على أنه مفعّل).
- عند إيقافه: تعيد أوامر
camera.*القيمةCAMERA_DISABLED.
الأذونات
- يتطلب Android أذونات وقت التشغيل:
CAMERAلكل منcamera.snapوcamera.clip.RECORD_AUDIOلـcamera.clipعندما تكونincludeAudio=true.
إذا كانت الأذونات مفقودة، فسيطلبها التطبيق عندما يكون ذلك ممكنًا؛ وإذا رُفضت، تفشل طلبات camera.* بخطأ
*_PERMISSION_REQUIRED.
متطلب الواجهة الأمامية في Android
مثل canvas.*، لا تسمح عقدة Android بأوامر camera.* إلا في الواجهة الأمامية. تعيد الاستدعاءات في الخلفية NODE_BACKGROUND_UNAVAILABLE.
أوامر Android (عبر Gateway node.invoke)
camera.list- حمولة الاستجابة:
devices: مصفوفة من{ id, name, position, deviceType }
- حمولة الاستجابة:
حماية الحمولة
يُعاد ضغط الصور لإبقاء حمولة base64 أقل من 5 ميغابايت.
تطبيق macOS
إعداد المستخدم (متوقف افتراضيًا)
يعرض التطبيق المرافق على macOS مربع اختيار:
- الإعدادات ← عام ← السماح بالكاميرا (
openclaw.cameraEnabled)- الافتراضي: متوقف
- عند إيقافه: تعيد طلبات الكاميرا "Camera disabled by user".
مساعد CLI (استدعاء العقدة)
استخدم CLI الرئيسي openclaw لاستدعاء أوامر الكاميرا على عقدة macOS.
أمثلة:
openclaw nodes camera list --node <id> # list camera idsopenclaw nodes camera snap --node <id> # prints saved pathopenclaw nodes camera snap --node <id> --max-width 1280openclaw nodes camera snap --node <id> --delay-ms 2000openclaw nodes camera snap --node <id> --device-id <id>openclaw nodes camera clip --node <id> --duration 10s # prints saved pathopenclaw nodes camera clip --node <id> --duration-ms 3000 # prints saved path (legacy flag)openclaw nodes camera clip --node <id> --device-id <id>openclaw nodes camera clip --node <id> --no-audioملاحظات:
- يستخدم
openclaw nodes camera snapالقيمةmaxWidth=1600افتراضيًا ما لم يتم تجاوزها. - على macOS، ينتظر
camera.snapمدةdelayMs(الافتراضي 2000ms) بعد الإحماء/استقرار التعريض قبل الالتقاط. - يُعاد ضغط حمولات الصور لإبقاء base64 أقل من 5 ميغابايت.
السلامة والحدود العملية
- يؤدي الوصول إلى الكاميرا والميكروفون إلى مطالبات أذونات نظام التشغيل المعتادة (ويتطلب سلاسل استخدام في Info.plist).
- تُقيّد مقاطع الفيديو (حاليًا
<= 60s) لتجنب حمولات العقد كبيرة الحجم (تكلفة base64 الإضافية + حدود الرسائل).
فيديو شاشة macOS (على مستوى نظام التشغيل)
بالنسبة إلى فيديو الشاشة (وليس الكاميرا)، استخدم المرافق على macOS:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # prints saved pathملاحظات:
- يتطلب إذن تسجيل الشاشة في macOS (TCC).