أمر الموقع (العُقد)
TL;DR
location.getهو أمر عُقدة (عبرnode.invoke).- مُعطَّل افتراضيًا.
- تستخدم الإعدادات مُحدِّدًا: إيقاف / أثناء الاستخدام / دائمًا.
- مفتاح تبديل منفصل: الموقع الدقيق.
لماذا مُحدِّد (وليس مجرد مفتاح)
أذونات أنظمة التشغيل متعددة المستويات. يمكننا عرض مُحدِّد داخل التطبيق، لكن نظام التشغيل هو من يقرر المنح الفعلي.- iOS/macOS: يمكن للمستخدم اختيار أثناء الاستخدام أو دائمًا في مطالبات النظام/الإعدادات. يمكن للتطبيق طلب ترقية، لكن النظام قد يتطلب الذهاب إلى الإعدادات.
- Android: الموقع في الخلفية إذن منفصل؛ وعلى Android 10+ غالبًا ما يتطلب مسار إعدادات.
- الموقع الدقيق إذن منفصل (iOS 14+ «Precise»، وAndroid «fine» مقابل «coarse»).
نموذج الإعدادات
لكل جهاز عُقدة:location.enabledMode:off | whileUsing | alwayslocation.preciseEnabled: bool
- اختيار
whileUsingيطلب إذن المقدّمة. - اختيار
alwaysيضمن أولًاwhileUsing، ثم يطلب الخلفية (أو يرسل المستخدم إلى الإعدادات إذا لزم). - إذا رفض نظام التشغيل المستوى المطلوب، يتم الرجوع إلى أعلى مستوى ممنوح مع إظهار الحالة.
تعيين الأذونات (node.permissions)
اختياري. تُبلِغ عُقدة macOS عنlocation عبر خريطة الأذونات؛ وقد تُهملها iOS/Android.
الأمر: location.get
يُستدعى عبر node.invoke.
المعلمات (مقترحة):
LOCATION_DISABLED: المُحدِّد مُعطَّل.LOCATION_PERMISSION_REQUIRED: الإذن مفقود للوضع المطلوب.LOCATION_BACKGROUND_UNAVAILABLE: التطبيق في الخلفية لكن المسموح فقط «أثناء الاستخدام».LOCATION_TIMEOUT: لم يتم الحصول على إحداثية في الوقت المحدد.LOCATION_UNAVAILABLE: فشل في النظام / لا مزوّدين.
السلوك في الخلفية (مستقبلي)
الهدف: تمكين النموذج من طلب الموقع حتى عندما تكون العُقدة في الخلفية، ولكن فقط عندما:- يختار المستخدم دائمًا.
- يمنح نظام التشغيل موقع الخلفية.
- يُسمح للتطبيق بالعمل في الخلفية للموقع (وضع الخلفية في iOS / خدمة أمامية في Android أو سماح خاص).
- يرسل Gateway إشعارًا إلى العُقدة (إشعار صامت أو بيانات FCM).
- تستيقظ العُقدة لفترة وجيزة وتطلب الموقع من الجهاز.
- تُمرِّر العُقدة الحمولة إلى Gateway.
- iOS: يتطلب إذن «دائمًا» + وضع الموقع في الخلفية. قد يتم تقييد الإشعار الصامت؛ توقّع إخفاقات متقطعة.
- Android: قد يتطلب الموقع في الخلفية خدمة أمامية؛ وإلا فتوقّع الرفض.
تكامل النموذج/الأدوات
- سطح الأدوات: أداة
nodesتضيف إجراءlocation_get(العُقدة مطلوبة). - CLI:
openclaw nodes location get --node <id>. - إرشادات الوكيل: لا تُستدعِ إلا عندما يكون المستخدم قد فعّل الموقع ويفهم النطاق.
نسخة UX (مقترح)
- إيقاف: «مشاركة الموقع مُعطَّلة.»
- أثناء الاستخدام: «فقط عندما يكون OpenClaw مفتوحًا.»
- دائمًا: «السماح بالموقع في الخلفية. يتطلب إذن النظام.»
- دقيق: «استخدام موقع GPS الدقيق. أوقفه لمشاركة موقع تقريبي.»