Files
sino-mci/docs/superpowers/specs/2026-07-09-system-menu-redesign-design.md

25 KiB
Raw Blame History

消息中台管理后台菜单重构与界面设计

日期2026-07-09
状态:已确认,待实现
关联文档消息与客户互动中台架构设计


1. 背景与问题

当前管理后台采用 14 项平铺菜单,功能随需求逐步叠加,导致:

  • 职责割裂:同一业务对象(如渠道账号)的初始化、状态监控、登录操作分散在不同页面。
  • 工作流不连贯:运营人员完成一次“发消息”需要跳转发送记录、测试发送、发送策略等多个平级菜单。
  • 设计不统一:部分页面是对象管理 CRUD部分是流程编排部分是工具页面缺少统一的信息架构。

本设计从三类用户(平台管理员、租户管理员/技术人员、运营人员)的实际工作流出发,重新梳理菜单层级与功能定义。


2. 设计目标

  1. 按工作流组织顶层菜单:让用户按“接入 → 客户关系 → 运营发送 → 编排流程 → 系统管理”的路径找到功能。
  2. 按业务对象聚合二级功能:同一对象(渠道账号、会话、联系人)的关联操作放在同一模块下。
  3. 明确功能边界:每个菜单项都有清晰的功能定义、面向角色和与现有页面的映射关系。
  4. 统一设计语言
    • 列表页 = 筛选 + 表格 + 顶部「新增」按钮 + 分页
    • 新增 = 弹窗/小抽屉,只填核心字段
    • 编辑/详情 = 大抽屉,基础信息区 + 标签字段 + 关联内容区
  5. 预留扩展位:钉钉/飞书/IVR 本期仅保留入口,不实现具体能力。

3. 设计决策

采用 混合式组织

  • 顶层按 工作流/职责域 划分,降低日常操作路径长度。
  • 模块内按 业务对象 分组,保持数据模型与 UI 结构一致。
  • 权限按角色控制菜单可见性,而不是为每个角色单独一套菜单。

4. 角色定义

角色 说明 典型操作
平台管理员 中台平台级管理 创建租户、维护平台角色
租户管理员 业务系统技术人员/管理员 配置渠道、管理用户、配置流程
运营人员 日常消息运营 发送、查看记录、维护联系人/群

说明:运营人员缺少部分租户内容管理,其他权限与租户管理员相同。具体可见性通过角色权限控制,不由菜单结构区分。


5. 菜单结构

5.1 一级菜单总览

一级菜单 定位 可见角色
概览 运营总览、快捷入口 全部
渠道接入 渠道资源与账号接入 租户管理员、运营人员
客户关系 联系人、会话、标签资产 租户管理员、运营人员
消息运营 发送、记录、消息查询 租户管理员、运营人员
流程编排 入站消息处理配置 租户管理员
系统管理 租户、用户、角色 平台管理员、租户管理员

5.2 概览

二级菜单 功能定义 页面/备注
运营总览 展示今日发送量、成功/失败/待发送统计、最近异常、关键指标卡片 复用并增强现有 Dashboard
快捷入口 提供常用功能的一键跳转(测试发送、发送记录、渠道账号) 新增

5.3 渠道接入

二级菜单 功能定义 页面/备注
渠道主体 维护企业在各渠道的主体信息;企微主体支持会话存档、员工/客户/群聊/会话存档同步 现有 ChannelSubject 页面增强
渠道账号 维护用于收发消息的载体账号;支持按 ID 拉取企微信息、pywechat 扫码登录、同步会话 现有 ChannelAccount 页面迁移
应用管理 企微应用的配置agent_id、agent_secret、能力验证本期只实现企微其他占位 新增

5.4 客户关系

二级菜单 功能定义 页面/备注
联系人 维护 Person详情抽屉涵盖基本信息、渠道身份、标签、所属会话 现有 Person 页面增强
会话/群聊 维护 Conversation详情抽屉涵盖基本信息、成员、收发账号绑定、标签、历史消息 现有 Conversation 页面迁移
标签体系 树形标签管理;标签用于表达角色/合同/机构/供应商等业务属性 现有 Tag 页面升级为体系化管理

