Files
LWLT-AIBOT/agent设计规范/agentbus-reply-contract.md
2026-09-09 17:24:16 +08:00

9.6 KiB
Raw Blame History

AgentBus 用户回复契约

本契约只约束执行完成后发给 AgentBus 用户的业务回执,不改变 Agent/Skill 的解析 JSON 契约。

组长任务摘要不再走 AgentBus

组长任务摘要已经从 AgentBus 主动帧迁移到独立的外部 Webhook具体契约见 leader-summary-webhook-contract.md。AgentBus 只继续处理员工自己的入站任务、受理回复、最终结果和业务附件;组长摘要不再依赖组长 AgentBus 账号、渠道、fromconversation_id 或 WebSocket 在线状态,也不参与员工回复队列。

历史 task.summary 仍作为保留入站事件拒绝创建任务,以防旧桥接器回显或重放旧主动帧。迁移后的控制面不会再生成这种帧。

归属和执行路由

每个 AgentBus 渠道必须一对一绑定一个有效的普通用户或组长平台账号;管理员负责配置和查看,但不能成为员工渠道的归属账号,也不能代替归属账号确认或领取 ERP 执行。渠道只有在归属账号已配置唯一 ERP 账号后才能启用 listener。AgentBus 入站任务在创建时同时固化渠道与 assigned_user_id,使用归属账号当时有效的业务类型白名单;不得在领取时按当前在线浏览器、用户名、管理员身份或任意空闲云电脑重新推断归属。

员工云电脑必须同时登录该员工的平台账号和平台绑定的 ERP 账号并打开扩展。同一平台账号在 90 秒心跳新鲜期内只允许一个执行 worker扩展只回传期望 ERP 账号是否匹配控制面不接收页面中的其他账号文本。领取任务和提交结果都会重新校验任务归属、worker 连接与 ERP 身份。任一项缺失、过期、冲突或不匹配都失败关闭,不把任务转交给管理员或其他在线员工。

旧未绑定渠道默认停用,历史上无法可靠推断归属的 AgentBus 任务保持未分配且不得自动执行。渠道删除后,历史任务保留原 assigned_user_id,该渠道尚未投递的回执随渠道删除且不得改投其他渠道。

用户侧消息

用户侧只收到必要的阶段消息:

  1. 普通任务受理通知已受理,正在处理。
  2. 名单附件阶段通知:首次文字指令进入等待时,直接提示需要 .xls/.xlsx 名单附件;附件到达后提示名单附件已收到,正在校验并处理。,不再重复普通受理文案。
  3. 最终返回通知:成功返回业务回执;失败返回 ERP 业务反馈或简短错误摘要。同一任务的同一次最终结果只发送一次。

解析完成、进入全自动化 ERP 执行、页面打开、提交中、写后回查等状态只进入平台生命周期和审计,不发送为用户进度。

名单入站附件

两项名单业务固定走 Program Parser。首次文字指令到达但没有名单文件时任务进入 awaiting_attachment,并返回一条要求发送 .xls/.xlsx 的重要消息;该状态不是最终失败,也不会触发 ERP。后续可以在同一 conversation_id,或明确携带 payload.task_id,发送一个附件而不带正文。

首次等待附件的入站消息只拥有等待提示,不拥有后续 ERP 最终回执。通过校验并触发解析的附件消息才是该次任务最终回执的归属消息;若历史或重放场景存在多条可归属消息,耐久回执只选择最新一条。因此“文字指令 + 附件”不会在任务完成后各返回一次相同成功信息。

名单入站 payload.attachments 最多一个,使用 namecontent_typesize、可选 sha256 和不含凭据的 HTTPS url。当前服务运行在受信内网,控制面允许该 URL 直接使用内网域名、私网 IPv4/IPv6 或 localhost仍拒绝 HTTP、URL 用户名密码、无法解析的地址、超过大小限制、大小或 SHA-256 不一致以及超过两次的重定向。每次 DNS 解析后固定到选定地址发起 HTTPS 请求,重定向目标重新执行同一 URL 与 DNS 流程。附件 URL 和原始字节不写入任务 JSONB 或日志;允许内网目标意味着 AgentBus 渠道及其上游桥接器必须是受信输入源。

微信传输信封的 Conversation: 在帧未显式提供 conversation_id 时作为会话键,显式字段优先。[WeChat attachment: 文件名] 只是桥接器的文字占位符:没有同时提供 payload.attachments[] 时,控制面不得把它作为新业务消息创建任务,也不得假装已收到文件;应保留原任务的 awaiting_attachment 状态并提示附件内容尚未传到平台。附件元数据或安全下载校验失败时只返回预定义的安全摘要,不回显 URL、文件内容或名单值。

