# 7. 飞书通知详细设计 ## 1. 设计目标 本步骤承接风险预警和 Word 回填导出结果,目标是在飞书群聊或应用会话中完成任务触发、结果摘要查看、责任人通知和 Web 详情跳转,让注册申报审核流程具备 Web 工作台以外的协同入口。 本步骤需要完成以下业务结果: 1. 支持飞书群聊机器人触发审核任务。 2. 支持在飞书内选择任务或查看任务摘要。 3. 根据风险项和章节点映射责任角色。 4. 根据责任角色解析飞书账号。 5. 生成飞书消息摘要和 @ 通知载荷。 6. 调用飞书 OpenAPI 或 MCP 工具发送消息。 7. 记录发送结果、失败原因和回传链接。 8. 写入审计留痕。 本步骤不执行具体审核规则,不改变风险结论,不直接修改字段池或导出文件。它只负责飞书入口和通知协作。 ## 2. 所属模块与边界 ### 2.1 Chat `apps.chat` 提供 Web 详情页链接和任务执行结果页面,飞书消息中应回传 Web 详情入口。 ### 2.2 Agent Core `agent_core` 负责飞书通知编排、摘要生成、责任人映射和发送载荷构建。 本步骤建议产生以下中文 Skill: 1. `飞书通知编排Skill` 2. `飞书任务入口解析Skill` 3. `飞书责任人映射Skill` 4. `飞书消息摘要生成Skill` 5. `飞书消息发送Skill` 6. `飞书回执记录Skill` ### 2.3 MCP / OpenAPI 飞书能力通过两类方式接入: 1. 飞书机器人 / Channel SDK:作为群聊触发和消息回传入口。 2. 飞书 OpenAPI MCP:作为 Agent 调用飞书消息、文档、群聊和用户信息的工具层。 MCP 只作为外部工具接入层,不承载业务审核逻辑。 ### 2.4 Audit `apps.audit` 记录飞书触发来源、消息载荷、通知对象、发送状态和失败原因。 审计中必须保留: 1. `batch_id` 2. `scenario_id` 3. `trigger_source` 4. `feishu_chat_id` 5. `feishu_message_id` 6. `mentioned_user_ids` 7. `notification_payload` 8. `send_status` 9. `error_message` ## 3. 输入输出 ### 3.1 输入 ```json { "batch_id": 1001, "scenario_id": "registration_risk_report", "trigger_source": "feishu_group_bot", "feishu_chat_id": "oc_demo_chat", "feishu_message_id": "om_demo_message", "notify_owner": true, "include_web_link": true } ``` ### 3.2 输出 本步骤输出 `feishu_notification_report`: ```json { "report_type": "feishu_notification_report", "batch_id": 1001, "send_status": "sent", "message_type": "interactive_card", "mentioned_users": [ { "owner_role": "注册资料负责人", "feishu_user_id": "ou_demo_owner" } ], "web_detail_url": "http://localhost:8000/audit/1001/", "receipt": { "message_id": "om_demo_message", "sent_at": "2026-06-03T10:30:00+08:00" } } ``` ## 4. 主工作流 ```text 飞书群聊或 Web 触发通知 -> 解析飞书触发上下文 -> 读取风险报告和导出报告 -> 解析责任角色和飞书账号 -> 生成飞书消息摘要 -> 构建消息卡片和 @ 通知 -> 调用飞书 OpenAPI / MCP 发送 -> 记录发送回执 -> 写入审计留痕 -> 返回发送结果 ``` ## 5. 节点详细设计 ### 5.1 节点一:飞书任务入口解析 业务功能: 1. 解析飞书消息事件。 2. 识别任务指令。 3. 识别批次 ID 或项目上下文。 4. 将飞书触发请求映射到系统场景。 支持指令示例: 1. `检查资料完整性` 2. `生成风险报告` 3. `查看导出结果` 4. `通知责任人` 使用技术: 1. 飞书事件订阅 2. 群聊机器人消息 3. Django webhook view 4. 场景配置 YAML 产生方法: 1. `parse_feishu_event(event_payload) -> FeishuTriggerContext` 2. `resolve_scenario_from_command(text) -> str` 3. `resolve_batch_from_message(text, chat_context) -> int | None` 对应 Skill: 1. `飞书任务入口解析Skill` ### 5.2 节点二:通知上下文加载 业务功能: 1. 读取风险报告。 2. 读取 Word 导出报告。 3. 读取审计详情链接。 4. 读取任务状态。 使用技术: 1. Django ORM 2. JSONField 3. URL reverse 产生方法: 1. `load_notification_context(batch_id, scenario_id) -> NotificationContext` 2. `build_web_detail_url(report_or_audit) -> str` 3. `collect_notification_sources(context) -> list[dict]` 对应 Skill: 1. `飞书通知编排Skill` ### 5.3 节点三:责任人映射 业务功能: 1. 根据风险项、章节点和任务类型确定责任角色。 2. 根据责任角色查找飞书账号。 3. 支持后台或配置文件手动维护。 4. 对未配置账号的责任角色给出提示。 建议配置: ```yaml owners: CH1: owner_role: 注册资料负责人 feishu_user_id: ou_demo_owner field_conflict: owner_role: 注册资料负责人 feishu_user_id: ou_demo_owner missing_required_document: owner_role: 注册申报负责人 feishu_user_id: ou_demo_registration_owner ``` 使用技术: 1. YAML 配置 2. Django Admin 维护表 3. 飞书用户 ID 产生方法: 1. `resolve_owner_roles(risk_items) -> list[OwnerRole]` 2. `load_owner_mapping() -> OwnerMapping` 3. `resolve_feishu_user_ids(owner_roles, mapping) -> list[FeishuMentionTarget]` 对应 Skill: 1. `飞书责任人映射Skill` ### 5.4 节点四:飞书消息摘要生成 业务功能: 1. 生成风险摘要。 2. 生成高风险列表。 3. 生成导出结果摘要。 4. 生成 Web 详情链接。 5. 生成飞书交互卡片或纯文本消息。 消息内容: 1. 当前任务名称。 2. 批次名称。 3. 是否通过。 4. 最高风险等级。 5. 高风险数量。 6. 待复核数量。 7. 责任人 @。 8. Web 详情入口。 9. 导出文件链接。 使用技术: 1. 飞书互动卡片 JSON 2. 文本消息模板 3. 可选 LLM 摘要 产生方法: 1. `build_feishu_summary(context) -> FeishuSummary` 2. `build_interactive_card(summary, mentions) -> dict` 3. `build_text_message(summary, mentions) -> dict` 对应 Skill: 1. `飞书消息摘要生成Skill` ### 5.5 节点五:飞书消息发送 业务功能: 1. 调用飞书 OpenAPI 或 MCP 发送消息。 2. 支持群聊消息。 3. 支持 @ 指定责任人。 4. 捕获发送结果和失败原因。 使用技术: 1. 飞书 OpenAPI 2. 飞书机器人 3. MCP 工具封装 4. 请求重试 产生方法: 1. `send_feishu_message(chat_id, payload) -> FeishuSendResult` 2. `send_feishu_card(chat_id, card_payload) -> FeishuSendResult` 3. `retry_send_on_transient_error(request) -> FeishuSendResult` 对应 Skill: 1. `飞书消息发送Skill` ### 5.6 节点六:飞书回执记录 业务功能: 1. 保存发送状态。 2. 保存消息 ID。 3. 保存通知对象。 4. 保存失败原因。 5. 写入审计。 使用技术: 1. Django ORM 2. Audit 服务 3. JSONField 产生方法: 1. `record_feishu_receipt(result, context) -> FeishuNotificationRecord` 2. `build_feishu_audit_payload(record, context) -> dict` 3. `record_feishu_audit(payload) -> AuditLog` 对应 Skill: 1. `飞书回执记录Skill` ## 6. Skill 清单 本步骤产生以下 Skill 设计文档: 1. [飞书通知编排Skill](skill/飞书通知编排Skill.md) 2. [飞书任务入口解析Skill](skill/飞书任务入口解析Skill.md) 3. [飞书责任人映射Skill](skill/飞书责任人映射Skill.md) 4. [飞书消息摘要生成Skill](skill/飞书消息摘要生成Skill.md) 5. [飞书消息发送Skill](skill/飞书消息发送Skill.md) 6. [飞书回执记录Skill](skill/飞书回执记录Skill.md) ## 7. 消息类型设计 | 类型 | 使用场景 | |---|---| | `text` | 简单摘要和失败提示 | | `interactive_card` | 风险报告摘要、按钮和详情链接 | | `mention_text` | @ 责任人 | ## 8. 页面与飞书展示 飞书消息建议展示: 1. 任务名称。 2. 批次名称。 3. 最高风险等级。 4. 是否通过。 5. 高风险摘要。 6. 待人工复核事项。 7. 责任人 @。 8. Web 详情链接。 9. 导出文件链接。 ## 9. 异常处理 1. 飞书事件验签失败:拒绝请求。 2. 无法识别任务指令:返回帮助提示。 3. 未找到批次:返回业务提示。 4. 责任人未配置:发送群消息但不 @。 5. 飞书 API 失败:记录失败回执,可重试。 6. Web 链接生成失败:消息中省略链接并记录警告。 ## 10. 与全流程接口 本步骤读取: 1. `registration_risk_report` 2. `registration_word_export_report` 3. 审计详情链接 4. 责任人映射配置 本步骤输出: 1. `feishu_notification_report` 2. 飞书消息 ID 3. 通知状态 4. 审计记录 ## 11. 测试设计 ### 11.1 单元测试 1. 飞书事件解析。 2. 任务指令解析。 3. 责任人映射。 4. 消息摘要构建。 5. 发送 payload 构建。 ### 11.2 服务层测试 1. 风险报告可生成飞书卡片。 2. 责任人可被 @。 3. 未配置责任人时仍能发送摘要。 4. API 失败时记录失败回执。 5. 审计记录包含飞书来源。 ### 11.3 集成测试 1. 群聊机器人触发风险报告查看。 2. 群聊机器人发送责任人通知。 3. Web 链接可跳转到详情页。 ## 12. V1 实现建议 V1 建议先完成以下最小闭环: 1. 支持飞书群聊机器人接收指令。 2. 支持发送风险报告摘要。 3. 支持责任人手动配置和 @。 4. 支持 Web 详情链接。 5. 支持发送回执和审计记录。 增强阶段再补齐: 1. 飞书应用会话菜单。 2. 文档评论区 @bot。 3. 多维表格同步。 4. 飞书文档写回。 5. 消息卡片交互按钮。