Перейти к основному содержанию

Приложение Android (узел)

Снимок поддержки

Управление системой

Управление системой (launchd/systemd) находится на хосте шлюза Gateway. См. Gateway.

Ранбук подключения

Приложение узла Android ⇄ (mDNS/NSD + WebSocket) ⇄ Gateway (шлюз) Android подключается напрямую к WebSocket шлюза Gateway (по умолчанию ws://<host>:18789) и использует сопряжение, управляемое Gateway.

Предварительные требования

  • Вы можете запустить Gateway (шлюз) на «главной» машине.
  • Устройство/эмулятор Android может достучаться до WebSocket шлюза Gateway:
    • Та же локальная сеть с mDNS/NSD, или
    • Тот же tailnet Tailscale с Wide-Area Bonjour / unicast DNS-SD (см. ниже), или
    • Ручной ввод хоста/порта шлюза Gateway (резервный вариант)
  • Вы можете запускать CLI (openclaw) на машине шлюза Gateway (или через SSH).

1. Запуск Gateway (шлюза)

openclaw gateway --port 18789 --verbose
Убедитесь в логах, что вы видите что-то вроде:
  • listening on ws://0.0.0.0:18789
Для конфигураций только через tailnet (рекомендуется для Вена ⇄ Лондон) привяжите шлюз к IP tailnet:
  • Установите gateway.bind: "tailnet" в ~/.openclaw/openclaw.json на хосте шлюза Gateway.
  • Перезапустите Gateway / приложение macOS в строке меню.

2. Проверка обнаружения (необязательно)

С машины шлюза Gateway:
dns-sd -B _openclaw-gw._tcp local.
Дополнительные заметки по отладке: Bonjour.

Обнаружение через Tailnet (Вена ⇄ Лондон) с использованием unicast DNS-SD

Обнаружение Android через NSD/mDNS не работает между сетями. Если узел Android и шлюз Gateway находятся в разных сетях, но соединены через Tailscale, используйте Wide-Area Bonjour / unicast DNS-SD:
  1. Настройте зону DNS-SD (пример openclaw.internal.) на хосте шлюза Gateway и опубликуйте записи _openclaw-gw._tcp.
  2. Настройте split DNS в Tailscale для выбранного домена, указывая на этот DNS-сервер.
Подробности и пример конфигурации CoreDNS: Bonjour.

3. Подключение с Android

В приложении Android:
  • Приложение поддерживает соединение со шлюзом Gateway через foreground service (постоянное уведомление).
  • Откройте Settings.
  • В разделе Discovered Gateways выберите ваш шлюз и нажмите Connect.
  • Если mDNS заблокирован, используйте Advanced → Manual Gateway (хост + порт) и Connect (Manual).
После первого успешного сопряжения Android автоматически переподключается при запуске:
  • К ручному endpoint (если включён), иначе
  • К последнему обнаруженному шлюзу (best-effort).

4. Подтвердите сопряжение (CLI)

На машине шлюза Gateway:
openclaw nodes pending
openclaw nodes approve <requestId>
Подробности сопряжения: Сопряжение Gateway.

5. Проверьте, что узел подключён

  • Через статус узлов:
    openclaw nodes status
    
  • Через Gateway:
    openclaw gateway call node.list --params "{}"
    

6. Чат + история

Лист Chat узла Android использует основной ключ сеанса шлюза Gateway (main), поэтому история и ответы общие с WebChat и другими клиентами:
  • История: chat.history
  • Отправка: chat.send
  • Push-обновления (best-effort): chat.subscribeevent:"chat"

7. Canvas + камера

Хост Canvas Gateway (рекомендуется для веб-контента)

Если вы хотите, чтобы узел отображал реальный HTML/CSS/JS, который агент может редактировать на диске, направьте узел на хост Canvas шлюза Gateway. Примечание: узлы используют автономный хост Canvas на canvasHost.port (по умолчанию 18793).
  1. Создайте ~/.openclaw/workspace/canvas/index.html на хосте шлюза Gateway.
  2. Откройте его на узле (LAN):
openclaw nodes invoke --node "<Android Node>" --command canvas.navigate --params '{"url":"http://<gateway-hostname>.local:18793/__openclaw__/canvas/"}'
Tailnet (необязательно): если оба устройства подключены к Tailscale, используйте имя MagicDNS или IP tailnet вместо .local, например http://<gateway-magicdns>:18793/__openclaw__/canvas/. Этот сервер внедряет клиент live-reload в HTML и перезагружает страницу при изменениях файлов. Хост A2UI доступен по адресу http://<gateway-host>:18793/__openclaw__/a2ui/. Команды Canvas (только на переднем плане):
  • canvas.eval, canvas.snapshot, canvas.navigate (используйте {"url":""} или {"url":"/"}, чтобы вернуться к стандартному каркасу). canvas.snapshot возвращает { format, base64 } (по умолчанию format="jpeg").
  • A2UI: canvas.a2ui.push, canvas.a2ui.reset (canvas.a2ui.pushJSONL — устаревший псевдоним)
Команды камеры (только на переднем плане; с проверкой разрешений):
  • camera.snap (jpg)
  • camera.clip (mp4)
См. Узел камеры для параметров и помощников CLI.