服务端诊断以 diagnostic_event=agentbus.<agentbus_event> 串联 frame、conversation、channel、任务和最终回执。附件入口必须分别记录元数据、DNS、解析地址数量/IP family、HTTPS 状态、重定向、字节校验、结果和耗时,但不能记录 URL、hostname、IP、文件名、文件内容或名单值。异常使用错误码、稳定指纹和清理后的代码栈定位生产环境不得启用正文 payload 日志。

附件通过程序模板校验后,任务从 awaiting_attachment 转为 parse_queued;校验失败则保留等待状态并只返回安全错误码和行列位置,不回显名单值。原始工作簿不持久化,只暂存加密 canonical TSV 供 Program Parser 使用。

失败

按以下顺序选择最终文本:

  1. ERP 明确返回业务规则提示时,返回 ERP 提示原文,例如 此团还有【应收团款】账,不能取消!
  2. 没有 ERP 业务提示时,返回一条简短错误摘要。
  3. ERP 写入结果不确定时不称为成功也不伪装成普通业务失败返回“ERP 写入结果暂不确定,请人工回查后再处理。”。

错误码、插件 blocker、HTTP 状态、请求哈希、隐藏 ID、执行阶段和回查证据不进入 AgentBus 用户文本。

成功回执矩阵

action 用户回执 必须包含
team_order_create 新订单成功 团号
team_order_batch_create 批量下单成功 全部团号,不只第一条
shared_plan_create 散拼计划创建成功 全部母团团号
shared_child_order_create 新子单成功 子单号;有母团号时可同时返回母团号
arrangement_guide 导游安排成功/清除成功 团号、导游或清除结果
arrangement_vehicle 用车安排成功/清除成功 团号、用车日期、数量、车辆/项目
arrangement_hotel 客户酒店模板或清除成功 团号、入住/退房、晚数、房型/房数
arrangement_transport 大交通安排成功/清除成功 团号、交通日期、数量、项目
arrangement_other 其他/备案安排成功/清除成功 团号、业务日期、项目/数量(有值才返回)
order_update_* 信息修改成功 团号/子单号、已更新业务字段和值
passenger_list_import 名单导入成功 团号/子单号、导入行数(可取得时)
order_cancel 订单已取消 团号/子单号;母团级联时说明子单状态同步
order_restore 订单已恢复 团号/子单号、目标状态(可取得时)
confirmation_export 团队文件已准备 团号/子单号;独立团/子单游客名单或散拼母团整团游客信息的真实 .xlsx(原始 ERP .xls 只保留在平台归档);其他类型 PDF转换失败时使用对应源文件附件通过受控元数据交付

成功回执中的字段必须来自已验证的 ERP 回执或写后回查;不能使用“已提交并完成回查”这种技术过程作为业务正文。

酒店安排客户模板

酒店新增成功且执行结果包含完整酒店字段时,使用以下格式。变量全部由真实回查结果填充;英文和中文日期使用同一组实际日期。

①NEW BOOKING
GROUP CODE: {group_code}
IN.      {in_date_dd_mm_yyyy}
OUT    {out_date_dd_mm_yyyy}
{nights}Night(s).    {room_count}{room_type_en}
②新订单
团号:{group_code}{customer_suffix}
入住日期:{in_date_yyyy_mm_dd_with_dots}
退房日期:{out_date_yyyy_mm_dd_with_dots}
几       晚:{nights}晚
房型/房数:{room_type_zh}   {room_count}间

其中 customer_suffix 在有客户名称时才追加。若酒店变更或回查缺少模板所需字段,使用简洁的“酒店安排已更新/已完成”业务回执,不输出空占位符。

文件交付

最终回执可携带 payload.attachments 附件元数据:namecontent_typesizeinline: false、HTTPS url,以及可选的 idsha256。微信渠道适配器会按数组顺序下载 URL 并发送文件URL 必须能被适配器的 HTTPS 域名白名单访问。

AgentBus 回执不发送原始文件字节或 content_base64,也不发送后台鉴权下载地址。确认单必须使用 OSS 存储并生成可供渠道适配器访问的 HTTPS URL数据库存储或 HTTP/后台登录 URL 的附件只保留在平台任务详情中不投递到外部渠道。原始文件字节、base64、SHA-256、ERP URL、artifact ID 和执行状态不能进入用户文本;文件正文不写入任务 JSONB 或日志,耐久 outbox 只保存附件引用。

visitor-list 在平台任务中同时保留源归档 .xls 与移动端交付 .xlsx其中源归档明确标记为不可投递AgentBus/微信回执只允许携带真实 .xlsx。独立团/散拼子单游客名单来自 did+tid,散拼母团整团游客信息来自 tid-only,两种范围必须在 existing_refs.kind 中明确。若 .xlsx 生成失败,任务阻断且不把原始 .xls 发送给外部渠道。