位置指令(節點)
TL;DR
location.get是一個節點指令(透過node.invoke)。- 預設為關閉。
- 設定使用選擇器:關閉/使用中/永遠。
- 獨立開關:精確位置。
為何使用選擇器(而不只是開關)
作業系統權限是多層級的。 作業系統權限是多層級的。 We can expose a selector in-app, but the OS still decides the actual grant.- iOS/macOS:使用者可在系統提示或「設定」中選擇 使用中 或 永遠。App 可以請求升級,但 OS 可能要求前往「設定」。 應用程式可以請求升級,但作業系統可能需要透過「設定」。
- Android:背景位置是獨立權限;在 Android 10+ 上通常需要走「設定」流程。
- 精確位置是獨立授權(iOS 14+ 的「精確」,Android 的「fine」對比「coarse」)。
設定模型
每個節點裝置:location.enabledMode:off | whileUsing | alwayslocation.preciseEnabled:bool
- 選擇
whileUsing會請求前景權限。 - 選擇
always會先確保whileUsing,接著請求背景權限(或在需要時將使用者導向設定)。 - 若 OS 拒絕所請求的層級,回復到已授予的最高層級並顯示狀態。
權限對應(node.permissions)
選用。 macOS 節點會透過權限對應表回報location;iOS/Android 可能會省略。
指令:location.get
透過 node.invoke 呼叫。
參數(建議):
LOCATION_DISABLED:選擇器為關閉。LOCATION_PERMISSION_REQUIRED:所請求模式缺少權限。LOCATION_BACKGROUND_UNAVAILABLE:App 在背景中,但僅允許「使用中」。LOCATION_TIMEOUT:在時間內未取得定位。LOCATION_UNAVAILABLE:系統失敗/無提供者。
背景行為(未來)
目標:模型即使在節點位於背景時也能請求位置,但僅在以下條件成立時:- 使用者選擇 永遠。
- OS 授予背景位置。
- App 允許為位置在背景中執行(iOS 背景模式/Android 前景服務或特殊許可)。
- Gateway 閘道器向節點發送推播(靜默推播或 FCM data)。
- 節點短暫喚醒並向裝置請求位置。
- 節點將負載轉送至 Gateway。
- iOS:需要「永遠」權限+背景位置模式。靜默推播可能被節流;預期會有間歇性失敗。 靜默推播可能會被節流;預期會有間歇性失敗。
- Android:背景位置可能需要前景服務;否則預期會被拒絕。
模型/工具整合
- 工具介面:
nodes工具新增location_get動作(需要節點)。 - CLI:
openclaw nodes location get --node <id>。 - 代理程式指引:僅在使用者已啟用位置且理解範圍時呼叫。
UX 文案(建議)
- 關閉:「位置分享已停用。」
- 使用中:「僅在 OpenClaw 開啟時。」
- 永遠:「允許背景位置。需要系統權限。」 需要系統權限。”
- 精確:「使用精確 GPS 位置。關閉以分享近似位置。」 關閉切換即可分享大致位置。” 關閉切換即可分享大致位置。”