Nodes and media
التقاط صورة بالكاميرا
يدعم OpenClaw التقاط الكاميرا لسير عمل الوكيل على عُقد iOS وAndroid وmacOS المقترنة: التقاط صورة (jpg) أو مقطع فيديو قصير (mp4، مع صوت اختياري) عبر node.invoke في Gateway.
يخضع كل وصول إلى الكاميرا لإعداد يتحكم فيه المستخدم على كل منصة.
عقدة iOS
إعداد مستخدم iOS
- علامة تبويب iOS Settings → Camera → Allow Camera (
camera.enabled).- الافتراضي: مفعّل (يُعامل المفتاح المفقود على أنه مفعّل).
- عند إيقافه: تُرجع أوامر
camera.*القيمةCAMERA_DISABLED.
أوامر iOS (عبر node.invoke في Gateway)
-
camera.list- حمولة الاستجابة:
devices— مصفوفة من{ id, name, position, deviceType }.
- حمولة الاستجابة:
-
camera.snap- المعاملات:
facing:front|back(الافتراضي:front)maxWidth: رقم (اختياري؛ الافتراضي1600)quality:0..1(اختياري؛ الافتراضي0.9، ومقيّد إلى[0.05, 1.0])format: حاليًاjpgdelayMs: رقم (اختياري؛ الافتراضي0، والحد الداخلي الأقصى10000)deviceId: سلسلة نصية (اختياري؛ منcamera.list)
- حمولة الاستجابة:
format: "jpg"، وbase64، وwidth، وheight. - قيد الحمولة: يُعاد ضغط الصور لإبقاء الحمولة المرمّزة بنظام base64 دون 5 ميغابايت.
- المعاملات:
-
camera.clip- المعاملات:
facing:front|back(الافتراضي:front)durationMs: رقم (الافتراضي3000، ومقيّد إلى[250, 60000])includeAudio: قيمة منطقية (الافتراضيtrue)format: حاليًاmp4deviceId: سلسلة نصية (اختياري؛ منcamera.list)
- حمولة الاستجابة:
format: "mp4"، وbase64، وdurationMs، وhasAudio.
- المعاملات:
اشتراط وجود iOS في الواجهة الأمامية
كما هو الحال مع canvas.*، لا تسمح عقدة iOS بأوامر camera.* إلا في الواجهة الأمامية. تُرجع الاستدعاءات في الخلفية NODE_BACKGROUND_UNAVAILABLE.
أداة CLI المساعدة
أسهل طريقة للحصول على ملفات الوسائط هي استخدام أداة CLI المساعدة، التي تكتب الوسائط المفكوكة الترميز في ملف مؤقت وتطبع المسار المحفوظ.
openclaw nodes camera snap --node <id> # الافتراضي: الأمامية والخلفية معًا (سطران من MEDIA)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 افتراضيًا --facing both، فيلتقط من الكاميرتين الأمامية والخلفية لتزويد الوكيل بكلا المنظورين؛ مرّر --device-id مع اتجاه واحد محدد صراحةً (تُرفض القيمة both عند تعيين --device-id). تكون ملفات الإخراج مؤقتة (في دليل الملفات المؤقتة لنظام التشغيل) ما لم تنشئ غلافك الخاص.
عقدة Android
إعداد مستخدم Android
- لوحة Android Settings → Camera → Allow Camera (
camera.enabled).- الإعداد الافتراضي للتثبيتات الجديدة هو الإيقاف. تُرحّل التثبيتات الحالية التي تسبق هذا الإعداد إلى حالة التشغيل كي لا تفقد الترقيات بصمت إمكانية الوصول إلى الكاميرا التي كانت تعمل سابقًا.
- عند إيقافه: تُرجع أوامر
camera.*القيمةCAMERA_DISABLED: enable Camera in Settings.
الأذونات
- يلزم
CAMERAلكل منcamera.snapوcamera.clip؛ ويُرجع الإذن المفقود أو المرفوضCAMERA_PERMISSION_REQUIRED. - يلزم
RECORD_AUDIOللأمرcamera.clipعندما تكونincludeAudioبالقيمةtrue؛ ويُرجع الإذن المفقود أو المرفوضMIC_PERMISSION_REQUIRED.
يطلب التطبيق أذونات وقت التشغيل عندما يكون ذلك ممكنًا.
اشتراط وجود Android في الواجهة الأمامية
كما هو الحال مع canvas.*، لا تسمح عقدة Android بأوامر camera.* إلا في الواجهة الأمامية. تُرجع الاستدعاءات في الخلفية NODE_BACKGROUND_UNAVAILABLE: command requires foreground.
أوامر Android (عبر node.invoke في Gateway)
-
camera.list- حمولة الاستجابة:
devices— مصفوفة من{ id, name, position, deviceType }.
- حمولة الاستجابة:
-
camera.snap- المعاملات:
facing(front|back، الافتراضيfront)، وquality(الافتراضي0.95، ومقيّد إلى[0.1, 1.0])، وmaxWidth(الافتراضي1600)، وdeviceId(اختياري؛ يفشل المعرّف غير المعروف بالقيمةINVALID_REQUEST). - حمولة الاستجابة:
format: "jpg"، وbase64، وwidth، وheight. - قيد الحمولة: يُعاد الضغط لإبقاء base64 دون 5 ميغابايت (الحد نفسه المستخدم في iOS).
- المعاملات:
-
camera.clip- المعاملات:
facing(الافتراضيfront)، وdurationMs(الافتراضي3000، ومقيّد إلى[200, 60000])، وincludeAudio(الافتراضيtrue)، وdeviceId(اختياري). - حمولة الاستجابة:
format: "mp4"، وbase64، وdurationMs، وhasAudio. - قيد الحمولة: يقتصر حجم MP4 الخام على 18 ميغابايت قبل ترميز base64؛ وتفشل المقاطع التي تتجاوز الحجم بالقيمة
PAYLOAD_TOO_LARGE(قلّلdurationMsوأعد المحاولة).
- المعاملات:
تطبيق macOS
إعداد مستخدم macOS
يعرض التطبيق المرافق لنظام macOS مربع اختيار:
- Settings → General → Allow Camera (
openclaw.cameraEnabled).- الافتراضي: متوقف.
- عند إيقافه: تُرجع طلبات الكاميرا
CAMERA_DISABLED: enable Camera in Settings.
أداة CLI المساعدة (استدعاء العقدة)
استخدم CLI الرئيسي لـopenclaw لاستدعاء أوامر الكاميرا على عقدة macOS.
openclaw nodes camera list --node <id> # يسرد معرّفات الكاميراتopenclaw nodes camera snap --node <id> # يطبع المسار المحفوظopenclaw 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 # يطبع المسار المحفوظopenclaw nodes camera clip --node <id> --duration-ms 3000 # يطبع المسار المحفوظ (علامة قديمة)openclaw nodes camera clip --node <id> --device-id <id>openclaw nodes camera clip --node <id> --no-audio- يستخدم
openclaw nodes camera snapافتراضيًاmaxWidth=1600ما لم يُتجاوز. - ينتظر
camera.snapمدةdelayMs(الافتراضي 2000 مللي ثانية، ومقيّدة إلى[0, 10000]) بعد استقرار الإحماء والتعريض قبل الالتقاط. - يُعاد ضغط حمولات الصور لإبقاء base64 دون 5 ميغابايت.
السلامة والحدود العملية
- يؤدي الوصول إلى الكاميرا والميكروفون إلى ظهور مطالبات أذونات نظام التشغيل المعتادة (ويتطلب سلاسل استخدام في
Info.plist). - تقتصر مقاطع الفيديو على 60 ثانية لتجنب حمولات العقدة المفرطة في الحجم (الزيادة الناتجة عن base64 بالإضافة إلى حدود الرسائل).
فيديو شاشة macOS (على مستوى نظام التشغيل)
لفيديو الشاشة (وليس الكاميرا)، استخدم التطبيق المرافق لنظام macOS:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # يطبع المسار المحفوظيتطلب إذن Screen Recording في macOS (TCC).