5.5 消息运营

二级菜单 功能定义 页面/备注
发送记录 按任务查询发送明细、状态、结果;支持取消待发送任务;失败固定重试 2 次 现有 SendRecord 页面迁移
测试发送 模拟出站/入站消息,用于业务系统联调和发送逻辑验证 现有 MessageTest 页面迁移并改名
消息查询 聊天界面查看入站/出站消息事件,支持按会话、人员、来源筛选 新增

5.6 流程编排

二级菜单 功能定义 页面/备注
入站 Webhook 配置业务系统接收入站消息的 webhook URL、签名方式、测试连通性 现有 InboundWebhook 页面迁移
入站流程 画布配置入站消息处理流程,支持多轮上下文与槽位收集 现有 InboundFlow 页面增强

本期不做IVR 流程、发送策略配置。

5.7 系统管理

二级菜单 功能定义 页面/备注
租户管理 平台管理员创建/编辑租户;租户管理员维护本租户基础信息 现有 TenantManagement 页面增强
用户管理 中台用户增删改查、重置密码、启用/停用、绑定角色 现有 UserManagement 页面迁移
角色权限 平台角色 admin/operator/viewer 的权限配置与分配 新增

6. 现有菜单调整映射

当前菜单 调整方式 新位置
概览 保留并增强 概览 → 运营总览
渠道主体 保留并增强 渠道接入 → 渠道主体
渠道账号 拆分 渠道接入 → 渠道账号 / 应用管理
会话/群聊 保留,绑定功能移入详情 客户关系 → 会话/群聊
联系人 保留,增强 客户关系 → 联系人
标签 升级为体系 客户关系 → 标签体系
发送记录 保留 消息运营 → 发送记录
消息测试 保留,改名 消息运营 → 测试发送
发送策略 本期移除
入站流程 保留并增强 流程编排 → 入站流程
IVR 流程 本期移除
入站 Webhook 保留 流程编排 → 入站 Webhook
流程追踪 合并 消息运营 → 发送记录(详情)/ 消息查询
用户管理 保留 系统管理 → 用户管理
租户管理 保留 系统管理 → 租户管理
账号初始化 删除独立菜单 能力分散到渠道主体/账号/联系人/会话
渠道身份 删除独立菜单 并入联系人详情
账号-会话绑定 删除独立菜单 并入会话详情

7. 统一页面设计语言

7.1 列表页

  • 顶部筛选区(可折叠)
  • 右上角「新增」按钮
  • 表格展示核心字段 + 标签 + 关联数量
  • 行内操作:编辑 / 详情 / 删除 / 启用禁用
  • 底部分页

7.2 新增

  • 弹窗或小抽屉
  • 只收集创建必需的字段
  • 创建成功后刷新列表

7.3 编辑/详情

  • 大抽屉
  • 基础信息区(可编辑)
  • 标签字段(树形多选,随基础信息一起保存)
  • 关联内容区(只读列表 + 快捷操作)
  • 不同对象按自身关联内容展示,不拆成多个 Tab

8. 渠道接入模块详细设计

8.1 渠道主体

列表字段

字段 说明
渠道 wecom / dingtalk / feishu本期仅 wecom 可用)
主体编码 subject_code
主体名称 subject_name
CorpID corp_id
会话存档 开启 / 关闭
状态 启用 / 禁用
操作 编辑 / 详情 / 删除 / 启用禁用

新增/编辑

  • 渠道类型
  • 主体编码
  • 主体名称
  • CorpID
  • CorpSecret通讯录同步 secret
  • AgentID
  • AgentSecret
  • 会话存档开关
  • 会话存档 RSA 私钥

详情抽屉(企微能力区)

能力 所需凭证 操作
验证主体连通 corp_id + corp_secret 点击验证
同步企业员工 corp_id + corp_secret 拉取通讯录,写入 mci_person + mci_channel_identity + department_path
同步客户/客户群 主体下配置的企微应用 agent_secret 拉取外部联系人和客户群
同步会话存档 应用管理中配置的会话存档应用 secret 用 Finance SDK 拉取最近消息

