Retour

04. Concepts fondamentaux du Gateway OpenClaw

Comprenez en profondeur l'architecture fondamentale du Gateway OpenClaw. Cet article analyse en détail le modèle de Session, le Message Router, le Tool Registry, le système de Skills, le protocole WebSocket et d'autres concepts clés, pour aider les développeurs à maîtriser la configuration avancée et le dépannage.

Compatible avec OpenClaw v2026.2 | Cet article s’adresse aux utilisateurs ayant terminé la configuration de base et souhaitant comprendre l’architecture en profondeur. Il est recommandé d’avoir suivi les 3 premiers tutoriels.

TL;DR : Le Gateway est le plan de contrôle central d’OpenClaw. La Session est le conteneur de contexte de conversation (main/channel/group), le Message Router détermine le routage des messages, le Tool Registry gère les permissions des outils, et les Skills sont des extensions de capacités pré-packagées. Point d’accès WebSocket : ws://127.0.0.1:18789/ws, commandes courantes : openclaw gateway/doctor/config. Comprendre ces concepts est la base de la configuration avancée.

Vue d’ensemble de l’architecture

Architecture globale

flowchart TB
    subgraph Clients["Couche client"]
        WA[WhatsApp]
        TG[Telegram]
        DC[Discord]
        SL[Slack]
        WC[WebChat]
        CLI[CLI]
        MAC[macOS App]
        IOS[iOS Node]
        AND[Android Node]
    end
    
    subgraph Gateway["Couche Gateway"]
        WS[WebSocket Server]
        HTTP[HTTP Server]
        MR[Message Router]
        SM[Session Manager]
        TR[Tool Registry]
        EM[Event Manager]
        CFG[Config Store]
    end
    
    subgraph Agent["Couche Agent"]
        PI[Pi Agent]
        PROMPT[Prompt Engine]
        TOOLS[Tool Executor]
        SKILLS[Skills Manager]
    end
    
    subgraph External["Services externes"]
        FS[Système de fichiers]
        BR[Navigateur]
        API[Services API]
        DB[Base de données]
        CAL[Planificateur Cron]
    end
    
    Clients --> WS
    Clients --> HTTP
    WS --> MR
    HTTP --> MR
    MR --> SM
    SM --> PI
    PI --> PROMPT
    PI --> TOOLS
    PI --> SKILLS
    TOOLS --> TR
    TR --> External
    EM --> MR
    CFG --> SM
    CFG --> TR

Responsabilités des composants

Composant Responsabilité Capacité clé
WebSocket Server Gestion des connexions client Maintien des connexions, heartbeat, envoi/réception de messages
HTTP Server API REST et ressources statiques Web UI, vérification de santé, interface de configuration
Message Router Routage et distribution des messages Identification des canaux, mapping des sessions, transfert de messages
Session Manager Gestion du cycle de vie des sessions Création, restauration, compression, nettoyage
Tool Registry Enregistrement et invocation des outils Découverte d’outils, contrôle des permissions, sandbox d’exécution
Event Manager Distribution et abonnement aux événements Webhooks, Cron, événements internes
Config Store Persistance de la configuration Mise à jour à chaud, gestion des versions, sauvegarde/restauration

Flux de données

sequenceDiagram
    participant U as Utilisateur
    participant C as Canal
    participant WS as WebSocket
    participant MR as Router
    participant SM as Session
    participant A as Agent
    participant T as Outils
    
    U->>C: Envoie un message
    C->>WS: Transmet le message
    WS->>MR: Requête de routage
    MR->>SM: Recherche/création de session
    SM-->>MR: Retourne la session
    MR->>A: Délivre le message
    A->>A: Traite le message
    A->>T: Appel d'outil (optionnel)
    T-->>A: Retourne le résultat
    A-->>MR: Génère la réponse
    MR->>WS: Envoie la réponse
    WS->>C: Transmet la réponse
    C-->>U: Affiche le message

Modèle de Session

Qu’est-ce qu’une Session ?

La Session est l’un des concepts les plus fondamentaux d’OpenClaw. Chaque Session représente un contexte de conversation indépendant, comprenant :

Composant Description
Historique des messages L’enregistrement complet de la conversation
État du contexte Tâche en cours, variables temporaires
Configuration Modèle, niveau de réflexion, paramètres du sandbox
Métadonnées Date de création, statistiques de Tokens, canal associé

