DASHBOARD-DEV-LOG.md 15 KB

Qiwei Dashboard 开发过程记录

本文保留早期开发过程。当前能力以“2026-07 经营驾驶舱与行动闭环”一节、skills/qiwei-dashboard/SKILL.md 和实际 Dashboard 为准;后续“尚未实现”“Plan 修改建议”属于历史记录,不再代表当前版本状态。

2026-07 经营驾驶舱与行动闭环

经营总览

  • 默认入口调整为 #overview,导航按经营驾驶舱、数字岗位、业务资产和系统重组。
  • 汇总客户、社群、客服和交易数据边界,展示今日行动、运营健康度和数字员工状态。
  • 支持自然语言经营问题和预设诊断入口;后端失败时允许前端规则降级,但不得伪造订单、成交、复购或 GMV 结论。

经营诊断

  • MCP 工具:qiwei_business_diagnosis
  • Dashboard API:POST /api/business-diagnosis
  • 输出结论、证据、数据缺口和可下钻动作;交易数据未接入时明确返回无法判断。
  • 对应 Skill:skills/qiwei-business-diagnosis/

诊断建议进入行动中心

  • MCP 工具:qiwei_business_action_candidate
  • Dashboard API:POST /api/knowledge/tasks/diagnosis-candidate
  • 诊断建议默认只进入候选池,按稳定来源键去重;必须人工点击“确认并转为任务”后才生成正式内部任务。
  • 候选、正式任务和企微官方待办保持不同状态,不自动发送客户消息或同步真实待办。

行动效果反馈

  • MCP 工具:qiwei_business_action_feedback
  • Dashboard API:POST /api/knowledge/tasks/diagnosis-feedback
  • 生命周期记录 createdpromotedcompleted / dismissedoutcome_recorded
  • 仅已完成的诊断来源正式任务可记录 effectivepartially_effectiveineffectiveunknown,并可附带内部复盘依据。
  • 统一任务中心展示候选数、采纳数/采纳率、完成数、验证有效数/有效率;没有有效分母时显示未知,不伪造为 0%

Dashboard 适配与验证

  • 支持桌面与移动端布局、侧栏遮罩和静态资源版本控制。
  • 任务中心在 1440px 双栏工作区不产生横向滚动;移动端反馈选项保持至少 44px 点击高度。
  • 发布检查覆盖 19 个 Skills、91 个 MCP 工具和 15 组隔离检查;诊断行动闭环 smoke test 覆盖候选创建、去重、晋升、完成、反馈和汇总指标。

项目背景

claude-code/claude-code-qiwe-assistant 项目构建一个本地 Web Dashboard,让用户可以通过浏览器直观地完成企微核心能力的操作,降低纯对话调用的门槛。第一期聚焦在客户群管理模块,同时搭建好账号状态、登录恢复等公共基础设施。

已完成的模块