每个能力执行后展示状态、上次执行时间、成功/失败数量、错误信息,并写入 mci_channel_subject_sync_task 日志表。

8.2 渠道账号

列表字段

字段 说明
账号类型 企微内部账号 / 企微应用 / pywechat 个人号
渠道 wecom / wechat_personal
账号 ID account_id
名称 account_name
所属主体 subject_name
登录状态 已登录 / 未登录
在线状态 在线 / 离线
状态 启用 / 禁用
操作 编辑 / 删除 / 启用禁用 / 初始化 / 同步会话

企微内部账号

  • 创建/编辑时输入 userid 后,可点击「从企微拉取」回填姓名、部门信息
  • 会话存档开关(标记该员工是否开启存档)

企微应用

  • 应用凭证在「应用管理」维护
  • 渠道账号中创建时选择应用,自动带出 agent_id
  • 提供「验证应用」按钮

pywechat 个人号

  • 创建时填写 wxid / bot_codeserver_host
  • 行操作「扫码登录」:返回二维码,轮询登录状态
  • 行操作「同步会话」:拉取该个人号所在群聊

8.3 应用管理

列表字段

字段 说明
应用名称 app_name
应用类型 wecom / wecom_session_archive / dingtalk / feishu
agent_id 企微应用 ID
所属主体 subject_name
状态 启用 / 禁用
操作 编辑 / 验证 / 删除 / 启用禁用

新增/编辑

  • 应用名称
  • 所属主体
  • 应用类型
  • agent_id
  • agent_secret
  • 状态

操作

  • 验证并获取能力:用 corp_id + agent_id + agent_secret 获取 access_token验证通过更新状态
  • 钉钉/飞书应用仅保留表单入口,验证按钮禁用

9. 客户关系模块详细设计

9.1 联系人

列表字段

字段 说明
人员编码 person_code
姓名 person_name
手机号 phone
类型 内部人员 / 供应商人员 / 客户 / 司机
所属机构 institution_id 名称
部门路径 多个标签式展示
标签 直接展示绑定的标签
渠道身份数 几个渠道身份
参与会话数 该人员在多少个会话中
状态 启用 / 禁用
操作 编辑 / 详情 / 删除 / 启用禁用

新增

弹窗字段:

  • 人员编码
  • 姓名
  • 手机号
  • 类型
  • 所属机构
  • 状态

编辑/详情抽屉

基础信息区

  • 人员编码、姓名、手机号
  • 类型
  • 所属机构、供应商、合同
  • 部门路径(支持多条)
  • 状态

标签字段

  • 树形多选,已选标签平铺展示

渠道身份区

  • 列表展示所有渠道身份
  • 行内新增 / 编辑 / 删除
  • 新增时:选择渠道 → 选择主体 → 输入渠道用户 ID → 「拉取企微信息」回填昵称

所属会话区

  • 展示该人员参与的会话列表
  • 点击会话名称打开会话详情抽屉

9.2 会话/群聊

列表字段

字段 说明
会话类型 单聊 / 群聊
渠道 wecom / wechat_personal
渠道会话 ID channel_conversation_id
会话名称 conversation_name
群主/负责人 owner_account_id 名称
所属主体 subject_id 名称
标签 直接展示
成员数 群聊显示成员数量
业务绑定 机构 / 供应商 / 合同 / 渠道编码
状态 启用 / 禁用
操作 编辑 / 详情 / 删除 / 同步成员

新增

弹窗字段:

  • 会话类型
  • 渠道
  • 所属主体
  • 渠道会话 ID
  • 会话名称
  • 负责人账号
  • 状态

编辑/详情抽屉

基础信息区

  • 会话类型、渠道、所属主体
  • 渠道会话 ID、会话名称
  • 负责人账号
  • 关联机构 / 供应商 / 合同 / 渠道编码
  • 状态

