Aplicación Android (Nodo)¶
Snapshot de soporte¶
- Rol: aplicación de nodo complementario (Android no aloja el Gateway).
- Gateway requerido: sí (ejecútelo en macOS, Linux o Windows vía WSL2).
- Instalación: Primeros pasos + Emparejamiento.
- Gateway: Runbook + Configuración.
- Protocolos: Protocolo del Gateway (nodos + plano de control).
Control del sistema¶
El control del sistema (launchd/systemd) vive en el host del Gateway. Consulte Gateway.
Runbook de conexión¶
Aplicación de nodo Android ⇄ (mDNS/NSD + WebSocket) ⇄ Gateway
Android se conecta directamente al WebSocket del Gateway (predeterminado ws://<host>:18789) y utiliza el emparejamiento propiedad del Gateway.
Requisitos previos¶
- Puede ejecutar el Gateway en la máquina “maestra”.
- El dispositivo/emulador Android puede alcanzar el WebSocket del Gateway:
- Misma LAN con mDNS/NSD, o
- Mismo tailnet de Tailscale usando Wide-Area Bonjour / DNS-SD unicast (ver abajo), o
- Host/puerto del Gateway manual (alternativa)
- Puede ejecutar la CLI (
openclaw) en la máquina del Gateway (o vía SSH).
1. Iniciar el Gateway¶
openclaw gateway --port 18789 --verbose
Confirme en los registros que ve algo como:
listening on ws://0.0.0.0:18789
Para configuraciones solo de tailnet (recomendado para Viena ⇄ Londres), vincule el Gateway a la IP del tailnet:
- Establezca
gateway.bind: "tailnet"en~/.openclaw/openclaw.jsonen el host del Gateway. - Reinicie el Gateway / la app de barra de menús de macOS.
2. Verificar el descubrimiento (opcional)¶
Desde la máquina del Gateway:
dns-sd -B _openclaw-gw._tcp local.
Más notas de depuración: Bonjour.
Descubrimiento por tailnet (Viena ⇄ Londres) vía DNS-SD unicast¶
El descubrimiento NSD/mDNS de Android no cruza redes. Si su nodo Android y el Gateway están en redes diferentes pero conectados vía Tailscale, use Wide-Area Bonjour / DNS-SD unicast en su lugar:
- Configure una zona DNS-SD (ejemplo
openclaw.internal.) en el host del Gateway y publique registros_openclaw-gw._tcp. - Configure DNS dividido de Tailscale para su dominio elegido apuntando a ese servidor DNS.
Detalles y ejemplo de configuración de CoreDNS: Bonjour.
3. Conectar desde Android¶
En la app de Android:
- La app mantiene viva su conexión al Gateway mediante un servicio en primer plano (notificación persistente).
- Abra Settings.
- En Discovered Gateways, seleccione su Gateway y pulse Connect.
- Si mDNS está bloqueado, use Advanced → Manual Gateway (host + puerto) y Connect (Manual).
Después del primer emparejamiento exitoso, Android se reconecta automáticamente al iniciar:
- Al endpoint manual (si está habilitado); de lo contrario,
- Al último Gateway descubierto (mejor esfuerzo).
4. Aprobar el emparejamiento (CLI)¶
En la máquina del Gateway:
openclaw nodes pending
openclaw nodes approve <requestId>
Detalles del emparejamiento: Emparejamiento del Gateway.
5. Verificar que el nodo esté conectado¶
- Estado de los nodos:
bash
openclaw nodes status
- Vía Gateway:
bash
openclaw gateway call node.list --params "{}"
6. Chat + historial¶
La hoja de Chat del nodo Android usa la clave de sesión primaria del Gateway (main), por lo que el historial y las respuestas se comparten con WebChat y otros clientes:
- Historial:
chat.history - Enviar:
chat.send - Actualizaciones push (mejor esfuerzo):
chat.subscribe→event:"chat"
7. Canvas + cámara¶
Host de Canvas del Gateway (recomendado para contenido web)¶
Si desea que el nodo muestre HTML/CSS/JS reales que el agente pueda editar en disco, apunte el nodo al host de Canvas del Gateway.
Nota: los nodos usan el host de Canvas independiente en canvasHost.port (predeterminado 18793).
-
Cree
~/.openclaw/workspace/canvas/index.htmlen el host del Gateway. -
Navegue el nodo hacia él (LAN):
openclaw nodes invoke --node "<Android Node>" --command canvas.navigate --params '{"url":"http://<gateway-hostname>.local:18793/__openclaw__/canvas/"}'
Tailnet (opcional): si ambos dispositivos están en Tailscale, use un nombre MagicDNS o la IP del tailnet en lugar de .local, por ejemplo http://<gateway-magicdns>:18793/__openclaw__/canvas/.
Este servidor inyecta un cliente de recarga en vivo en HTML y recarga ante cambios de archivos.
El host de A2UI vive en http://<gateway-host>:18793/__openclaw__/a2ui/.
Comandos de Canvas (solo en primer plano):
canvas.eval,canvas.snapshot,canvas.navigate(use{"url":""}o{"url":"/"}para volver al andamiaje predeterminado).canvas.snapshotdevuelve{ format, base64 }(predeterminadoformat="jpeg").- A2UI:
canvas.a2ui.push,canvas.a2ui.reset(canvas.a2ui.pushJSONLalias heredado)
Comandos de cámara (solo en primer plano; con control de permisos):
camera.snap(jpg)camera.clip(mp4)
Consulte Nodo de cámara para parámetros y ayudantes de la CLI.