Webhooks¶
Gateway kan een klein HTTP-webhookeindpunt blootstellen voor externe triggers.
Inschakelen¶
{
hooks: {
enabled: true,
token: "shared-secret",
path: "/hooks",
},
}
Notities:
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>?token=<token>(verouderd; logt een waarschuwing en wordt verwijderd in een toekomstige major release)
Eindpunten¶
POST /hooks/wake¶
Berichtinhoud:
{ "text": "System line", "mode": "now" }
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.
Effect:
- Zet een systeemevenement in de wachtrij voor de hoofdsessie
- Als
mode=now, activeert een onmiddellijke heartbeat
POST /hooks/agent¶
Berichtinhoud:
{
"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
}
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.sessionKeyoptioneel (string): De sleutel die wordt gebruikt om de sessie van de agent te identificeren. Standaard een willekeurigehook:<uuid>. Het gebruik van een consistente sleutel maakt een meerturnsgesprek binnen de hookcontext mogelijk.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.
Effect:
- Draait een geïsoleerde agentbeurt (eigen sessiesleutel)
- Plaatst altijd een samenvatting in de hoofdsessie
- Als
wakeMode=now, activeert een onmiddellijke heartbeat
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.- 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). 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 authenticatiefout400bij ongeldig payload413bij te grote payloads
Voorbeelden¶
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"}'
Gebruik een ander model¶
Voeg model toe aan de agentpayload (of mapping) om het model voor die run te overriden:
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"}'
Als je agents.defaults.models afdwingt, zorg er dan voor dat het override-model daarin is opgenomen.
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"}]}'
Beveiliging¶
- Houd hook-eindpunten achter loopback, tailnet of een vertrouwde reverse proxy.
- Gebruik een dedicated hook-token; hergebruik geen gateway-authenticatietokens.
- 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).