Команда Location (узлы)
TL;DR
location.get— это команда узла (черезnode.invoke).- По умолчанию выключено.
- Настройки используют селектор: Выкл. / При использовании / Всегда.
- Отдельный переключатель: Точное местоположение.
Почему селектор (а не просто переключатель)
Разрешения ОС многоуровневые. Мы можем показать селектор в приложении, но фактическое разрешение всё равно определяет ОС.- iOS/macOS: пользователь может выбрать При использовании или Всегда в системных запросах/Настройках. Приложение может запросить повышение уровня, но ОС может потребовать перехода в Настройки.
- Android: фоновое определение местоположения — отдельное разрешение; на Android 10+ часто требуется сценарий через Настройки.
- Точное местоположение — отдельное разрешение (iOS 14+ «Precise», Android «fine» vs «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 / foreground service Android или специальное разрешение).
- Gateway (шлюз) отправляет push на узел (тихий push или данные FCM).
- Узел кратковременно пробуждается и запрашивает местоположение у устройства.
- Узел пересылает полезную нагрузку в Gateway (шлюз).
- iOS: требуется разрешение «Всегда» + фоновый режим для местоположения. Тихие push‑уведомления могут ограничиваться; ожидайте периодических сбоев.
- Android: фоновое определение местоположения может требовать foreground service; в противном случае ожидайте отказа.
Интеграция модели/инструментов
- Поверхность инструментов: инструмент
nodesдобавляет действиеlocation_get(требуется узел). - CLI:
openclaw nodes location get --node <id>. - Рекомендации для агентов: вызывать только когда пользователь включил определение местоположения и понимает объём доступа.
Тексты UX (рекомендуемые)
- Выкл.: «Передача местоположения отключена».
- При использовании: «Только когда OpenClaw открыт».
- Всегда: «Разрешить фоновое определение местоположения. Требуется системное разрешение».
- Точное: «Использовать точное GPS‑местоположение. Отключите, чтобы передавать приблизительное местоположение».