docs: 统计分析页入 spec(漏斗/趋势/分布/推送健康,逐库聚合无新表)+ 计划修 3红3黄

- Task3 TenantConfig 站点化(Site dataclass,消除与 Task5 的结构矛盾)
- Task5 拆 5a(Registry 单元级)/5b(装配切换+conftest 迁移+默认租户过渡兜底)
- conftest teardown dispose_all(Windows 文件锁)
- 提取脚本改 AST 解析(不 import 源模块);REST session 收 ?site=
- resolve=resolve_site 便捷形式注明

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-12 15:52:59 +08:00
parent 9cb6c095c9
commit befdd48c63
2 changed files with 67 additions and 20 deletions
@@ -243,6 +243,7 @@ all-kefu/
| 会话与线索 | 顶部租户切换器,看所有租户会话/画像/推送日志 | 只看自己的 |
| 配置中心 | 编辑任何租户全部配置组 | 编辑自己全部配置组(全开) |
| 站点管理 | 租户下站点增删/停用、域名绑定、门面编辑(覆盖层+继承项提示+嵌入代码含 data-site) | 同左(限自己租户) |
| 统计分析 | 全租户对比 + 单租户下钻 | 只看自己租户 |
| 版本历史 | 快照列表、两版对比、一键回滚(回滚生成新版本) | 同 |
| 平台配置 | 集团默认 AI 凭据、默认 SMTP、超管改密 | ✗ |
@@ -259,6 +260,21 @@ all-kefu/
`/api/public/brand` 用**显式字段白名单**序列化(只吐品牌字段,绝不序列化含密钥的整个配置 JSON);支持 `?site=<slug>` 返回"站点覆盖层 ⊕ 租户默认门面"的合并结果,未带或未知 site 回退租户默认;该端点被客户官网跨域 fetch,响应需带 `Access-Control-Allow-Origin: *`(与 widget.js 现行 CORS 策略一致)。
### 7.6 统计分析页(数据全部来自现有五张表,无新表)
仪表盘是速览卡片,统计页是下钻分析。内容:
- **核心卡片**:会话数、线索数(已留联系方式的会话)、高意向数、推送成功率
- **转化漏斗**:会话 → 留资 → 完成评估 → 推送成功(每级流失可见)
- **趋势图**:按日会话量/线索量(近 7/30/90 天 + 自定义区间)
- **分布**:意向三级占比、来源(widget/app)、**站点(哪个官网带来的量)**、国家 Top10(IP 归国)
- **推送健康**:success / failed / skipped / duplicated 计数
- **筛选**:时间范围 + 站点;超管可跨租户对比与单租户下钻
实现:`/api/platform/stats` 聚合端点(**逐库 SQL 聚合 + 应用层合并**,沿用"不用 ATTACH"的决定);前端用 ECharts(Element Plus 生态标配)。统计 API 归 Phase 2 平台层、页面归 Phase 3 后台——写那两份计划时据此展开任务。
二期不做:墙拦截率统计(需在消息层给墙命中做埋点,现阶段继续用 `scripts/breach_rate.py` 离线观察)。
## 8. 数据迁移
**scripts/extract_config.py**:从两个老项目提取首版配置快照,生成 seed_profiles/auto/ 与 seed_profiles/jiancai/(提示词拷 md;词表从 boundary_filter.py/conversation.py 提取正则话术转 JSON;品牌从 chat.html/widget.js/chat.js 三处硬编码 + .env 归一)。此后两个老项目只读。