事件幂等与事件收件箱
事件幂等与 EventKey
Webhook 请求的幂等键(eventKey)由以下规则决定(参考 resolveEventKey):
优先从请求头中读取:
X-Event-IdX-Request-IdX-Idempotency-Key
按顺序取第一个非空值作为 eventKey;若都不存在,则对请求体做 SHA-256 哈希作为 eventKey。
同一个 Trigger 下,eventKey 相同的事件会被视为重复,返回 duplicate = true,可用于避免重复消费。
Webhook 请求负载解析
负载解析逻辑(参考 parsePayload):
- 若请求体为空,则触发器收到的 payload 为
{}(空对象) - 若
Content-Type包含application/json且 JSON 解析成功:- payload 为 JSON 对象,字段按原样传递给工作流
- 否则:
-
payload 形如:
{
"raw": "<按 UTF-8 解码的文本>",
"base64": "<原始字节的 Base64 编码>"
}
-
Webhook 响应结构
Webhook 触发接口统一返回:
{
"success": true,
"data": {
"accepted": true,
"duplicate": false,
"eventInboxId": "inbox_123",
"workflowExecutionId": "exec_456"
}
}
accepted:是否成功写入事件收件箱并进入调度流程duplicate:是否检测到eventKey重复eventInboxId:事件收件箱记录 IDworkflowExecutionId:对应的工作流执行 ID(若已经启动)
事件收件箱(TriggerEventInbox)
查看指定 Trigger 的事件列表:
- GET
/linker/triggers/<triggerId>/events?page=&size=
返回字段(参考 TriggerEventSummary):
items:事件列表,每个元素包含:id:事件 IDeventKey:幂等键status:处理状态(枚举值,如PENDING/RUNNING/DONE/FAILED等)attempts:重试次数workflowExecutionId:绑定的工作流执行 IDlastError:最近一次错误信息(若有)payloadHash:请求负载哈希(用于排查)createdAt/updatedAt:时间戳
page:当前页号(从 0 开始)size:当前页大小total:总条数