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.tokenest requis lorsquehooks.enabled=true.hooks.pathest 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=...returns400).
Points de terminaison¶
POST /hooks/wake¶
Charge utile :
{ "text": "System line", "mode": "now" }
textobligatoire (string) : La description de lâĂ©vĂ©nement (p. ex., « New email received »).modeoptionnel (now|next-heartbeat) : Indique sâil faut dĂ©clencher un heartbeat immĂ©diat (par dĂ©fautnow) 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
}
messageobligatoire (string) : Lâinvite ou le message que lâagent doit traiter.nameoptionnel (string) : Nom lisible par un humain pour le hook (p. ex., « GitHub »), utilisĂ© comme prĂ©fixe dans les rĂ©sumĂ©s de session.agentIdoptional (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.sessionKeyoptionnel (string) : La clĂ© utilisĂ©e pour identifier la session de lâagent. By default this field is rejected unlesshooks.allowRequestSessionKey=true.wakeModeoptionnel (now|next-heartbeat) : Indique sâil faut dĂ©clencher un heartbeat immĂ©diat (par dĂ©fautnow) ou attendre la prochaine vĂ©rification pĂ©riodique.deliveroptionnel (boolean) : Sitrue, la rĂ©ponse de lâagent sera envoyĂ©e vers le canal de messagerie. Par dĂ©fauttrue. Les rĂ©ponses qui ne sont que des accusĂ©s de rĂ©ception de heartbeat sont automatiquement ignorĂ©es.channeloptionnel (string) : Le canal de messagerie pour la livraison. Lâun de :last,whatsapp,telegram,discord,slack,mattermost(plugin),signal,imessage,msteams. Par dĂ©fautlast.tooptionnel (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.modeloptionnel (string) : Remplacement du modĂšle (p. ex.,anthropic/claude-3-5-sonnetou un alias). Doit figurer dans la liste des modĂšles autorisĂ©s si elle est restreinte.thinkingoptionnel (string) : Remplacement du niveau de rĂ©flexion (p. ex.,low,medium,high).timeoutSecondsoptionnel (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.defaultSessionKeyand 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.mappingsvous permet de définirmatch,actionet des modÚles dans la configuration.hooks.transformsDir+transform.modulecharge 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.modulemust resolve within the effective transforms directory (traversal/escape paths are rejected).- Utilisez
match.sourcepour conserver un point dâingestion gĂ©nĂ©rique (routage pilotĂ© par la charge utile). - Les transformations TS nĂ©cessitent un chargeur TS (p. ex.,
bunoutsx) ou des.jsprĂ©compilĂ©s Ă lâexĂ©cution. - DĂ©finissez
deliver: true+channel/tosur les mappages pour acheminer les rĂ©ponses vers une surface de discussion (channelest dĂ©fini par dĂ©faut surlastet retombe sur WhatsApp). agentIdroutes the hook to a specific agent; unknown IDs fall back to the default agent.hooks.allowedAgentIdsrestricts explicitagentIdrouting. Omit it (or include*) to allow any agent. Set[]to deny explicitagentIdrouting.hooks.defaultSessionKeysets the default session for hook agent runs when no explicit key is provided.hooks.allowRequestSessionKeycontrols whether/hooks/agentpayloads may setsessionKey(default:false).hooks.allowedSessionKeyPrefixesoptionally restricts explicitsessionKeyvalues from request payloads and mappings.allowUnsafeExternalContent: truedĂ©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 configurationhooks.gmailpouropenclaw webhooks gmail run. Voir Gmail Pub/Sub pour le flux complet de surveillance Gmail.
Réponses¶
200pour/hooks/wake202pour/hooks/agent(exĂ©cution asynchrone dĂ©marrĂ©e)401en cas dâĂ©chec dâauthentification429after repeated auth failures from the same client (checkRetry-After)400en cas de charge utile invalide413pour 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.allowedAgentIdsto limit explicitagentIdselection. - Keep
hooks.allowRequestSessionKey=falseunless you require caller-selected sessions. - If you enable request
sessionKey, restricthooks.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: truedans le mappage de ce hook (dangereux).