任务回调消息契约
draw.progress消息结构、消费约束与回调闭环说明
1. 目标
定义 Easyai Server 对外推送的任务进度消息结构,以及消费方如何基于 callback_url 完成任务回调闭环。
2. 责任边界
- Easyai Server:发布
draw.progress事件,注入callback_url - Consumer(Portal 或网关消费者):消费事件并按
callback_url发起回调 - 第三方回调端:接收回调并返回 2xx ACK
3. 回调地址来源与配置
payload.callback_url 来源于系统「运营配置」-> 「任务调度」 -> 「任务回调地址」。

约束:
- 回调地址必须从 Consumer 所在网络可达(内网或公网均可)
- 回调地址应保持稳定,避免执行期间切换
4. 时序图

5. 消息契约(基于共享类型)
核心结构:
5.1 事件包络字段
| 字段 | 含义 |
|---|---|
| eventName | 固定 draw.progress |
| payload | 任务消息体,类型 IGenerateStatus |
| target.channel | 投递通道(默认 default、canvas_flow) |
| target.clientId | 当前用户 ID |
| metadata.source | 固定 easyai-server-main |
| metadata.queueStatus | 来自 payload.queue_status.status |
| correlationId | 优先 request_id,其次 task_id |
5.2 payload 关键字段
| 字段路径 | 类型 | 含义 |
|---|---|---|
| callback_url | string | undefined | 回调地址 |
| user._id | string | undefined | 本系统用户 ID |
| user.sso_id | string | undefined | SSO 用户 ID |
| queue_status.task_id | string | 任务主 ID |
| queue_status.request_id | string | undefined | 请求链路 ID |
| queue_status.status | enum | 任务状态 |
| queue_status.progress | number | undefined | 进度值 |
| queue_status.message | string | undefined | 状态描述 |
| queue_status.original_error_message | string | undefined | 原始错误信息 |
| node_status | object | undefined | 节点级执行状态 |
| generate_info | object | undefined | 扩展生成信息 |
| usage | any | 用量信息(兼容字段) |
| billings | BillDetail | undefined | 账单信息 |
6. 真实 payload 示例(脱敏)
7. 消费与回调实现要求
| 项目 | 要求 |
|---|---|
| 回调地址 | 必须网络可达(内网/公网均可),并保持稳定 |
| 幂等键 | 推荐 task_id |
| 重试 | 非 2xx 自动重试,指数退避 |
8. 完成标准
- 能正确消费
draw.progress消息 - 能按
callback_url成功回调第三方系统 - 重复消息不会导致重复入账/重复状态推进