Interfaces Web

Web

La Passerelle sert une petite UI de contrôle navigateur (Vite + Lit) depuis le même port que le WebSocket de la Passerelle :

  • par défaut : http://<hôte>:18789/
  • préfixe optionnel : définir gateway.controlUi.basePath (ex. /openclaw)

Les fonctionnalités sont détaillées dans l'UI de contrôle. Cette page se concentre sur les modes de liaison, la sécurité et les surfaces exposées au web.

Webhooks

Lorsque hooks.enabled=true, la Passerelle expose également un petit point de terminaison webhook sur le même serveur HTTP. Voir Configuration de la Passerellehooks pour l'authentification et les charges utiles.

Configuration (activé par défaut)

L'UI de contrôle est activée par défaut lorsque les ressources sont présentes (dist/control-ui). Vous pouvez la contrôler via la configuration :

{
  gateway: {
    controlUi: { enabled: true, basePath: "/openclaw" }, // basePath optionnel
  },
}

Accès Tailscale

Serve intégré (recommandé)

Gardez la Passerelle en loopback et laissez Tailscale Serve la proxifier :

{
  gateway: {
    bind: "loopback",
    tailscale: { mode: "serve" },
  },
}

Puis démarrez la passerelle :

openclaw gateway

Ouvrez :

  • https://<magicdns>/ (ou votre gateway.controlUi.basePath configuré)

Liaison Tailnet + jeton

{
  gateway: {
    bind: "tailnet",
    controlUi: { enabled: true },
    auth: { mode: "token", token: "your-token" },
  },
}

Puis démarrez la passerelle (jeton requis pour les liaisons non-loopback) :

openclaw gateway

Ouvrez :

  • http://<tailscale-ip>:18789/ (ou votre gateway.controlUi.basePath configuré)

Internet public (Funnel)

{
  gateway: {
    bind: "loopback",
    tailscale: { mode: "funnel" },
    auth: { mode: "password" }, // ou OPENCLAW_GATEWAY_PASSWORD
  },
}

Notes de sécurité

  • L'authentification de la passerelle est requise par défaut (jeton/mot de passe ou en-têtes d'identité Tailscale).
  • Les liaisons non-loopback nécessitent toujours un jeton/mot de passe partagé (gateway.auth ou variable d'environnement).
  • L'assistant génère un jeton de passerelle par défaut (même en loopback).
  • L'UI envoie connect.params.auth.token ou connect.params.auth.password.
  • Pour les déploiements d'UI de contrôle non-loopback, définissez explicitement gateway.controlUi.allowedOrigins (origines complètes). Sans cela, le démarrage de la passerelle est refusé par défaut.
  • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true active le mode de secours basé sur l'en-tête Host, mais constitue une dégradation de sécurité dangereuse.
  • Avec Serve, les en-têtes d'identité Tailscale peuvent satisfaire l'authentification de l'UI de contrôle/WebSocket lorsque gateway.auth.allowTailscale est true (aucun jeton/mot de passe requis). Les points de terminaison de l'API HTTP nécessitent toujours un jeton/mot de passe. Définissez gateway.auth.allowTailscale: false pour exiger des identifiants explicites. Voir Tailscale et Sécurité. Ce flux sans jeton suppose que l'hôte de la passerelle est de confiance.
  • gateway.tailscale.mode: "funnel" nécessite gateway.auth.mode: "password" (mot de passe partagé).

Construction de l'UI

La Passerelle sert les fichiers statiques depuis dist/control-ui. Construisez-les avec :

pnpm ui:build # installe automatiquement les dépendances de l'UI au premier lancement

MODÈLE DE MENACE CONTRIBUTIONUI de contrôle