验证 Webhook 请求来源,并可靠处理可能重复投递的事件。
Webhook 当前为 Beta 功能,接口、字段和行为可能在后续版本中调整。
HTTP 请求
事件发生后,Qoder Cloud Agents 会向 Endpoint URL 发送 HTTP POST 请求:
| Header | 说明 |
|---|---|
Webhook-ID | 事件 ID。相同事件重试时保持不变,可用作消费幂等键。 |
Webhook-Event-Type | 事件类型。 |
Webhook-Timestamp | 生成签名时的 Unix 秒时间戳。 |
Webhook-Signature | 请求签名,当前格式为 v1,<base64>。 |
2xx 表示处理成功。建议先完成验签并将事件写入自己的可靠队列,再快速返回响应。
事件结构
Forward 业务事件使用统一信封:
| 字段 | 类型 | 说明 |
|---|---|---|
type | string | 固定为 event。 |
id | string | Webhook 事件 ID,与 Webhook-ID 相同。 |
created_at | string | 事件发生时间,RFC 3339 格式。 |
data.type | string | 事件类型,与 Webhook-Event-Type 相同。 |
data.id | string | 发生事件的资源 ID。 |
data.schema_version | integer | 事件数据版本,当前为 1。 |
Schedule 事件
forward.schedule.created
Schedule 创建成功时发送:
trigger_policy_type 和 next_trigger_at 仅在有对应值时返回。
forward.schedule_run.succeeded
Schedule Run 成功完成时发送。data.status 为 completed。
forward.schedule_run.failed
Schedule Run 执行失败时发送。结构与成功事件相同,data.status 为 failed,并可能包含 error_type:
签名校验
创建 Endpoint 时返回的 signing_secret 用于验证请求签名。签名内容由以下三部分组成:
Webhook-Timestamp与当前时间的偏差不超过 5 分钟。Webhook-Signature至少包含一个验签成功的v1签名。- 已处理过的
Webhook-ID不再重复执行有副作用的业务操作。
重试与幂等
Webhook 使用至少一次投递语义。网络失败、超时或接收端返回非 2xx 时,系统可能重试同一事件。
- 使用
Webhook-ID去重,不要使用请求到达时间生成幂等键。 - 同一个
Webhook-ID的重复请求应返回成功,且不得重复执行副作用。 - 处理失败时返回非
2xx;处理成功或已处理过时返回2xx。

