Webhooks
Das Gateway kann einen kleinen HTTP-Webhook-Endpunkt für externe Trigger bereitstellen.Aktivieren
hooks.tokenist erforderlich, wennhooks.enabled=true.hooks.pathist standardmäßig/hooks.
Authentifizierung
Jede Anfrage muss das Hook-Token enthalten. Bevorzugen Sie Header:Authorization: Bearer <token>(empfohlen)x-openclaw-token: <token>agentIdoptional (String): Leitet diesen Hook an einen bestimmten Agenten weiter.
Endpunkte
POST /hooks/wake
Nutzlast:
texterforderlich (string): Die Beschreibung des Ereignisses (z. B. „Neue E-Mail empfangen“).modeoptional (now|next-heartbeat): Ob ein sofortiger Heartbeat ausgelöst werden soll (Standardnow) oder bis zur nächsten periodischen Prüfung gewartet wird.
- Schlange ein System-Ereignis für die Haupt Sitzung ein
- Wenn
mode=now, wird ein sofortiger Heartbeat ausgelöst
POST /hooks/agent
Nutzlast:
messageerforderlich (string): Der Prompt oder die Nachricht, die der Agent verarbeiten soll.nameoptional (string): Für Menschen lesbarer Name für den Hook (z. B. „GitHub“), wird als Präfix in Sitzungszusammenfassungen verwendet.- Unbekannte IDs fallen auf den Standard-Agenten zurück. Wenn gesetzt, wird der Hook mit dem Workspace und der Konfiguration des aufgelösten Agenten ausgeführt. Standardmäßig wird dieses Feld abgelehnt, sofern nicht
hooks.allowRequestSessionKey=truegesetzt ist. sessionKeyoptional (string): Der Schlüssel zur Identifizierung der Sitzung des Agenten. Session-Key-Richtlinie (Breaking Change)wakeModeoptional (now|next-heartbeat): Ob ein sofortiger Heartbeat ausgelöst werden soll (Standardnow) oder bis zur nächsten periodischen Prüfung gewartet wird.deliveroptional (boolean): Wenntrue, wird die Antwort des Agenten an den Messaging-Kanal gesendet. Standardmäßigtrue. Antworten, die nur Heartbeat-Bestätigungen sind, werden automatisch übersprungen.channeloptional (string): Der Messaging-Kanal für die Zustellung. Einer von:last,whatsapp,telegram,discord,slack,mattermost(Plugin),signal,imessage,msteams. Standardmäßiglast.tooptional (string): Die Empfängerkennung für den Kanal (z. B. Telefonnummer für WhatsApp/Signal, Chat-ID für Telegram, Kanal-ID für Discord/Slack/Mattermost (Plugin), Konversations-ID für MS Teams). Standardmäßig der letzte Empfänger in der Hauptsitzung.modeloptional (string): Modell-Override (z. B.anthropic/claude-3-5-sonnetoder ein Alias). Muss in der erlaubten Modellliste enthalten sein, falls eingeschränkt.thinkingoptional (string): Thinking-Level-Override (z. B.low,medium,high).timeoutSecondsoptional (number): Maximale Dauer für den Agent-Lauf in Sekunden.
- Führt einen isolierten Agent-Turn aus (eigener Sitzungsschlüssel)
- Postet immer eine Zusammenfassung in die Haupt-Sitzung
- Wenn
wakeMode=now, wird ein sofortiger Heartbeat ausgelöst
sessionKey-Überschreibungen im /hooks/agent-Payload sind standardmäßig deaktiviert.
Empfohlen: einen festen hooks.defaultSessionKey setzen und Request-Überschreibungen deaktiviert lassen.
- Recommended: set a fixed
hooks.defaultSessionKeyand keep request overrides off. - Optional: Anfrage-Overrides nur bei Bedarf erlauben und Präfixe einschränken.
POST /hooks/<name> (zugeordnet)
Benutzerdefinierte Hook-Namen werden über hooks.mappings aufgelöst (siehe Konfiguration). Eine Zuordnung kann
beliebige Payloads in wake- oder agent-Aktionen umwandeln, mit optionalen Templates oder
Code-Transformationen.
Zuordnungsoptionen (Übersicht):
hooks.presets: ["gmail"]aktiviert die integrierte Gmail-Zuordnung.hooks.mappingsermöglicht das Definieren vonmatch,actionund Templates in der Konfiguration.hooks.transformsDir+transform.modulelädt ein JS/TS-Modul für benutzerdefinierte Logik.hooks.transformsDir(falls gesetzt) muss innerhalb des Transforms-Root-Verzeichnisses unter deinem OpenClaw-Konfigurationsverzeichnis bleiben (typischerweise~/.openclaw/hooks/transforms).transform.modulemuss innerhalb des effektiven Transforms-Verzeichnisses aufgelöst werden (Traversal-/Escape-Pfade werden abgelehnt).
- Verwenden Sie
match.source, um einen generischen Ingest-Endpunkt beizubehalten (payload-gesteuertes Routing). - TS-Transformationen erfordern einen TS-Loader (z. B.
bunodertsx) oder zur Laufzeit vorab kompiliertes.js. - Setzen Sie
deliver: true+channel/tobei Zuordnungen, um Antworten an eine Chat-Oberfläche zu routen (channelist standardmäßiglastund fällt auf WhatsApp zurück). agentIdleitet den Hook an einen bestimmten Agenten weiter; unbekannte IDs fallen auf den Standard-Agenten zurück.hooks.allowedAgentIdsbeschränkt explizitesagentId-Routing. Weglassen (oder*einschließen), um jeden Agenten zuzulassen.[]setzen, um explizitesagentId-Routing zu verweigern.hooks.defaultSessionKeylegt die Standard-Session für Hook-Agent-Ausführungen fest, wenn kein expliziter Schlüssel angegeben ist.hooks.allowRequestSessionKeysteuert, ob/hooks/agent-PayloadssessionKeysetzen dürfen (Standard:false).hooks.allowedSessionKeyPrefixesbeschränkt optional explizitesessionKey-Werte aus Request-Payloads und Zuordnungen.allowUnsafeExternalContent: truedeaktiviert den externen Content-Safety-Wrapper für diesen Hook (gefährlich; nur für vertrauenswürdige interne Quellen).openclaw webhooks gmail setupschreibthooks.gmail-Konfiguration füropenclaw webhooks gmail run. Siehe Gmail Pub/Sub für den vollständigen Gmail-Watch-Flow.
Antworten
200für/hooks/wake202für/hooks/agent(asynchroner Lauf gestartet)401bei Authentifizierungsfehler429nach wiederholten Authentifizierungsfehlern vom selben Client (sieheRetry-After)400bei ungültigem Payload413bei zu großen Payloads
Beispiele
Ein anderes Modell verwenden
Fügen Siemodel zum Agent-Payload (oder zur Zuordnung) hinzu, um das Modell für diesen Lauf zu überschreiben:
agents.defaults.models erzwingen, stellen Sie sicher, dass das Override-Modell dort enthalten ist.
Sicherheit
- Halten Sie Hook-Endpunkte hinter Loopback, Tailnet oder einem vertrauenswürdigen Reverse Proxy.
- Verwenden Sie ein dediziertes Hook-Token; verwenden Sie Gateway-Authentifizierungs-Token nicht wieder.
- Wiederholte Authentifizierungsfehler werden pro Client-Adresse rate-limitiert, um Brute-Force-Versuche zu verlangsamen.
- Wenn du Multi-Agent-Routing verwendest, setze
hooks.allowedAgentIds, um die explizite Auswahl vonagentIdzu begrenzen. - Behalte
hooks.allowRequestSessionKey=falsebei, es sei denn, du benötigst vom Aufrufer ausgewählte Sessions. - Wenn du Request-
sessionKeyaktivierst, beschränkehooks.allowedSessionKeyPrefixes(zum Beispiel["hook:"]). - Vermeiden Sie es, sensible rohe Payloads in Webhook-Logs aufzunehmen.
- Hook-Payloads werden standardmäßig als nicht vertrauenswürdig behandelt und mit Sicherheitsgrenzen umschlossen.
Wenn Sie dies für einen bestimmten Hook deaktivieren müssen, setzen Sie
allowUnsafeExternalContent: truein der Zuordnung dieses Hooks (gefährlich).