التقاط الكاميرا
يدعم 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.
الأوامر (عبر node.invoke في Gateway)
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 (ملفات مؤقتة + MEDIA)
أسهل طريقة للحصول على المرفقات هي عبر مساعد CLI، الذي يكتب الوسائط المفكوكة إلى ملف مؤقت ويطبع MEDIA:<path>. أمثلة:
openclaw nodes camera snap --node <id> # default: both front + back (2 MEDIA lines)
openclaw nodes camera snap --node <id> --facing front
openclaw nodes camera clip --node <id> --duration 3000
openclaw nodes camera clip --node <id> --no-audio
ملاحظات:
nodes camera snapيلتقط افتراضيًا من كلا الاتجاهين لإعطاء الوكيل كلا المنظورين.- ملفات الإخراج مؤقتة (في دليل temp الخاص بالنظام) ما لم تقم ببناء غلاف خاص بك.
عقدة 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)- الافتراضي: معطل
- عند التعطيل: تعيد طلبات الكاميرا رسالة "تم تعطيل الكاميرا من قبل المستخدم".
مساعد CLI (استدعاء العقدة)
استخدم واجهة سطر الأوامر الرئيسية openclaw لاستدعاء أوامر الكاميرا على عقدة macOS. أمثلة:
openclaw nodes camera list --node <id> # list camera ids
openclaw nodes camera snap --node <id> # prints MEDIA:<path>
openclaw nodes camera snap --node <id> --max-width 1280
openclaw nodes camera snap --node <id> --delay-ms 2000
openclaw nodes camera snap --node <id> --device-id <id>
openclaw nodes camera clip --node <id> --duration 10s # prints MEDIA:<path>
openclaw nodes camera clip --node <id> --duration-ms 3000 # prints MEDIA:<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(الافتراضي 2000 مللي ثانية) بعد الإحماء/ضبط التعريض قبل الالتقاط. - يتم إعادة ضغط حمولات الصور للحفاظ على حجم base64 أقل من 5 ميجابايت.
السلامة + الحدود العملية
- يثير الوصول إلى الكاميرا والميكروفون مطالبات الأذونات المعتادة لنظام التشغيل (وتتطلب سلاسل استخدام في Info.plist).
- مقاطع الفيديو مقيدة (حاليًا
<= 60s) لتجنب حمولات عقدة كبيرة الحجم (زيادة حجم base64 + حدود الرسائل).
تسجيل شاشة macOS (على مستوى نظام التشغيل)
لتسجيل شاشة الفيديو (وليس الكاميرا)، استخدم تطبيق macOS المرافق:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # prints MEDIA:<path>
ملاحظات:
- يتطلب إذن تسجيل الشاشة (TCC) على macOS.