标签字段

  • 树形多选

成员区

  • 列表展示 mci_conversation_participant
  • 字段:人员姓名、渠道身份、角色
  • 操作:同步成员、移除
  • 人员名称可点击进入联系人详情

收发账号绑定区

  • 展示发送主号 / 发送备用号 / 接收主号 / 接收备用号
  • 行内新增、编辑优先级、删除
  • 单聊限制:只能绑定同 channel_type 的账号
  • 群聊允许跨渠道绑定,但给出提示

历史消息区

  • 展示该会话最近消息列表
  • 可跳转消息查询页面

9.3 标签体系

列表字段

字段 说明
标签名 tag_name
路径 tag_path
层级 level
来源 system / business_sync / manual
状态 启用 / 禁用
关联人员数 使用数量
关联会话数 使用数量
操作 新增子标签 / 编辑 / 删除 / 启用禁用

新增/编辑

弹窗字段:

  • 标签名
  • 父标签(树形选择,顶级为根)
  • 来源
  • 状态

详情抽屉

  • 标签基本信息
  • 关联人员列表(分页)
  • 关联会话列表(分页)

10. 消息运营模块详细设计

10.1 发送记录

页面结构

  • 顶部统计卡片:今日发送总数 / 成功 / 失败 / 待发送
  • 筛选区:任务 ID、发送时间、渠道、状态、目标类型
  • 记录列表
  • 详情抽屉

列表字段

字段 说明
任务 ID task_id
目标类型 单人会话 / 群聊 / 人员 / 标签 / 规则
目标摘要 会话名称 / 人员姓名 / 标签名 / 规则描述
渠道 wecom / wechat_personal
发送账号 实际使用的账号名称
状态 待发送 / 发送中 / 成功 / 失败
发送时间 send_time
完成时间 finish_time
操作 详情 / 取消(仅待发送)

详情抽屉

  • 基础信息:任务 ID、目标、渠道、发送账号、内容摘要
  • 内容区:完整 content_body
  • 策略与回调:channel_strategycallback_url
  • 渠道结果:channel_result 格式化展示
  • 关联跳转:会话 / 人员 / 账号 / 消息事件
  • 时间线:创建 → 发送中 → 完成 / 失败

失败固定重试 2 次,由后端策略处理,前台不配置。

10.2 测试发送

工具型页面,两个 Tab

Tab 1出站测试

字段 说明
目标类型 会话 / 人员 / 标签 / 规则
目标 根据类型选择或输入
内容类型 text / markdown / image / file / news 等
内容 对应内容编辑器
渠道策略 优先渠道、备用渠道
回调地址 可选

点击「发送测试」后展示返回的 task_id,并刷新发送记录。

Tab 2入站模拟

字段 说明
事件 ID 自定义事件 ID
渠道类型 wecom / wechat_personal
消息来源 realtime / session_archive
会话 ID 选择已有会话
发送人 选择人员或输入 channel_user_id
接收账号 选择接收账号
内容类型 text / image / voice 等
内容 消息内容

点击「模拟入站」后触发入站流程编排,展示处理结果。

10.3 消息查询

页面布局

三栏式聊天界面:

┌─────────────┬─────────────────────┬─────────────┐
│  会话列表    │      聊天内容        │  会话信息    │
│  搜索/筛选   │                     │  成员/标签   │
└─────────────┴─────────────────────┴─────────────┘

左侧:会话列表

  • 按时间倒序展示会话
  • 每个会话卡片:会话名称、最后一条消息预览、最后消息时间、标签小圆点
  • 搜索:会话名称、成员姓名、消息内容
  • 筛选:渠道、消息来源(实时/会话存档)、会话类型、标签

中间:聊天内容区

  • 按时间顺序展示消息气泡
  • 区分入站消息(左侧)、出站消息(右侧)、系统事件(中间)
  • 根据 msgtype 渲染:文本、图片、语音、视频、文件、撤回提示等
  • 支持按时间范围筛选,滚动加载历史消息

