Fondamentaux
Architecture de la Passerelle
Dernière mise à jour : 2026-01-22
Vue d'ensemble
- Une seule Passerelle de longue durée possède toutes les surfaces de messagerie (WhatsApp via Baileys, Telegram via grammY, Slack, Discord, Signal, iMessage, WebChat).
- Les clients du plan de contrôle (application macOS, CLI, interface web, automatisations) se connectent à la Passerelle via WebSocket sur l'hôte de liaison configuré (par défaut
127.0.0.1:18789). - Les Nœuds (macOS/iOS/Android/sans tête) se connectent également via WebSocket, mais déclarent
role: nodeavec des capacités/commandes explicites. - Une Passerelle par hôte ; c'est le seul endroit qui ouvre une session WhatsApp.
- L'hôte du canevas est servi par le serveur HTTP de la Passerelle sous :
/__openclaw__/canvas/(HTML/CSS/JS modifiable par l'agent)/__openclaw__/a2ui/(hôte A2UI) Il utilise le même port que la Passerelle (par défaut18789).
Composants et flux
Passerelle (démon)
- Maintient les connexions aux fournisseurs.
- Expose une API WS typée (requêtes, réponses, événements poussés par le serveur).
- Valide les trames entrantes par rapport au schéma JSON.
- Émet des événements comme
agent,chat,presence,health,heartbeat,cron.
Clients (application macOS / CLI / administration web)
- Une connexion WS par client.
- Envoient des requêtes (
health,status,send,agent,system-presence). - Souscrivent aux événements (
tick,agent,presence,shutdown).
Nœuds (macOS / iOS / Android / sans tête)
- Se connectent au même serveur WS avec
role: node. - Fournissent une identité d'appareil dans
connect; l'appairage est basé sur l'appareil (rôlenode) et l'approbation réside dans le magasin d'appairage de l'appareil. - Exposent des commandes comme
canvas.*,camera.*,screen.record,location.get.
Détails du protocole :
WebChat
- Interface utilisateur statique qui utilise l'API WS de la Passerelle pour l'historique des discussions et l'envoi de messages.
- Dans les configurations distantes, se connecte via le même tunnel SSH/Tailscale que les autres clients.
Cycle de vie de la connexion (client unique)
Protocole filaire (résumé)
- Transport : WebSocket, trames texte avec des charges utiles JSON.
- La première trame doit être
connect. - Après la poignée de main :
- Requêtes :
{type:"req", id, method, params}→{type:"res", id, ok, payload|error} - Événements :
{type:"event", event, payload, seq?, stateVersion?}
- Requêtes :
- Si
OPENCLAW_GATEWAY_TOKEN(ou--token) est défini,connect.params.auth.tokendoit correspondre ou la socket se ferme. - Les clés d'idempotence sont requises pour les méthodes à effet de bord (
send,agent) afin de permettre des nouvelles tentatives sûres ; le serveur conserve un cache de déduplication de courte durée. - Les nœuds doivent inclure
role: "node"ainsi que des capacités/commandes/autorisations dansconnect.
Appairage + confiance locale
- Tous les clients WS (opérateurs + nœuds) incluent une identité d'appareil dans
connect. - Les nouveaux identifiants d'appareil nécessitent une approbation d'appairage ; la Passerelle émet un jeton d'appareil pour les connexions ultérieures.
- Les connexions locales (boucle locale ou l'adresse tailnet propre à l'hôte de la passerelle) peuvent être approuvées automatiquement pour maintenir une expérience utilisateur fluide sur le même hôte.
- Toutes les connexions doivent signer le nonce
connect.challenge. - La charge utile de signature
v3lie égalementplatform+deviceFamily; la passerelle épingle les métadonnées appairées lors de la reconnexion et exige une réparation de l'appairage pour les changements de métadonnées. - Les connexions non locales nécessitent toujours une approbation explicite.
- L'authentification de la passerelle (
gateway.auth.*) s'applique toujours à toutes les connexions, locales ou distantes.
Détails : Protocole de la passerelle, Appairage, Sécurité.
Typage du protocole et génération de code
- Les schémas TypeBox définissent le protocole.
- Le schéma JSON est généré à partir de ces schémas.
- Les modèles Swift sont générés à partir du schéma JSON.
Accès distant
-
Préféré : Tailscale ou VPN.
-
Alternative : Tunnel SSH
Copier
ssh -N -L 18789:127.0.0.1:18789 user@host -
La même poignée de main + jeton d'authentification s'appliquent via le tunnel.
-
TLS + épinglage optionnel peuvent être activés pour WS dans les configurations distantes.
Instantané des opérations
- Démarrer :
openclaw gateway(premier plan, journaux vers stdout). - Santé :
healthvia WS (également inclus danshello-ok). - Supervision : launchd/systemd pour le redémarrage automatique.
Invariants
- Exactement une Passerelle contrôle une seule session Baileys par hôte.
- La poignée de main est obligatoire ; toute première trame non-JSON ou non-connect entraîne une fermeture immédiate.
- Les événements ne sont pas rejoués ; les clients doivent actualiser en cas d'interruption.