- عقدة 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، الذي يكتب الوسائط المفكوكة الترميز إلى ملف مؤقت ويطبع المسار المحفوظ. أمثلة:- يستخدم
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 snapالقيمةmaxWidth=1600افتراضيًا ما لم يتم تجاوزها. - على macOS، ينتظر
camera.snapمدةdelayMs(الافتراضي 2000ms) بعد الإحماء/استقرار التعريض قبل الالتقاط. - يُعاد ضغط حمولات الصور لإبقاء base64 أقل من 5 ميغابايت.
السلامة والحدود العملية
- يؤدي الوصول إلى الكاميرا والميكروفون إلى مطالبات أذونات نظام التشغيل المعتادة (ويتطلب سلاسل استخدام في Info.plist).
- تُقيّد مقاطع الفيديو (حاليًا
<= 60s) لتجنب حمولات العقد كبيرة الحجم (تكلفة base64 الإضافية + حدود الرسائل).
فيديو شاشة macOS (على مستوى نظام التشغيل)
بالنسبة إلى فيديو الشاشة (وليس الكاميرا)، استخدم المرافق على macOS:- يتطلب إذن تسجيل الشاشة في macOS (TCC).