右侧:会话信息

  • 基础信息:会话名称、渠道、来源、群主
  • 业务绑定:机构 / 供应商 / 合同 / 渠道编码
  • 标签:直接展示,可编辑
  • 成员列表
  • 快捷操作:查看发送记录、跳转联系人详情、同步成员

11. 流程编排模块详细设计

11.1 入站 Webhook

每个租户独立配置一个入站推送地址。

页面内容

字段 说明
Webhook URL 业务系统接收中台入站消息的地址
签名算法 HMAC-SHA256 / HMAC-SHA512 / 无
Webhook Secret 签名密钥
超时时间 推送超时秒数,默认 10s
失败重试 固定重试 2 次

操作

  • 保存
  • 测试推送
  • 查看最近推送日志(状态、响应码、响应摘要)

这是流程中 Webhook 节点的默认推送地址,只有流程走到该节点才会触发。

11.2 入站流程

页面布局

保留三栏画布:

┌────────────┬─────────────────────────┬────────────┐
│  流程列表   │       流程画布           │  节点配置   │
│  组件面板   │                         │            │
└────────────┴─────────────────────────┴────────────┘

流程节点

节点 作用
接收消息 流程入口,指定渠道
加载上下文 读取当前会话已有的 intent / slots / 轮次
意图识别 LLM / 规则识别本轮意图和槽位
合并槽位 把本轮新槽位合并到会话上下文
槽位校验 检查必需槽位是否齐全
自动追问 缺槽位时自动生成追问文案并回复
Webhook 槽位齐全后推送给业务系统
回复消息 可配置固定回复
保存上下文 把更新后的 intent / slots 写回
清空上下文 Webhook 成功后结束当前会话

多轮流程示例

接收消息
  │
  ▼
加载上下文
  │
  ▼
意图识别(结合上下文)
  │
  ▼
合并槽位
  │
  ▼
槽位校验
  ├─ 缺槽位 ──▶ 自动追问 ──▶ 保存上下文 ──▶ 结束
  │
  └─ 槽位齐全 ──▶ Webhook ──▶ 回复客户 ──▶ 清空上下文 ──▶ 结束

上下文存储

新增 mci_conversation_context 表:

字段 说明
conversation_id 会话 ID
intent 当前意图
slots JSON已收集槽位
missing_slots JSON还缺哪些槽位
turn_count 当前轮次
status collecting / complete / expired
expire_time 上下文过期时间
update_time 最后更新时间

超过一定时间(如 10 分钟)无新消息,上下文自动过期。


12. 系统管理模块详细设计

12.1 租户管理

列表字段

字段 说明
租户编码 tenant_code
租户名称 tenant_name
状态 启用 / 禁用
用户数量 该租户下用户总数
创建时间 create_time
操作 编辑 / 删除 / 启用禁用

平台管理员:可操作全部租户。
租户管理员:只能查看/编辑本租户,不可删除。

