Traductions communautaires par veiseule.ai — Help improve them on Crowdin
Aller au contenu principal

Webhooks¶

La Gateway (passerelle) peut exposer un petit point de terminaison HTTP de webhook pour des déclencheurs externes.

Activation¶

{
  hooks: {
    enabled: true,
    token: "shared-secret",
    path: "/hooks",
  },
}

Remarques :

  • hooks.token est requis lorsque hooks.enabled=true.
  • hooks.path est dĂ©fini par dĂ©faut sur /hooks.

Authentification¶

Chaque requĂȘte doit inclure le jeton du hook. PrĂ©fĂ©rez les en-tĂȘtes :

  • Authorization: Bearer <token> (recommandĂ©)
  • x-openclaw-token: <token>
  • Query-string tokens are rejected (?token=... returns 400).

Points de terminaison¶

POST /hooks/wake¶

Charge utile :

{ "text": "System line", "mode": "now" }
  • text obligatoire (string) : La description de l’évĂ©nement (p. ex., « New email received »).
  • mode optionnel (now | next-heartbeat) : Indique s’il faut dĂ©clencher un heartbeat immĂ©diat (par dĂ©faut now) ou attendre la prochaine vĂ©rification pĂ©riodique.

Effet :

  • Met en file d’attente un Ă©vĂ©nement systĂšme pour la session principale
  • Si mode=now, dĂ©clenche un heartbeat immĂ©diat

POST /hooks/agent¶

Charge utile :

{
  "message": "Run this",
  "name": "Email",
  "sessionKey": "hook:email:msg-123",
  "wakeMode": "now",
  "deliver": true,
  "channel": "last",
  "to": "+15551234567",
  "model": "openai/gpt-5.2-mini",
  "thinking": "low",
  "timeoutSeconds": 120
}
  • message obligatoire (string) : L’invite ou le message que l’agent doit traiter.
  • name optionnel (string) : Nom lisible par un humain pour le hook (p. ex., « GitHub »), utilisĂ© comme prĂ©fixe dans les rĂ©sumĂ©s de session.
  • agentId optional (string): Route this hook to a specific agent. Unknown IDs fall back to the default agent. When set, the hook runs using the resolved agent's workspace and configuration.
  • sessionKey optionnel (string) : La clĂ© utilisĂ©e pour identifier la session de l’agent. By default this field is rejected unless hooks.allowRequestSessionKey=true.
  • wakeMode optionnel (now | next-heartbeat) : Indique s’il faut dĂ©clencher un heartbeat immĂ©diat (par dĂ©faut now) ou attendre la prochaine vĂ©rification pĂ©riodique.
  • deliver optionnel (boolean) : Si true, la rĂ©ponse de l’agent sera envoyĂ©e vers le canal de messagerie. Par dĂ©faut true. Les rĂ©ponses qui ne sont que des accusĂ©s de rĂ©ception de heartbeat sont automatiquement ignorĂ©es.
  • channel optionnel (string) : Le canal de messagerie pour la livraison. L’un de : last, whatsapp, telegram, discord, slack, mattermost (plugin), signal, imessage, msteams. Par dĂ©faut last.
  • to optionnel (string) : L’identifiant du destinataire pour le canal (p. ex., numĂ©ro de tĂ©lĂ©phone pour WhatsApp/Signal, identifiant de chat pour Telegram, identifiant de canal pour Discord/Slack/Mattermost (plugin), identifiant de conversation pour MS Teams). Par dĂ©faut, le dernier destinataire de la session principale.
  • model optionnel (string) : Remplacement du modĂšle (p. ex., anthropic/claude-3-5-sonnet ou un alias). Doit figurer dans la liste des modĂšles autorisĂ©s si elle est restreinte.
  • thinking optionnel (string) : Remplacement du niveau de rĂ©flexion (p. ex., low, medium, high).
  • timeoutSeconds optionnel (number) : DurĂ©e maximale de l’exĂ©cution de l’agent en secondes.

Effet :

  • ExĂ©cute un tour d’agent isolĂ© (clĂ© de session propre)
  • Publie toujours un rĂ©sumĂ© dans la session principale
  • Si wakeMode=now, dĂ©clenche un heartbeat immĂ©diat

Session key policy (breaking change)¶

/hooks/agent payload sessionKey overrides are disabled by default.

  • Recommended: set a fixed hooks.defaultSessionKey and keep request overrides off.
  • Optional: allow request overrides only when needed, and restrict prefixes.

Recommended config:

{
  hooks: {
    enabled: true,
    token: "${OPENCLAW_HOOKS_TOKEN}",
    defaultSessionKey: "hook:ingress",
    allowRequestSessionKey: false,
    allowedSessionKeyPrefixes: ["hook:"],
  },
}

Compatibility config (legacy behavior):

{
  hooks: {
    enabled: true,
    token: "${OPENCLAW_HOOKS_TOKEN}",
    allowRequestSessionKey: true,
    allowedSessionKeyPrefixes: ["hook:"], // strongly recommended
  },
}

POST /hooks/<name> (mappé)¶

