配置路由
在plugins.entries.webhooks.config 下设置配置:
secret 接受纯文本字符串或 SecretRef:{ source: "env" | "file" | "exec", provider: "default", id: "..." }。
SecretRef 会解析到 Gateway 网关的启动配置快照中。当某个路由的密钥无法解析时,Gateway 网关会继续运行,该路由也会保持注册但处于冷状态:请求会收到通用的身份验证失败响应(401)。其他路由仍然可用。修复 SecretRef 来源后,重新加载或重启 Gateway 网关以激活新快照。绝不会在公共请求路径上解析 SecretRef 值。
安全模型
每个路由都拥有其所配置sessionKey 的 TaskFlow 权限:它可以检查和修改该会话拥有的任何 TaskFlow。TaskFlow 访问始终通过 api.runtime.tasks.managedFlows.bindSession(...) 进行,因此路由绝不能在其绑定会话之外执行操作。为限制影响范围:
- 为每个路由使用强度高且唯一的密钥。
- 优先使用 SecretRef,而不是内联的明文密钥。
- 将路由绑定到能够满足工作流需求的最小范围会话。
- 仅公开所需的特定 webhook 路径。
POST)和 Content-Type: application/json 检查,然后进行固定窗口速率限制(每个路径+客户端 IP 键在每个 60 秒窗口内最多 120 个请求,最多跟踪 4,096 个键),接着进行进行中请求限制(每个键最多 8 个并发请求,最多跟踪 4,096 个键),然后进行共享密钥身份验证,最后读取大小上限为 256 KB、超时为 15 秒的 JSON 正文。未通过前置检查的请求不会进入后续阶段。
请求格式
发送POST 请求,使用 Content-Type: application/json,并提供 Authorization: Bearer <secret> 或 x-openclaw-webhook-secret: <secret>:
支持的操作
修改操作(
set_waiting、resume_flow、finish_flow、fail_flow、request_cancel)需要提供 flowId 和 expectedRevision 以实现乐观并发控制;过期的修订版本会返回 409 revision_conflict。
create_flow
run_task
允许的 runtime 值:subagent、acp。startedAt、lastEventAt 和 progressSummary 仅在 status 为 "running" 时有效;在任何其他状态下发送这些值都会返回 400 invalid_request。
响应结构
sessionKey。code 值包括 not_found、not_managed、revision_conflict、persist_failed、cancel_requested、cancel_pending、terminal、invalid_request、request_rejected,以及操作特定的回退代码(mutation_rejected、create_rejected、task_not_created、cancel_rejected);当修改因上述命名代码未涵盖的原因而被拒绝时,会使用这些回退代码。
相关内容
- Hooks - 内部事件驱动的钩子与此基于 HTTP 的 TaskFlow 桥接器对比
- Gateway 网关 Webhooks(
hooks.*配置) - 独立的通用 Gateway 网关 HTTP 端点功能;与此插件的路由不同 - 插件运行时 SDK
- CLI Webhooks