1. Dashboard 基础设施

  • HTTP 桥接服务mcp/src/dashboard/server.js

    • 静态资源服务(HTML/CSS/JS)
    • REST API 路由封装
    • 异步 Job 队列(createJob / getJob
    • 文件上传与下载(/api/upload/api/outputs
    • 状态汇总接口(/api/status
    • 登录相关接口(/api/login/start/api/login/check/api/login/verify
    • 群管理接口(/api/groups/*
    • 客户运营接口(新增)/api/customer-ops/*
    • 画像与标签接口(新增)/api/portraits/*/api/tags/*/api/personal-labels/*
    • 客户交接接口(新增)/api/transfers/*
  • 前端 SPA 骨架mcp/src/dashboard/index.html

    • 侧边栏导航、顶部账号切换器、主内容区、Toast 容器
    • 新增导航项(客户运营、画像与标签、客户交接)
  • 前端逻辑mcp/src/dashboard/app.js

    • 路由(hash 路由:#groups#status#customer-ops#portraits#transfers
    • API 客户端封装
    • 状态管理(内存 + localStorage)
    • 公共组件:Toast、Modal、Job Tracker、Account Switcher
    • 新增页面渲染器renderCustomerOpsPagerenderPortraitsPagerenderTransfersPage
  • 样式系统mcp/src/dashboard/styles.css

    • 复用企微品牌色(#fa8c16
    • 卡片、表格、表单、按钮、Badge、进度条、骨架屏、动画
  • 启动入口scripts/start-dashboard.js

  • 文档skills/qiwei-dashboard/SKILL.mdREADME.md Dashboard 章节

2. 账号状态模块

实现位置:app.jsrenderStatusPageattemptAutoRecoverrecoverLoginsyncAccountOnlineStatus 等函数。

  • 显示当前账号在线/离线状态、订阅状态、鉴权配置状态
  • 离线恢复登录按钮:账号离线时显示「恢复登录」按钮
  • 自动恢复登录:检测到离线且 statusCode === 0(设备已配置)时,自动调用 /api/login/check?manual=true 尝试免扫码恢复
  • 手动恢复时若无法免扫码,自动生成二维码/验证码流程
  • 已保存账号状态同步:修复了已保存账号表格状态与当前状态不一致的问题

3. 客户群管理模块

实现位置:app.jsrenderGroupsPagerenderGroupTablerenderGroupSyncCardbindGroupSyncbindGroupFiltersbindGroupTableActionsconfirmGroupbatchConfirmGroupssyncGroupMessagesopenGroupDetailModal 等函数。

群列表展示

  • 表格展示:群名、人数、识别结果、置信度、消息同步状态、命中关键词、操作
  • 空状态提示
  • 搜索过滤(按群名/roomId)
  • 状态过滤(全部、自动确认、建议确认、已确认、已忽略)
  • 显示切换按钮:「只看可能的客户群」/「展示全部状态的群聊」,默认展示全部群聊

扫描客户群

  • 扫描范围:全部群、我创建的群、最近聊天里的群、从消息记录里找群
  • 扫描深度(分页数)
  • 客户群关键词、高置信度词配置
  • 自动识别客户群开关
  • 异步 Job 执行扫描,实时进度条
  • 扫描结果统计卡片:扫描群数、自动确认、建议确认、普通群、已确认、已忽略

批量操作

  • 全选本页/单选
  • 批量确认为客户群:直接调用 confirm API,不弹窗
  • 批量同步选中群消息

单行操作

  • 确认:直接确认为客户群(不弹窗)
  • 忽略:弹出原因输入框
  • 同步消息:同步单个群消息
  • 群详情(仅已确认群):查看/编辑客户信息

客户信息自动识别

  • 后端 qiwei-group-management-run.jscreateRoomRecord 现在保存群成员列表
  • 已确认群的「群详情」弹窗会自动从成员列表中识别客户:
    • 优先选择 type === 2 的外部联系人
    • 无明确标识时排除常见内部角色后取第一个
    • 自动预填充客户姓名和客户企微 ID
  • 用户可在弹窗中修改客户信息并保存

消息同步状态持久化

  • 已同步消息的群状态保存在 localStorage
  • 修复了刷新页面后同步状态丢失的问题(移除了账号离线时清空同步状态的逻辑)

4. 客户运营模块(新增)

实现位置:app.jsrenderCustomerOpsPagebindCustomerOpsPage 及相关渲染函数。

批量加好友

  • 文本导入:每行 13800138000 张三,自动解析为可编辑表格
  • Excel 上传:通过 /api/upload 保存后读取 customers 列表追加到表格
  • 默认验证消息模板,支持 {{name}}{{phone}} 变量
  • 表格中每行可单独编辑姓名和验证消息,留空则使用默认模板
  • 顶部实时预览第一条验证消息
  • 执行设置:每分钟速率限制(1-60)、最大重试次数(1-5)
  • 异步 Job 执行,结果展示统计卡片 + 明细表格

好友状态检查

  • 输入手机号列表,异步 Job 执行
  • 结果展示:已确认、待通过、未找到统计 + 明细表格
  • 状态徽标:已是好友、已被其他人添加、未添加、未找到

客户档案

  • 通过手机号或 externalUserId 查询
  • 展示 externalUserId、匹配联系人、相关群、本地画像

自动建群

  • 输入成员 externalUserId、群名、协作成员、欢迎语
  • 异步 Job 执行建群
  • 展示 roomId、群名、成员数、协作成员邀请状态、欢迎语发送状态

5. 画像与标签模块(新增)

实现位置:app.jsrenderPortraitsPagebindPortraitsPage 及相关渲染函数。

客户画像

  • 关键词模式:直接生成并保存画像
  • AI 分析模式:生成 context 文件,可下载后人工分析
  • 手动保存画像 JSON:通过 prompt 输入 JSON 后保存

批量画像

  • 输入多个 externalUserId,关键词模式批量生成

导出画像

  • 异步 Job 导出全部本地画像为 Excel
  • 结果提供下载链接

本地标签

  • 按客户添加/移除/查询标签
  • 查看全部去重标签

企微个人标签

  • 同步企微个人标签列表
  • 创建/更新/删除个人标签
  • 应用标签到指定客户

6. 客户交接模块(新增)

实现位置:app.jsrenderTransfersPagebindTransfersPage 及相关渲染函数。

  • 输入 fromUserId / toUserId
  • 支持通过 externalUserIds 或已确认群 roomIds 指定客户
  • 生成交接包预览文件,展示明细列表
  • 执行交接:可移除原顾问、设置欢迎语
  • 结果展示成功/失败/跳过统计与明细

7. Bug 修复与体验优化

问题 修复
账号状态页「已保存账号」状态与当前在线状态不一致 新增 syncAccountOnlineStatus,在渲染表格前先同步状态
刷新页面后已同步消息群显示「未同步」 移除 checkExistingLogin 中的 resetSyncedGroups() 无条件清空逻辑
账号离线时点击「扫描客户群」提示不明确 增加离线拦截,提示先恢复登录并跳转到状态页
离线时点击「同步消息」也会失败 同样增加离线拦截
Dashboard 从错误目录启动导致「网络请求失败」 在 README 和 Skill 文档中明确必须在项目目录下启动

尚未实现的内容(对比原始 plan)

原始 plan 中提到的以下模块已在本轮实现:

  • 客户运营:批量加好友、检查好友状态、客户档案、自动建群
  • 画像与标签:客户画像、本地标签、企微个人标签
  • 客户交接:交接包预览、执行交接

当前尚未实现的扩展模块:

  • API Catalog
  • 语音转写
  • Webhook & Relay
  • 顾问 Playbook

当前 Dashboard 已完成 plan 中「系统状态」、「群管理」、「客户运营」、「画像与标签」、「客户交接」五个模块的核心功能。

与原始 plan 的差异

客户运营模块实现与 plan 的差异

  1. Excel 上传流程

    • Plan:前端直接解析 Excel。
    • 实际:前端通过 /api/upload 上传文件拿到路径后,调用 qiweiBatchAddFriends 读取 Excel 并追加到表格。这样复用了后端已有的 readCustomersFromExcel 逻辑。
  2. 客户档案查询

    • Plan:仅提及输入手机号查询。
    • 实际:同时支持手机号或 externalUserId 查询。

群管理模块实现与 plan 的差异

  1. 确认客户群流程

    • Plan:未明确描述确认流程细节
    • 实际:单个/批量确认均不弹窗,确认后才通过「群详情」编辑客户信息
  2. 客户信息自动识别

    • Plan:未提及
    • 实际:基于群成员列表自动识别外部联系人并预填充客户信息
  3. 关键词配置

    • Plan:独立的「关键词配置」折叠面板
    • 实际:关键词配置集成在「扫描客户群」卡片中
  4. 同步群消息

    • Plan:支持多选已确认群或「全部已确认群」,设置分页和每群消息上限
    • 实际:支持多选已确认群批量同步,但暂不支持「全部已确认群」一键同步和分页设置
  5. 群列表默认展示

    • Plan:未明确默认过滤行为
    • 实际:默认展示全部群聊,可通过按钮切换为「只看可能的客户群」
  6. 添加已创建客户群按钮

    • Plan:未明确
    • 实际:曾经实现后已删除

Plan 修改建议

基于当前已完成的群管理模块,原始 plan 应在以下方面更新:

  1. 群管理确认流程需要明确

    • 当前 plan 只写「行操作包括确认、拒绝、分析、同步消息」,未说明确认时是否弹窗、是否需要填写客户信息。
    • 建议改为:「确认」操作不弹窗,直接标记为客户群;客户信息在确认后通过「群详情」编辑,并支持自动识别。
  2. 新增「客户信息自动识别」功能

    • 当前 plan 完全未提及。
    • 建议在群管理交互中增加:已确认群支持查看群成员,系统自动识别外部联系人并预填充客户姓名和企微 ID。
  3. 关键词配置位置调整

    • Plan 中写「关键词配置折叠面板」。
    • 实际实现中关键词配置集成在「扫描客户群」卡片内,以减少页面切换。Plan 应更新为「扫描客户群卡片内包含关键词/高置信度词输入」。
  4. 同步群消息范围调整

    • Plan 写「多选已确认群或全部已确认群,设置分页和每群消息上限」。
    • 当前仅实现「多选已确认群」批量同步。Plan 可拆分为已实现和后续增强:
      • 已实现:多选已确认群批量同步
      • 待实现:「全部已确认群」一键同步、分页/每群上限设置
  5. 群列表默认展示状态

    • Plan 未明确默认过滤行为。
    • 建议补充:默认展示全部扫描到的群聊,提供按钮切换为「只看可能的客户群」。
  6. 系统状态模块补充

    • Plan 中系统状态只写「登录状态、订阅状态、全局 guid 输入」。
    • 实际已实现:离线恢复登录按钮、自动恢复登录、已保存账号列表及状态同步。Plan 应补充这些功能。
  7. 新增文件清单修正

    • Plan 中列出 mcp/src/dashboard/pages.js(可选拆分)。
    • 当前未拆分,app.js 约 1300 行仍可维护。建议从 plan 中移除或标注为「未拆分」。
  8. 范围与优先级调整

    • 当前实际只完成了系统状态 + 群管理。建议把客户运营、画像标签、客户交接明确标注为「待实现/第二期」,避免与实际进度混淆。
  9. 新增验证项

    • Plan 的验证方案中应增加:
      • 账号离线时恢复登录按钮可用
      • 自动恢复登录成功/失败场景
      • 已同步消息状态刷新后保留
      • 批量确认客户群和群详情编辑
  10. 移除「添加已创建客户群」按钮

    • 实际开发中曾实现该按钮,后已删除。Plan 中如提到手动添加群,应说明通过业务工具或后续在群列表中提供入口。

后续建议

  1. 群管理可补充「全部已确认群一键同步消息」和同步参数设置
  2. 客户信息自动识别可进一步优化:结合群名正则、AI 分析群消息等多维度识别
  3. 客户运营可补充「从已确认群批量导入客户」功能
  4. 画像模块可接入 Claude API 自动分析 context 文件并保存
  5. 增加 Dashboard 的使用统计和错误日志收集
  6. 按需扩展 API Catalog、语音转写、Webhook & Relay、顾问 Playbook 等模块