Webhooks
Gateway 可以公開一個小型的 HTTP Webhook 端點供外部觸發器使用。啟用
hooks.token在hooks.enabled=true時為必要項。hooks.path預設為/hooks。
認證
每個請求都必須包含 Hook Token。推薦使用 Header:Authorization: Bearer <token>(推薦)x-openclaw-token: <token>?token=<token>(已棄用;會記錄警告,未來主版本會移除)
端點
POST /hooks/wake
Payload:
text必要 (字串):事件說明(例如「收到新電郵」)。mode選用(now|next-heartbeat):是否觸發立即心跳(預設now)或等待下次定期檢查。
- 為主會話加入系統事件
- 如果
mode=now,觸發立即心跳
POST /hooks/agent
Payload:
message必要 (字串):Agent 要處理的提示或訊息。name選用 (字串):Webhook 的人類可讀名稱(例如「GitHub」),用作會話摘要中的前綴。sessionKey選用 (字串):用於識別 Agent 會話的金鑰。預設為隨機的hook:<uuid>。使用一致的金鑰可以在 Hook 語境中進行多輪對話。wakeMode選用(now|next-heartbeat):是否觸發立即心跳(預設now)或等待下次定期檢查。deliver選用 (布林值):若為true,Agent 的回應會傳送至通訊頻道。預設為true。純粹的心跳確認回應會自動跳過。channel選用 (字串):投遞頻道。可選:last、whatsapp、telegram、discord、slack、mattermost(plugin)、signal、imessage、msteams。預設為last。to選用 (字串):頻道的收件者識別碼(例如 WhatsApp/Signal 的電話號碼、Telegram 的聊天 ID、Discord/Slack/Mattermost (plugin) 的頻道 ID、MS Teams 的交談 ID)。預設為主會話中的最後收件者。model選用 (字串):模型覆寫(例如anthropic/claude-3-5-sonnet或別名)。若有限制,必須在允許的模型清單中。thinking選用 (字串):思考等級覆寫(例如low、medium、high)。timeoutSeconds選用 (數字):Agent 執行的最大持續時間(秒)。
- 執行隔離的 Agent 輪次(獨立的會話金鑰)
- 始終在主會話中發佈摘要
- 如果
wakeMode=now,觸發立即心跳
POST /hooks/<name> (已映射)
自訂 Hook 名稱可透過 hooks.mappings 解析(見設定)。映射可以將任意 Payload 轉換為 wake 或 agent 動作,並可選擇範本或程式碼轉換。
映射選項(總結):
hooks.presets: ["gmail"]啟用內建的 Gmail 映射。hooks.mappings讓您在設定中定義match、action和範本。hooks.transformsDir+transform.module載入 JS/TS 模組進行自訂邏輯。- 使用
match.source保持通用的擷取端點(payload 驅動的路由)。 - TS transforms 需要 TS 載入器(例如
bun或tsx)或執行時的預編譯.js。 - 在映射上設定
deliver: true+channel/to以將回覆路由至聊天介面 (channel預設為last並回退至 WhatsApp)。 allowUnsafeExternalContent: true對該 Hook 禁用外部內容安全包裝紙 (危險;僅用於信任的內部來源)。openclaw webhooks gmail setup寫入hooks.gmail設定供openclaw webhooks gmail run使用。 見 Gmail Pub/Sub 查看完整的 Gmail 監看流程。
回應
/hooks/wake傳回200/hooks/agent傳回202(非同步執行已啟動)- 認證失敗傳回
401 - 無效 Payload 傳回
400 - 過大 Payload 傳回
413
範例
使用不同的模型
在 Agent Payload(或映射)中加入model 以覆寫該執行的模型:
agents.defaults.models,請確保覆寫模型包含在其中。
安全
- 將 Hook 端點保持在 loopback、tailnet 或信任的反向代理後面。
- 使用專屬的 Hook Token;不要重複使用 Gateway 認證 Token。
- 避免在 Webhook 日誌中包含敏感的原始 Payload。
- Hook Payload 預設會被視為不受信任並使用安全邊界進行包裝。
若您必須對特定 Hook 禁用此功能,請在該 Hook 的映射中設定
allowUnsafeExternalContent: true(危險)。