Les noms de hooks personnalisés sont résolus via hooks.mappings (voir la configuration). Un mappage peut transformer des charges utiles arbitraires en actions wake ou agent, avec des modÚles optionnels ou des transformations de code.

Options de mappage (résumé) :

  • hooks.presets: ["gmail"] active le mappage Gmail intĂ©grĂ©.
  • hooks.mappings vous permet de dĂ©finir match, action et des modĂšles dans la configuration.
  • hooks.transformsDir + transform.module charge un module JS/TS pour une logique personnalisĂ©e.
  • hooks.transformsDir (if set) must stay within the transforms root under your OpenClaw config directory (typically ~/.openclaw/hooks/transforms).
  • transform.module must resolve within the effective transforms directory (traversal/escape paths are rejected).
  • Utilisez match.source pour conserver un point d’ingestion gĂ©nĂ©rique (routage pilotĂ© par la charge utile).
  • Les transformations TS nĂ©cessitent un chargeur TS (p. ex., bun ou tsx) ou des .js prĂ©compilĂ©s Ă  l’exĂ©cution.
  • DĂ©finissez deliver: true + channel/to sur les mappages pour acheminer les rĂ©ponses vers une surface de discussion (channel est dĂ©fini par dĂ©faut sur last et retombe sur WhatsApp).
  • agentId routes the hook to a specific agent; unknown IDs fall back to the default agent.
  • hooks.allowedAgentIds restricts explicit agentId routing. Omit it (or include *) to allow any agent. Set [] to deny explicit agentId routing.
  • hooks.defaultSessionKey sets the default session for hook agent runs when no explicit key is provided.
  • hooks.allowRequestSessionKey controls whether /hooks/agent payloads may set sessionKey (default: false).
  • hooks.allowedSessionKeyPrefixes optionally restricts explicit sessionKey values from request payloads and mappings.
  • allowUnsafeExternalContent: true dĂ©sactive l’enveloppe de sĂ©curitĂ© du contenu externe pour ce hook (dangereux ; uniquement pour des sources internes de confiance).
  • openclaw webhooks gmail setup Ă©crit la configuration hooks.gmail pour openclaw webhooks gmail run. Voir Gmail Pub/Sub pour le flux complet de surveillance Gmail.

Réponses¶

  • 200 pour /hooks/wake
  • 202 pour /hooks/agent (exĂ©cution asynchrone dĂ©marrĂ©e)
  • 401 en cas d’échec d’authentification
  • 429 after repeated auth failures from the same client (check Retry-After)
  • 400 en cas de charge utile invalide
  • 413 pour les charges utiles trop volumineuses

Exemples¶

curl -X POST http://127.0.0.1:18789/hooks/wake \
  -H 'Authorization: Bearer SECRET' \
  -H 'Content-Type: application/json' \
  -d '{"text":"New email received","mode":"now"}'
curl -X POST http://127.0.0.1:18789/hooks/agent \
  -H 'x-openclaw-token: SECRET' \
  -H 'Content-Type: application/json' \
  -d '{"message":"Summarize inbox","name":"Email","wakeMode":"next-heartbeat"}'

Utiliser un modÚle différent¶

Ajoutez model Ă  la charge utile de l’agent (ou au mappage) pour remplacer le modĂšle pour cette exĂ©cution :

curl -X POST http://127.0.0.1:18789/hooks/agent \
  -H 'x-openclaw-token: SECRET' \
  -H 'Content-Type: application/json' \
  -d '{"message":"Summarize inbox","name":"Email","model":"openai/gpt-5.2-mini"}'

Si vous appliquez agents.defaults.models, assurez‑vous que le modùle de remplacement y est inclus.

curl -X POST http://127.0.0.1:18789/hooks/gmail \
  -H 'Authorization: Bearer SECRET' \
  -H 'Content-Type: application/json' \
  -d '{"source":"gmail","messages":[{"from":"Ada","subject":"Hello","snippet":"Hi"}]}'

Sécurité¶

  • Conservez les points de terminaison des hooks derriĂšre loopback, un tailnet ou un proxy inverse de confiance.
  • Utilisez un jeton de hook dĂ©dié ; ne rĂ©utilisez pas les jetons d’authentification de la Gateway (passerelle).
  • Repeated auth failures are rate-limited per client address to slow brute-force attempts.
  • If you use multi-agent routing, set hooks.allowedAgentIds to limit explicit agentId selection.
  • Keep hooks.allowRequestSessionKey=false unless you require caller-selected sessions.
  • If you enable request sessionKey, restrict hooks.allowedSessionKeyPrefixes (for example, ["hook:"]).
  • Évitez d’inclure des charges utiles brutes sensibles dans les journaux des webhooks.
  • Les charges utiles des hooks sont traitĂ©es comme non fiables et enveloppĂ©es par des limites de sĂ©curitĂ© par dĂ©faut. Si vous devez dĂ©sactiver cela pour un hook spĂ©cifique, dĂ©finissez allowUnsafeExternalContent: true dans le mappage de ce hook (dangereux).