fix: list unadapted XFT approval tasks safely

This commit is contained in:
2026-08-29 18:09:29 +00:00
parent b00c22d74e
commit f301cef3e8
9 changed files with 283 additions and 45 deletions
+3 -1
View File
@@ -13,7 +13,7 @@ Agent → 远程 Streamable HTTP MCP / OAuth 统一网关
## 工具
- `approval_login`:检查登录或返回唯一授权链接。
- `approval_list_todos`:实时列出本人待办,签发短期 `approvalId`,并为可安全整组处理的结果签发 `selectionId`。
- `approval_list_todos`:实时列出本人待办;薪福通不按单据类型过滤。签发短期 `approvalId`,并仅为可安全整组处理的结果签发 `selectionId`。
- `approval_list_history`:实时列出本人已经处理过或本人发起的审批;默认最近 30 天,可用 `startDate/endDate` 指定最长 120 天的时间窗口,并签发只能读取详情的短期 `approvalId`。
- `approval_get_detail`:返回摘要、结构化费用明细或受限 raw 分页。
- `approval_get_actions`:检查同意、拒绝与退回能力。
@@ -28,6 +28,8 @@ Agent → 远程 Streamable HTTP MCP / OAuth 统一网关
待办、历史和处理结果使用统一、精简的领域字段,不向 Agent 暴露钉钉任务 ID、薪福通员工号或上游原始响应。历史查询分为 `handled`(本人已经处理过)和 `submitted`(本人发起),结果没有 `selectionId` 和可执行动作。常见 `approvalId` 使用紧凑的 v4 无状态加密格式:薪福通通常约 60 字符、钉钉 OA 通常约 100 字符,并绑定当前用户和 30 分钟有效期;历史引用还绑定查询语义,只能读取详情。旧版未过期的 v2/v3 引用仍可读取。
薪福通消息中心返回且带稳定任务标识的本人待办都会进入列表。原有费用单据以及能被正式单据接口实时识别的新类型继续支持详情、同意、拒绝和退回;尚未确认接口兼容性的项目返回空 `availableActions` 与 `manualAction.reason=unsupported_xft_task_type`,只允许引导到薪福通客户端查看和处理。此类引用读取详情不会请求未验证的上游接口,动作查询全部返回禁用,批处理在预检阶段以 `provider_not_supported`、`writesStarted=false` 整批零写入;列表包含此类项目时不签发 `selectionId`。新增的能力诊断只给出数量,不额外携带任务 ID、单号、人员或正文。
一次写调用最多处理 20 条。整组同意/拒绝可直接使用 `selectionId`;超过 20 条时,Agent 可从同一次原始列表中按 `approvalId` 分组,不需要 `batchPlan`,也不能重新拉取后把新待办混入原授权。服务器在首个写入前校验整批 `approvalId` 和 `targetId`;任一引用无效时返回 `preflight_failed`、`writesStarted=false`,整批零写入且不自动补偿或重试。普通文本与结构化结果保持同一份精简数据,以兼容不渲染 `structuredContent` 的宿主。
Agent 不传 `userId`、员工号或单据所有者。网关从 OAuth Token 确定用户,再分别映射钉钉 OA 与薪福通身份。钉钉提单中的申请人和部门也由网关通过当前登录用户的通讯录档案实时填写;即使用户修改本地桥,也不能冒用他人身份或部门。