修正SuperAgent任务结果来源消息定位

This commit is contained in:
andy
2026-07-12 14:53:54 +08:00
parent bf796946f9
commit eee37315a0
18 changed files with 789 additions and 86 deletions

View File

@@ -41,7 +41,7 @@
- 本接口只做技术校验和系统接收,不替代用户确认和 OPERA 模拟操作。
- `application/json` 用于 V3 结构化 `S10/S99`、V3 业务根或 V2 `normal_task` / `manual_review` 兼容结构化任务。
- `text/plain` 用于旧 `S000,source_message_id` / `S999,source_message_id` 特殊入口结果兼容。
- P0.1 后V3 业务根中的完整 Parent split 父事件必须使用 `event_type=Cancel Allotment``task_subtype=cancel_allotment_control_block`;当前新入站不接受 `Cancel Booking + linked_parent_release_after_child_split` 作为合法业务任务旧 V2 `ai_task_results[]` 兼容入口也不能继续提交该三元组。
- P0.1 后V3 业务根中的完整 Parent split 父事件必须使用 `event_type=Cancel Allotment``task_subtype=cancel_allotment_control_block`;当前新入站不接受 `Cancel Booking + linked_parent_release_after_child_split` 作为合法业务任务。V3 `message_events[]` 中的旧三元组按 event 写入 adapter contract error旧 V2 `ai_task_results[]` 兼容入口提交该三元组时按请求级 `ADAPTER_CONTRACT_ERROR` 拒绝
### 2.1 SourceMessage ID 口径
@@ -50,13 +50,13 @@
后端正式处理路径:
```text
hotel_id + source_provider(默认 AGENTBUS) + source_channel(默认 EMAIL) + source_message_id
系统酒店 + source_message_id
→ platform_source_message_inbox.external_message_id
→ platform_source_message_inbox.id
→ workflow_* 表 source_message_id 内部外键
```
数据库 `workflow_*` 表中的 `source_message_id` 仍然保存内部 SourceMessage Inbox ID。只有对外接口的 `source_message_id` 使用外部来源消息 ID。无 `hotel_id` 时仅兼容本地旧夹具使用内部数字 ID正式 SuperAgent 调用不得依赖该兼容路径。
数据库 `workflow_*` 表中的 `source_message_id` 仍然保存内部 SourceMessage Inbox ID。只有对外接口的 `source_message_id` 使用外部来源消息 ID。任务结果通知不要求 SuperAgent 传数据库层 `source_provider` / `source_channel`;后端按系统酒店和外部消息 ID 查唯一 Inbox 记录,真实 provider/channel 以 SourceMessage Inbox 入库值为准。`hotel_id` 时仅兼容本地旧夹具使用内部数字 ID正式 SuperAgent 调用不得依赖该兼容路径。
## 3. 鉴权方案
@@ -171,10 +171,10 @@ JSON 请求体沿用 AI 导入文档定义的聚合结构。
| 字段 | 是否必填 | 中文说明 |
| --- | --- | --- |
| `hotel_id` | | 酒店上下文 ID,用于反查 SourceMessage Inbox 幂等键 |
| `hotel_id` | | 酒店上下文 IDSuperAgent 默认不传,单酒店阶段由后端解析系统酒店 |
| `source_message_id` | 是 | 外部来源消息 ID对应 AgentBus `source.external_message_id`;一次请求只能有一个 |
| `source_provider` | 否 | 来源提供方,第一版缺省为 `AGENTBUS` |
| `source_channel` | 否 | 来源渠道,第一版缺省为 `EMAIL` |
| `source_provider` | 否 | V2 兼容字段;通常不传。写入定位不使用该字段,真实 provider 以 SourceMessage Inbox 入库值为准 |
| `source_channel` | 否 | V2 兼容字段通常不传。写入定位不使用该字段AgentBus 邮件真实入库渠道可能是 `OUTLOOK` |
| `ai_task_results[]` | 是 | AI 拆分出的任务结果列表,必须保留数组顺序 |
| `extraction_warnings[]` | 否 | 抽取警告;不直接等同于业务任务 |
@@ -227,7 +227,7 @@ S999,mail-20260708-0001
处理规则:
- 第一版使用系统默认酒店反查 SourceMessage Inbox不要求文本 body 携带 `hotel_id`
- 后端按 `默认酒店 + AGENTBUS + EMAIL + external_message_id` 查询 SourceMessage。
- 后端按 `默认酒店 + external_message_id` 查询唯一 SourceMessage;真实 provider/channel 以 Inbox 入库值为准
- 命中后创建 `SOURCE_MESSAGE_ONLY` 只读任务。
- 任务列表可见,订单列表不可见。
- 不允许编辑、确认、转换订单、执行 OPERA 或重试 OPERA。
@@ -243,7 +243,7 @@ S999,mail-20260708-0001
- 鉴权签名合法。
- 请求体大小不超过限制。
- JSON body 可解析S000/S999 文本 body 必须符合 `结果码,source_message_id`
- JSON body 中 `hotel_id` 存在。仅本地旧夹具兼容缺少 `hotel_id``source_message_id` 为内部数字 ID 的调用。
- JSON body 中 `hotel_id` 可不传;正式 REST / MCP 调用由后端解析系统酒店。仅本地旧夹具在显式开启兼容开关时允许缺少 `hotel_id``source_message_id` 为内部数字 ID 的调用。
- S000/S999 文本 body 第一版使用系统默认酒店,不读取 `hotel_id`
- 顶层只有一个 `source_message_id`
- `source_message_id` 对应的外部来源消息已经写入 SourceMessage Inbox。
@@ -253,6 +253,8 @@ S999,mail-20260708-0001
- 同一个请求内 `source_event_index` 和数组顺序可保存。
- 关键字符串长度不超过数据库限制。
- V3 P0.1 Parent split 当前合法结构必须是 `Cancel Allotment + cancel_allotment_control_block``Cancel Booking + linked_parent_release_after_child_split` 属于当前 producer 契约错误,只能作为历史 payload 只读兼容。
- Parent 只提供 `case_keys.group_code` 或只提供 `case_keys.block_code` 时,后端会在 adapter 派生副本中补齐另一边,不回写原始 payload。
- Parent `case_keys.group_code``case_keys.block_code` 原始候选冲突时SuperAgent 应输出 `manual_review.reason_code=target_object_unclear` 和非空 `context_used.parent_identity_candidates[]`;后端会创建同卡 type-known manual review。缺少该复核结构时按 adapter contract error 处理。
- 同一个 Parent split cluster 只能有一个 Parent 候选;重复 Parent 候选不创建第二张业务任务卡。
### 5.2 不在本接口判断
@@ -459,6 +461,7 @@ S000 / S999 文本结果创建成功时,同样返回 `201 Created`。这类结
| 409 | `SYSTEM_HOTEL_AMBIGUOUS` | 单酒店阶段平台酒店表存在多家 ACTIVE 酒店 |
| 400 | `SOURCE_MESSAGE_REQUIRED` | `source_message_id` 缺失 |
| 404 | `SOURCE_MESSAGE_NOT_FOUND` | 外部来源消息尚未写入 SourceMessage Inbox |
| 409 | `SOURCE_MESSAGE_AMBIGUOUS` | 同一系统酒店下存在多条相同外部 `source_message_id` 的 Inbox 记录,后端拒绝随机选择 |
| 400 | `TASK_RESULTS_EMPTY` | `ai_task_results[]` 为空 |
| 400 | `TASK_RESULT_UNSUPPORTED_TYPE` | `result_type``task_type` 不可识别 |
| 400 | `DUPLICATE_TASK_RESULT_ITEM` | 同一请求内 item 重复 |