Webhooks
La Gateway (passerelle) peut exposer un petit point de terminaison HTTP de webhook pour des déclencheurs externes.Activation
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>- Les tokens en query string sont rejetés (
?token=...renvoie400).
Points de terminaison
POST /hooks/wake
Charge utile :
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.
- 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 :
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.agentIdfacultatif (string) : dirige ce hook vers un agent spécifique. Les identifiants inconnus reviennent à l’agent par défaut. Lorsqu’il est défini, le hook s’exécute avec le workspace et la configuration de l’agent résolu.sessionKeyoptionnel (string) : La clé utilisée pour identifier la session de l’agent. Par défaut, ce champ est rejeté sauf sihooks.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.
- 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
Politique de clé de session (breaking change)
Les surchargessessionKey dans la payload /hooks/agent sont désactivées par défaut.
- Recommandé : définir une valeur fixe pour
hooks.defaultSessionKeyet désactiver les surcharges côté requête. - Optionnel : autorisez les substitutions de requête uniquement lorsque nécessaire et limitez les préfixes.
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(si défini) doit rester dans la racine des transforms sous votre répertoire de configuration OpenClaw (généralement~/.openclaw/hooks/transforms).transform.moduledoit se résoudre dans le répertoire de transforms effectif (les chemins de traversée/échappement sont rejetés).
- 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). agentIdachemine le hook vers un agent spécifique ; les identifiants inconnus reviennent à l’agent par défaut.hooks.allowedAgentIdslimite le routage explicite viaagentId. Omettez-le (ou incluez*) pour autoriser n’importe quel agent. Définissez[]pour refuser le routage explicite viaagentId.hooks.defaultSessionKeydéfinit la session par défaut pour les exécutions d’agent via hook lorsqu’aucune clé explicite n’est fournie.hooks.allowRequestSessionKeycontrôle si les payloads/hooks/agentpeuvent définirsessionKey(par défaut :false).hooks.allowedSessionKeyPrefixeslimite éventuellement les valeurs explicites desessionKeyissues des payloads de requête et des mappages.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’authentification429après des échecs d’authentification répétés provenant du même client (vérifiezRetry-After)400en cas de charge utile invalide413pour les charges utiles trop volumineuses
Exemples
Utiliser un modèle différent
Ajoutezmodel à la charge utile de l’agent (ou au mappage) pour remplacer le modèle pour cette exécution :
agents.defaults.models, assurez‑vous que le modèle de remplacement y est inclus.
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).
- Les échecs d’authentification répétés sont limités en débit par adresse client afin de ralentir les tentatives par force brute.
- Si vous utilisez un routage multi-agent, définissez
hooks.allowedAgentIdspour limiter la sélection explicite deagentId. - Conservez
hooks.allowRequestSessionKey=falsesauf si vous avez besoin de sessions sélectionnées par l’appelant. - Si vous activez le
sessionKeydans la requête, limitezhooks.allowedSessionKeyPrefixes(par exemple,["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).