新增(仅平台管理员)

  • 租户编码
  • 租户名称
  • 入站 Webhook URL
  • 初始化管理员账号(默认 admin
  • 初始化管理员密码
  • 状态

创建成功后自动创建该租户的第一个管理员用户。

编辑

  • 租户名称
  • 入站 Webhook URL
  • 状态

默认租户(如 platform)不可删除。

12.2 用户管理

列表字段

字段 说明
用户名 username
真实姓名 real_name
手机号 phone
所属租户 tenant_name(平台管理员可见)
角色 角色名称,多个用逗号
状态 启用 / 禁用
创建时间 create_time
操作 编辑 / 重置密码 / 删除 / 启用禁用

新增

  • 所属租户(平台管理员选择,租户管理员固定为本租户)
  • 用户名
  • 密码
  • 真实姓名
  • 手机号
  • 角色(多选)
  • 状态

编辑

可编辑:真实姓名、手机号、角色、状态。
不可编辑:用户名、所属租户。

12.3 角色权限

列表字段

字段 说明
角色编码 role_code
角色名称 role_name
权限数量 已配置的权限项数
状态 启用 / 禁用
操作 配置权限 / 启用禁用

首期固定角色

角色编码 角色名称 默认权限
platform_admin 平台管理员 全部权限
admin 租户管理员 除租户创建外的全部权限
operator 运营人员 发送、查看记录、维护联系人/会话、配置渠道账号
viewer 只读用户 仅查看发送记录、统计、消息查询

权限配置

抽屉中展示权限树:

□ 全部
  □ 概览
    □ 查看
  □ 渠道接入
    □ 渠道主体(查看 / 新增 / 编辑 / 删除)
    □ 渠道账号(查看 / 新增 / 编辑 / 删除)
    □ 应用管理(查看 / 新增 / 编辑 / 删除)
  □ 客户关系
    □ 联系人(查看 / 新增 / 编辑 / 删除)
    □ 会话/群聊(查看 / 新增 / 编辑 / 删除)
    □ 标签体系(查看 / 新增 / 编辑 / 删除)
  □ 消息运营
    □ 发送记录(查看 / 取消)
    □ 测试发送
    □ 消息查询
  □ 流程编排
    □ 入站 Webhook查看 / 编辑)
    □ 入站流程(查看 / 新增 / 编辑 / 删除 / 发布)
  □ 系统管理
    □ 租户管理(查看 / 新增 / 编辑 / 删除)
    □ 用户管理(查看 / 新增 / 编辑 / 删除 / 重置密码)
    □ 角色权限(查看 / 配置)

保存后同步到 mci_platform_role 表的 permissions JSON。

12.4 全局管理员登录

  • 默认创建 platform 租户
  • 通过 Flyway 初始化 admin 用户,角色 platform_admin
  • 初始密码在配置文件中设置,首次登录强制修改

13. 数据模型补充

13.1 新增/调整字段

字段 类型 说明
mci_person department_path JSON 多个部门路径,如 ["销售中心/销售一部", "销售中心/华北组"]
mci_channel_subject_sync_task 新表 记录各渠道主体同步任务
mci_conversation_context 新表 入站流程多轮会话上下文

13.2 同步任务日志表

mci_channel_subject_sync_task

字段 说明
subject_id 渠道主体 ID
sync_type employee / external_contact / group / session_archive
status 0待执行 1执行中 2成功 3失败
total_count 总数
success_count 成功数
fail_count 失败数
error_msg 错误信息
create_time / finish_time 时间

14. 不在本期范围内的功能

功能 原因
IVR 流程 属于 2092 IVR 语音配置需求
发送策略配置 本期失败固定重试 2 次,不开放前台配置
模板管理 中台不保存模板
业务触发规则 中台不承载业务系统触发规则
钉钉/飞书具体能力 仅保留入口

15. 实现要点

  1. 前端路由:按新菜单结构重排 admin-web/src/router/index.ts
  2. 布局组件Layout.vue 从平铺 el-menu-item 改为分组 el-sub-menu
  3. 权限控制:菜单可见性通过 authStore.roleCodes 或后端返回的权限列表控制。
  4. 页面拆分与合并
    • 删除 ChannelAccountInit.vue 独立页面
    • 删除独立的渠道身份、账号-会话绑定页面
    • Conversation.vue 增强详情抽屉,包含绑定功能
    • Person.vue 增强详情抽屉,包含渠道身份
  5. 消息查询:新增聊天界面组件。
  6. 入站流程:增强节点配置,新增上下文存储能力。
  7. 空状态处理:新增页面先实现最小可用版本。

16. 验收标准

  • 左侧导航按新 6 大模块分组展示,无 IVR 流程、发送策略、账号初始化入口。
  • 每个二级菜单有明确页面,无 404。
  • 租户管理员、运营人员、平台管理员看到的菜单符合角色定义。
  • 联系人、会话详情抽屉涵盖所有关联内容。
  • 标签在列表和编辑表单中直接展示/编辑。
  • 消息查询实现聊天界面。
  • 入站流程支持多轮上下文与槽位收集。
  • 现有功能在迁移后行为保持一致。