Types de Session

{
  "sessions": {
    "main": {
      "type": "main",
      "model": "anthropic/claude-opus-4-6",
      "thinkingLevel": "high",
      "channel": null,
      "created": "2026-02-26T10:00:00Z"
    },
    "telegram:user:123456789": {
      "type": "channel",
      "model": "anthropic/claude-opus-4-6",
      "thinkingLevel": "normal",
      "channel": "telegram",
      "sender": "123456789",
      "created": "2026-02-26T10:05:00Z"
    },
    "telegram:group:-100123456789": {
      "type": "group",
      "model": "anthropic/claude-sonnet-4",
      "thinkingLevel": "minimal",
      "channel": "telegram",
      "groupId": "-100123456789",
      "created": "2026-02-26T10:10:00Z"
    }
  }
}
Type Format de l’ID de Session Description
main main Session principale par défaut, utilisée par le CLI et WebChat
channel {channel}:user:{senderId} Session de conversation privée, isolée par canal et utilisateur
group {channel}:group:{groupId} Session de groupe, isolée par groupe

Cycle de vie d’une Session

stateDiagram-v2
    [*] --> Created: Message reçu
    Created --> Active: Première réponse
    Active --> Active: Échange de messages
    Active --> Idle: Inactivité
    Idle --> Active: Nouveau message
    Idle --> Compacted: Compression automatique
    Compacted --> Active: Reprise de conversation
    Active --> Reset: Commande /reset
    Reset --> Created: Redémarrage
    Active --> Pruned: Nettoyage de session
    Idle --> Pruned: Nettoyage par timeout
    Pruned --> [*]

Commandes de Session

Envoyez les commandes suivantes dans le chat pour gérer les sessions :

Commande Fonction Exemple
/status Voir l’état de la session Affiche le modèle, les Tokens, le coût
/new ou /reset Réinitialiser la session Efface l’historique, démarre une nouvelle conversation
/compact Compresser le contexte Résume l’historique, libère des Tokens
/think <level> Définir le niveau de réflexion /think high
/verbose on/off Activer/désactiver le mode détaillé Affiche/masque les appels d’outils
/usage off/tokens/full Affichage de l’utilisation /usage full

Configuration des Sessions

{
  "sessionPruning": {
    "enabled": true,
    "maxAge": 86400000,
    "maxSize": 100,
    "pruneOnStartup": true
  },
  "sessionCompression": {
    "enabled": true,
    "threshold": 50000,
    "targetRatio": 0.3
  }
}
Paramètre Description Valeur par défaut
maxAge Durée de vie maximale de la session (millisecondes) 24 heures
maxSize Nombre maximum de messages 100
threshold Seuil de compression (Tokens) 50 000
targetRatio Ratio cible de compression 30 %

Message Router — Routage des messages

Règles de routage

Le Message Router est chargé de router les messages reçus vers la bonne Session :

