Webhooks
Gateway kan een klein HTTP-webhookeindpunt blootstellen voor externe triggers.Inschakelen
hooks.tokenis vereist wanneerhooks.enabled=true.hooks.pathis standaard/hooks.
Auth
Elke aanvraag moet het hook-token bevatten. Geef de voorkeur aan headers:Authorization: Bearer <token>(aanbevolen)x-openclaw-token: <token>- Query-string-tokens worden afgewezen (
?token=...retourneert400).
Eindpunten
POST /hooks/wake
Payload:
textvereist (string): De beschrijving van de gebeurtenis (bijv. “Nieuwe e-mail ontvangen”).modeoptioneel (now|next-heartbeat): Of een onmiddellijke heartbeat moet worden geactiveerd (standaardnow) of gewacht wordt op de volgende periodieke controle.
- Zet een systeemevenement in de wachtrij voor de hoofdsessie
- Als
mode=now, activeert een onmiddellijke heartbeat
POST /hooks/agent
Payload:
messagevereist (string): De prompt of het bericht dat de agent moet verwerken.nameoptioneel (string): Menselijk leesbare naam voor de hook (bijv. “GitHub”), gebruikt als prefix in sessiesamenvattingen.agentIdoptioneel (string): Routeer deze hook naar een specifieke agent. Onbekende ID’s vallen terug op de standaardagent. Indien ingesteld, wordt de hook uitgevoerd met de workspace en configuratie van de opgeloste agent.sessionKeyoptioneel (string): De sleutel die wordt gebruikt om de sessie van de agent te identificeren. Standaard wordt dit veld afgewezen tenzijhooks.allowRequestSessionKey=true.wakeModeoptioneel (now|next-heartbeat): Of een onmiddellijke heartbeat moet worden geactiveerd (standaardnow) of gewacht wordt op de volgende periodieke controle.deliveroptioneel (boolean): Alstrue, wordt de reactie van de agent naar het berichtkanaal verzonden. Standaardtrue. Reacties die alleen heartbeat-bevestigingen zijn, worden automatisch overgeslagen.channeloptioneel (string): Het berichtkanaal voor levering. Een van:last,whatsapp,telegram,discord,slack,mattermost(plugin),signal,imessage,msteams. Standaardlast.tooptioneel (string): De ontvanger-ID voor het kanaal (bijv. telefoonnummer voor WhatsApp/Signal, chat-ID voor Telegram, kanaal-ID voor Discord/Slack/Mattermost (plugin), conversatie-ID voor MS Teams). Standaard de laatste ontvanger in de hoofdsessie.modeloptioneel (string): Model-override (bijv.anthropic/claude-3-5-sonnetof een alias). Moet in de toegestane modellenlijst staan als die is beperkt.thinkingoptioneel (string): Override van het denkniveau (bijv.low,medium,high).timeoutSecondsoptioneel (number): Maximale duur voor de agentrun in seconden.
- Draait een geïsoleerde agentbeurt (eigen sessiesleutel)
- Plaatst altijd een samenvatting in de hoofdsessie
- Als
wakeMode=now, activeert een onmiddellijke heartbeat
Session key-beleid (breaking change)
/hooks/agent-payload sessionKey-overrides zijn standaard uitgeschakeld.
- Aanbevolen: stel een vaste
hooks.defaultSessionKeyin en houd request-overrides uitgeschakeld. - Optioneel: sta aanvraag-overschrijvingen alleen toe wanneer nodig en beperk prefixes.
POST /hooks/<name> (gemapt)
Aangepaste hooknamen worden opgelost via hooks.mappings (zie configuratie). Een mapping kan
willekeurige payloads omzetten in wake- of agent-acties, met optionele sjablonen of
codetransformaties.
Mappingopties (samenvatting):
hooks.presets: ["gmail"]schakelt de ingebouwde Gmail-mapping in.hooks.mappingslaat jematch,actionen sjablonen in de config definiëren.hooks.transformsDir+transform.modulelaadt een JS/TS-module voor aangepaste logica.hooks.transformsDir(indien ingesteld) moet binnen de transforms-root onder je OpenClaw-configuratiemap blijven (meestal~/.openclaw/hooks/transforms).transform.modulemoet worden opgelost binnen de effectieve transforms-map (traversal-/escape-paden worden geweigerd).
- Gebruik
match.sourceom een generiek ingest-eindpunt te behouden (payload-gestuurde routering). - TS-transformaties vereisen een TS-loader (bijv.
bunoftsx) of vooraf gecompileerde.jstijdens runtime. - Stel
deliver: true+channel/toin op mappings om antwoorden naar een chatoppervlak te routeren (channelis standaardlasten valt terug op WhatsApp). agentIdrouteert de hook naar een specifieke agent; onbekende ID’s vallen terug op de standaardagent.hooks.allowedAgentIdsbeperkt explicieteagentId-routering. Laat dit weg (of neem*op) om elke agent toe te staan. Stel[]in om explicieteagentId-routering te weigeren.hooks.defaultSessionKeystelt de standaardsessie in voor hook-agentruns wanneer geen expliciete sleutel is opgegeven.hooks.allowRequestSessionKeybepaalt of/hooks/agent-payloadssessionKeymogen instellen (standaard:false).hooks.allowedSessionKeyPrefixesbeperkt optioneel explicietesessionKey-waarden uit request-payloads en mappings.allowUnsafeExternalContent: trueschakelt de externe content-veiligheidswrapper voor die hook uit (gevaarlijk; alleen voor vertrouwde interne bronnen).openclaw webhooks gmail setupschrijfthooks.gmail-config vooropenclaw webhooks gmail run. Zie Gmail Pub/Sub voor de volledige Gmail watch-flow.
Reacties
200voor/hooks/wake202voor/hooks/agent(asynchrone run gestart)401bij authenticatiefout429na herhaalde authenticatiefouten van dezelfde client (controleerRetry-After)400bij ongeldig payload413bij te grote payloads
Voorbeelden
Gebruik een ander model
Voegmodel toe aan de agentpayload (of mapping) om het model voor die run te overriden:
agents.defaults.models afdwingt, zorg er dan voor dat het override-model daarin is opgenomen.
Beveiliging
- Houd hook-eindpunten achter loopback, tailnet of een vertrouwde reverse proxy.
- Gebruik een dedicated hook-token; hergebruik geen gateway-authenticatietokens.
- Herhaalde authenticatiefouten worden per clientadres gerate-limit om brute-forcepogingen te vertragen.
- Als je multi-agent-routering gebruikt, stel dan
hooks.allowedAgentIdsin om explicieteagentId-selectie te beperken. - Houd
hooks.allowRequestSessionKey=falsetenzij je sessies nodig hebt die door de aanroeper worden geselecteerd. - Als je request-
sessionKeyinschakelt, beperk danhooks.allowedSessionKeyPrefixes(bijvoorbeeld["hook:"]). - Vermijd het opnemen van gevoelige ruwe payloads in webhooklogs.
- Hook-payloads worden standaard als niet-vertrouwd behandeld en omwikkeld met veiligheidsgrenzen.
Als je dit voor een specifieke hook moet uitschakelen, stel dan
allowUnsafeExternalContent: truein die hookmapping in (gevaarlijk).