App iOS
App de nodo iOS: conectar al Gateway, emparejamiento, Canvas, y solución de problemas.
Disponibilidad: Vista previa interna. La app iOS aún no está distribuida públicamente.
Qué puede hacer
- Conectar al Gateway via WebSocket (misma LAN o tailnet).
- Exponer capacidades de nodo: Canvas, captura de pantalla, captura de cámara, ubicación, modo walkie-talkie, activación por voz.
- Recibir comandos ''node.invoke'' y reportar eventos de estado de nodo.
Prerrequisitos
- El Gateway debe estar ejecutándose en otro dispositivo (macOS, Linux, o Windows via WSL2).
- La ruta de red cumple uno de:
- Misma LAN, descubierta via Bonjour, o
- Via tailnet usando DNS-SD unicast (dominio de ejemplo: ''openclaw.internal.''), ''o''
- Host/puerto manual (fallback)
Inicio rápido (emparejamiento + conexión)
1. Iniciar Gateway:
openclaw gateway --port 18789
2. Abrir Configuración en la app iOS, seleccionar gateway descubierto (o habilitar Host Manual y llenar host/puerto).
3. Aprobar solicitud de emparejamiento en el host del gateway:
openclaw nodes pending openclaw nodes approve '<requestId>'
4. Verificar conexión:
openclaw nodes status
openclaw gateway call node.list --params "{'}"Rutas de descubrimiento
#
Bonjour (LAN)
El Gateway transmite ''_openclaw-gw._tcp'' en ''local.'' La app iOS lista automáticamente estos gateways.
#
Tailnet (cross-network)
Si mDNS está bloqueado, usa zona DNS-SD unicast (elige un dominio, ej. ''openclaw.internal.''), y configura DNS dividido de Tailscale.
Ver ''Bonjour'' para ejemplo de CoreDNS.
#
Host/puerto manual
Habilita ''Host Manual'' en Configuración e ingresa host + puerto del gateway (predeterminado ''18789'').
Canvas + A2UI
El nodo iOS usa WKWebView para renderizar canvas. Puede ser controlado via ''node.invoke'':
openclaw nodes invoke --node "iOS Node" --command canvas.navigate --params {"url":"http://<gateway-host>:18793/__openclaw__/canvas/"}Notas:
- El host de canvas del Gateway sirve ''/__openclaw__/canvas/'' y ''/__openclaw__/a2ui/''.
- El nodo iOS navega automáticamente a A2UI cuando la URL del host de canvas se descubre en la conexión.
- Usa ''canvas.navigate'' con ''{"url":""}'' para volver al scaffold integrado.
#
Canvas eval / snapshot
openclaw nodes invoke --node "iOS Node" --command canvas.eval --params {"javaScript":"(() => { const {ctx} = window.__openclaw; ctx.clearRect(0,0,innerWidth,innerHeight); ctx.lineWidth=6; ctx.strokeStyle=\"#ff2d55\"; ctx.beginPath(); ctx.moveTo(40,40); ctx.lineTo(innerWidth-40, innerHeight-40); ctx.stroke(); return \"ok\"; })()"}openclaw nodes invoke --node "iOS Node" --command canvas.snapshot --params {"maxWidth":900,"format":"jpeg"}Activación por voz y modo walkie-talkie
- La activación por voz y modo de conversación pueden habilitarse en Configuración.
- iOS puede suspender audio en segundo plano; cuando la app no está en primer plano, las características de voz deben considerarse best-effort.
6) Sincronización de Chat e Historial
La página de Chat del nodo Android usa la clave de sesión primaria del gateway (main), así que el historial de chat y respuestas se comparten con clientes como WebChat:
- Historial: chat.history
- Enviar: chat.send
- Actualizaciones push (best effort): chat.subscribe → event:"chat"