flowchart TB
    MSG[Message reçu] --> CH{Type de canal ?}
    CH -->|Message privé| DM[Extraire l'ID expéditeur]
    CH -->|Groupe| GRP[Extraire l'ID du groupe]
    CH -->|WebChat/CLI| MAIN[Utiliser la session main]
    
    DM --> SID[Session : channel:user:id]
    GRP --> GID[Session : channel:group:id]
    
    SID --> EXISTS{Session existante ?}
    GID --> EXISTS
    
    EXISTS -->|Oui| LOAD[Charger la session]
    EXISTS -->|Non| CREATE[Créer une nouvelle session]
    
    CREATE --> LOAD
    LOAD --> AGENT[Délivrer à l'Agent]

Configuration du routage

{
  "messageRouting": {
    "defaultSession": "main",
    "channelMapping": {
      "telegram": {
        "userPrefix": "telegram:user",
        "groupPrefix": "telegram:group"
      },
      "whatsapp": {
        "userPrefix": "whatsapp:user",
        "groupPrefix": "whatsapp:group"
      }
    },
    "groupActivation": {
      "mode": "mention",
      "mentionPatterns": ["@bot", "/bot"]
    }
  }
}

Stratégies d’activation des groupes

Mode Description Cas d’utilisation
mention Répond uniquement aux @mentions Groupes actifs, pour réduire les perturbations
always Répond à tous les messages Groupes de travail dédiés
keyword Répond lorsqu’un mot-clé est détecté Groupes thématiques
{
  "channels": {
    "telegram": {
      "groups": {
        "*": {
          "requireMention": true
        },
        "-100WORKGROUP": {
          "requireMention": false,
          "activationMode": "always"
        }
      }
    }
  }
}

Tool Registry — Registre des outils

Outils intégrés

OpenClaw inclut un ensemble riche d’outils intégrés :

Catégorie Nom de l’outil Fonction
Fichiers read Lire un fichier
write Écrire un fichier
edit Modifier un fichier
Commandes bash Exécuter une commande Shell
process Gérer les processus
Navigateur browser Contrôler le navigateur
Recherche web_search Recherche web
Nœuds camera Opérations caméra
screen_record Enregistrement d’écran
notify Envoyer des notifications
Sessions sessions_list Lister les sessions
sessions_history Historique des sessions
sessions_send Messages inter-sessions
Canvas canvas Opérations sur le canvas

Contrôle des permissions des outils

{
  "agents": {
    "defaults": {
      "sandbox": {
        "mode": "off",
        "allowlist": ["read", "write", "bash", "web_search"],
        "denylist": []
      }
    }
  }
}
Mode sandbox Description
off Tous les outils disponibles (session main uniquement)
non-main Sandbox activé pour les sessions non-main
always Sandbox activé pour toutes les sessions

Configuration détaillée du sandbox

{
  "agents": {
    "defaults": {
      "sandbox": {
        "mode": "non-main",
        "allowlist": [
          "read",
          "write",
          "edit",
          "bash",
          "web_search",
          "sessions_list",
          "sessions_history"
        ],
        "denylist": [
          "browser",
          "canvas",
          "camera",
          "screen_record"
        ]
      }
    }
  }
}

Système de Skills

Architecture des Skills

flowchart LR
    subgraph Skills["Répertoire Skills"]
        S1[gmail/SKILL.md]
        S2[calendar/SKILL.md]
        S3[home-assistant/SKILL.md]
    end
    
    subgraph Manager["Skills Manager"]
        DISC[Découverte]
        LOAD[Chargement]
        EXEC[Exécution]
    end
    
    subgraph Agent["Agent"]
        PROMPT[Injection Prompt]
        TOOLS[Enregistrement Tools]
        RES[Retour résultat]
    end
    
    Skills --> DISC
    DISC --> LOAD
    LOAD --> PROMPT
    LOAD --> TOOLS
    PROMPT --> Agent
    TOOLS --> Agent
    Agent --> EXEC
    EXEC --> RES

Structure du répertoire Skills

~/.openclaw/workspace/skills/
├── gmail/
│   ├── SKILL.md          # Définition du skill
│   ├── package.json      # Dépendances (optionnel)
│   └── src/
│       └── index.js      # Implémentation (optionnel)
├── calendar/
│   └── SKILL.md
└── my-custom-skill/
    └── SKILL.md

Structure d’un SKILL.md

# Gmail Skill

## Description
Send and read Gmail messages through OpenClaw.

## Triggers
- email
- gmail
- mail
- send email
- read email

## Instructions
When the user wants to send an email:
1. Ask for recipient, subject, and body
2. Use the gmail_send tool
3. Confirm the email was sent

When the user wants to check emails:
1. Use the gmail_list tool
2. Summarize the results

## Tools
- gmail_list: List recent emails
- gmail_send: Send an email
- gmail_read: Read a specific email

## Examples
User: "Check my email"
Action: Use gmail_list tool

User: "Send an email to [email protected]"
Action: Ask for subject and body, then use gmail_send

Méthodes d’installation des Skills

# Installer depuis ClawHub
openclaw skill install gmail

# Installer depuis GitHub
openclaw skill install github:user/repo/skill-name

# Installation manuelle
git clone https://github.com/user/skill-repo.git ~/.openclaw/workspace/skills/skill-name

Configuration des Skills

{
  "skills": {
    "bundled": true,
    "managed": true,
    "workspace": true,
    "installGating": true
  }
}
Paramètre Description
bundled Activer les skills intégrés
managed Activer les skills hébergés sur ClawHub
workspace Activer les skills du workspace local
installGating Confirmation requise avant installation

Protocole WebSocket

Point d’accès

ws://127.0.0.1:18789/ws

Format des messages

{
  "type": "message_type",
  "id": "unique_message_id",
  "data": {
    // Contenu du message
  }
}

Types de messages client

Type Description Exemple
agent.send Envoyer un message Dialoguer avec l’Agent
session.list Lister les sessions Gestion des sessions
session.get Obtenir les détails d’une session Consulter une session
session.patch Modifier la configuration d’une session Changer de modèle
config.get Obtenir la configuration Lire les paramètres
config.set Définir la configuration Mettre à jour les paramètres

Types de messages serveur

Type Description
agent.response Réponse de l’Agent
agent.thinking Processus de réflexion (streaming)
tool.invoked Appel d’outil
tool.result Résultat de l’outil
session.created Session créée
session.reset Session réinitialisée
error Message d’erreur

Exemple : envoyer un message

// Connexion WebSocket
const ws = new WebSocket('ws://127.0.0.1:18789/ws');

// Envoyer un message
ws.send(JSON.stringify({
  type: 'agent.send',
  id: 'msg-001',
  data: {
    session: 'main',
    message: 'Bonjour, peux-tu te présenter ?'
  }
}));

// Recevoir la réponse
ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);
  console.log(msg);
  
  // Exemple de sortie :
  // {
  //   type: 'agent.response',
  //   id: 'msg-001',
  //   data: {
  //     content: 'Bonjour ! Je suis votre assistant OpenClaw...',
  //     session: 'main'
  //   }
  // }
};

Système d’événements

Événements intégrés

Événement Déclencheur
message.received Réception d’un message utilisateur
message.sent Envoi d’une réponse
session.created Création d’une nouvelle session
session.reset Réinitialisation d’une session
tool.invoked Appel d’un outil
tool.completed Exécution d’un outil terminée
agent.thinking Agent en réflexion
error.occurred Erreur survenue

Configuration des Webhooks

{
  "webhooks": [
    {
      "url": "https://your-server.com/webhook/openclaw",
      "events": ["message.received", "tool.invoked"],
      "secret": "your_webhook_secret",
      "headers": {
        "X-Custom-Header": "value"
      }
    }
  ]
}

Charge utile des Webhooks

{
  "event": "message.received",
  "timestamp": "2026-02-26T10:30:00Z",
  "data": {
    "channel": "telegram",
    "sender": "123456789",
    "session": "telegram:user:123456789",
    "message": "Bonjour",
    "metadata": {
      "messageId": "msg_abc123",
      "timestamp": "2026-02-26T10:30:00Z"
    }
  },
  "signature": "sha256=..."
}

Tâches planifiées Cron

Exemple de configuration

{
  "cron": [
    {
      "id": "daily-briefing",
      "schedule": "0 9 * * *",
      "session": "main",
      "message": "Donne-moi mon planning du jour",
      "enabled": true
    },
    {
      "id": "weekly-summary",
      "schedule": "0 18 * * 5",
      "session": "main",
      "message": "Génère un résumé de travail de la semaine",
      "enabled": true
    }
  ]
}

Expression Cron

┌───────────── minute (0 - 59)
│ ┌───────────── heure (0 - 23)
│ │ ┌───────────── jour du mois (1 - 31)
│ │ │ ┌───────────── mois (1 - 12)
│ │ │ │ ┌───────────── jour de la semaine (0 - 6, 0 = dimanche)
│ │ │ │ │
* * * * *

Exemples courants

Expression Description
0 9 * * * Tous les jours à 9h00
0 18 * * 1-5 Jours ouvrables à 18h00
*/30 * * * * Toutes les 30 minutes
0 0 1 * * Le 1er de chaque mois à 0h00

Hiérarchie et priorité de la configuration

Ordre de priorité

Paramètres CLI > Variables d'environnement > Fichier de configuration > Valeurs par défaut

Sources de configuration

Source Emplacement Priorité
Paramètres CLI Arguments en ligne de commande La plus haute
Variables d’environnement OPENCLAW_* Haute
Fichier de configuration ~/.openclaw/openclaw.json Moyenne
Valeurs par défaut Intégrées au code La plus basse

Exemple de fusion de configuration

// ~/.openclaw/openclaw.json
{
  "agent": {
    "model": "anthropic/claude-opus-4-6"
  }
}
# Surcharge par variable d'environnement
export OPENCLAW_AGENT_MODEL="anthropic/claude-sonnet-4"

# Surcharge par paramètre CLI (priorité maximale)
openclaw gateway --model "anthropic/claude-opus-4"

Mise à jour à chaud de la configuration

# Mettre à jour la configuration (sans redémarrage)
openclaw config set agent.model "anthropic/claude-sonnet-4"

# Recharger le fichier de configuration
openclaw config reload

# Vérifier la configuration
openclaw config get agent.model

Aide-mémoire des commandes

Gestion du Gateway

# Démarrer le Gateway
openclaw gateway

# Spécifier un port
openclaw gateway --port 18790

# Exécution en arrière-plan
openclaw gateway --daemon

# Logs détaillés
openclaw gateway --verbose

# Vérification de santé
openclaw health

Gestion des sessions

# Lister toutes les sessions
openclaw session list

# Voir les détails d'une session
openclaw session show main
openclaw session show telegram:user:123456789

# Réinitialiser une session
openclaw session reset main

# Supprimer une session
openclaw session delete telegram:user:123456789

Gestion de la configuration

# Voir la configuration
openclaw config get agent.model
openclaw config get channels.telegram.botToken

# Définir la configuration
openclaw config set agent.thinkingLevel high

# Lister toutes les configurations
openclaw config list

# Valider la configuration
openclaw config validate

Outils de diagnostic

# Diagnostic complet
openclaw doctor

# Vérifier un élément spécifique
openclaw doctor --check gateway
openclaw doctor --check config
openclaw doctor --check channels

# Consulter les logs
openclaw logs
openclaw logs --follow
openclaw logs --level error

Dépannage

Le Gateway ne démarre pas

# Vérifier l'occupation du port
lsof -i :18789
netstat -tlnp | grep 18789

# Vérifier la syntaxe de la configuration
openclaw config validate

# Voir les erreurs détaillées
openclaw gateway --verbose 2>&1 | tee gateway.log

Perte de session

# Vérifier le répertoire des sessions
ls -la ~/.openclaw/sessions/

# Vérifier la configuration de nettoyage
openclaw config get sessionPruning

# Désactiver le nettoyage automatique
openclaw config set sessionPruning.enabled false

Échec d’appel d’outil

# Vérifier la configuration du sandbox
openclaw config get agents.defaults.sandbox

# Désactiver temporairement le sandbox
openclaw config set agents.defaults.sandbox.mode off

# Consulter les logs des outils
openclaw logs --filter tool

Échec de connexion WebSocket

# Vérifier l'état du Gateway
curl http://127.0.0.1:18789/health

# Vérifier le point d'accès WebSocket
wscat -c ws://127.0.0.1:18789/ws

# Vérifier le pare-feu
sudo ufw status
sudo iptables -L -n | grep 18789

Résumé

Comprendre les concepts fondamentaux du Gateway est la clé pour maîtriser OpenClaw :

  • Session : conteneur de contexte de conversation, avec isolation par type
  • Message Router : cœur du routage des messages, détermine leur destination
  • Tool Registry : centre d’enregistrement des outils, contrôle les capacités de l’Agent
  • Skills : système d’extension des compétences, pour enrichir rapidement les fonctionnalités
  • WebSocket : protocole de communication en temps réel, supporte les clients personnalisés
  • Système d’événements : mécanisme de distribution d’événements, supporte Webhooks et Cron

Ces concepts reviendront régulièrement dans les articles suivants. Les comprendre en profondeur vous aidera à mieux configurer et utiliser OpenClaw.


Résumé de cet article :

  • Maîtrise de l’architecture globale du Gateway et des responsabilités des composants
  • Compréhension du modèle de Session et de son cycle de vie
  • Apprentissage du routage des messages et des stratégies d’activation des groupes
  • Connaissance des permissions des outils et de la configuration du sandbox
  • Maîtrise du protocole WebSocket et du système d’événements

Historique des mises à jour :

  • 26/02/2026 : publication initiale, basée sur OpenClaw v2026.2

Navigation de la série :