Files
freedakgmail 5926c73ff1 微信营销管理系统 - 益童宝销售管理平台
- 数据库: PostgreSQL schema + 3名销售/21客户/341消息/6成交
- 采集代理: mock_sync.py 模拟微信聊天同步
- AI分析: analyze.py 规则模式 + 千问LLM模式
- 后端: FastAPI 11个API接口
- 前端: 仪表盘/销售列表/客户列表/成交记录/交流分析/录入成交
- 交流分析: 全部客户对话概览 + LLM标准范式对话生成
- 部署: systemd + nginx, 已部署至 sale.all8ai.top
2026-07-14 22:31:29 +08:00

401 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 微信营销管理系统 MVP 方案
> 文档日期:2026-07-14
> 定位:最小可用产品,验证"微信聊天数据 → 客户与沟通记录 → 成交关联"的核心闭环
---
## 一、MVP 目标
用最简路径完成一件事:**把每个销售的微信聊天采集到中央数据库,AI 分析出客户和沟通记录,成交数据手动录入,形成"沟通→成交"的证据链。**
不做的事:
- 不做培训对练
- 不做 AI 自动回复
- 不做多租户
- 不做实时同步
- 不做复杂权限体系
---
## 二、MVP 范围
### 2.1 核心流程
```text
销售设备本机采集微信数据
→ 传输到中央数据库
→ AI 识别客户、提取沟通记录
→ 销售手动录入成交数据
→ 关联聊天与成交
→ 基础报表
```
### 2.2 支持规模
- 35 名销售
- 每人 1 个微信号
- 每日离线同步(复用现有 launchd 机制)
- 单台中央 PostgreSQL
---
## 三、系统架构
```text
销售设备 A (macOS) 销售设备 B (macOS) 销售设备 C (macOS)
本机微信数据库采集 本机微信数据库采集 本机微信数据库采集
采集代理脚本 采集代理脚本 采集代理脚本
│ │ │
└──────────────┬───────────┘──────────────────────────┘
中央 PostgreSQL
(wechat_sales_db)
AI 分析服务
(客户识别 + 沟通摘要)
Web 管理后台
(客户列表 / 聊天记录 / 成交录入 / 报表)
```
---
## 四、数据模型
MVP 只建 6 张核心表,不搞复杂实体关系。
### 4.1 salesperson — 销售人员
```sql
CREATE TABLE salesperson (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
team TEXT,
wx_account TEXT NOT NULL, -- 绑定的微信号
device_id TEXT, -- 采集设备标识
created_at TIMESTAMPTZ DEFAULT now()
);
```
### 4.2 contact — 联系人(微信好友)
```sql
CREATE TABLE contact (
id SERIAL PRIMARY KEY,
salesperson_id INT NOT NULL REFERENCES salesperson(id),
wx_username TEXT NOT NULL, -- 微信内部 ID
nickname TEXT, -- 昵称
remark TEXT, -- 备注
display_name TEXT, -- 计算字段:备注优先,其次昵称
is_group BOOLEAN DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT now(),
UNIQUE(salesperson_id, wx_username)
);
```
### 4.3 conversation — 会话
```sql
CREATE TABLE conversation (
id SERIAL PRIMARY KEY,
salesperson_id INT NOT NULL REFERENCES salesperson(id),
contact_id INT REFERENCES contact(id),
wx_chatroom TEXT, -- 群聊标识(群聊时用)
conv_type TEXT NOT NULL, -- 'single' | 'group'
last_synced_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT now()
);
```
### 4.4 message — 消息
```sql
CREATE TABLE message (
id BIGSERIAL PRIMARY KEY,
salesperson_id INT NOT NULL REFERENCES salesperson(id),
conversation_id INT NOT NULL REFERENCES conversation(id),
sender_wx_username TEXT NOT NULL,
sender_display_name TEXT,
message_type TEXT NOT NULL, -- text/image/voice/video/file/emoji/link/quote
raw_content TEXT,
normalized_content TEXT, -- 清洗后可读内容
created_at TIMESTAMPTZ NOT NULL,
source_shard TEXT,
source_table TEXT,
source_local_id BIGINT,
UNIQUE(source_shard, source_table, source_local_id)
);
CREATE INDEX idx_message_conv_time ON message(conversation_id, created_at);
CREATE INDEX idx_message_salesperson ON message(salesperson_id);
```
### 4.5 customer — 客户(AI 从联系人中识别)
```sql
CREATE TABLE customer (
id SERIAL PRIMARY KEY,
salesperson_id INT NOT NULL REFERENCES salesperson(id),
contact_id INT NOT NULL REFERENCES contact(id),
customer_name TEXT, -- AI 识别的客户名称
industry TEXT, -- AI 推断行业
intent_level TEXT, -- high/medium/low/none
key_needs TEXT[], -- AI 提取的关键需求
last_analysis TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT now(),
UNIQUE(salesperson_id, contact_id)
);
```
### 4.6 deal — 成交记录(手动录入)
```sql
CREATE TABLE deal (
id SERIAL PRIMARY KEY,
salesperson_id INT NOT NULL REFERENCES salesperson(id),
customer_id INT REFERENCES customer(id),
contact_id INT REFERENCES contact(id),
product_name TEXT NOT NULL,
amount NUMERIC(12,2) NOT NULL,
deal_date DATE NOT NULL,
status TEXT NOT NULL DEFAULT 'closed', -- closed/pending/refunded
notes TEXT,
created_at TIMESTAMPTZ DEFAULT now()
);
```
---
## 五、采集方案
### 5.1 复用现有能力
当前单机系统已具备:
- macOS 微信 4.x 数据库定位与解密
- 联系人、会话、消息解析与标准化
- 每日 launchd 定时同步
- 增量去重(`UNIQUE(source_shard, source_table, source_local_id)`
MVP 阶段直接复用,只需扩展为多设备。
### 5.2 多设备采集流程
每台销售设备部署相同的采集代理:
```text
1. launchd 每天 05:00 触发
2. 退出微信 → 复制数据库副本 → 重启微信
3. 解密数据库副本
4. 解析联系人、会话、消息
5. 通过 SSH/HTTP 将增量数据推送到中央服务器
6. 中央服务器写入 PostgreSQL
7. 清理临时文件
```
### 5.3 中央服务器接收
中央服务器提供一个简单的接收接口:
```text
POST /api/sync
{
"salesperson_id": 1,
"device_id": "macbook-abc123",
"contacts": [...],
"conversations": [...],
"messages": [...]
}
```
或者更简单:每台设备直接配置 PostgreSQL 远程连接,采集脚本直接写入中央库。MVP 阶段建议后者,省去中间服务。
### 5.4 数据隔离
每条数据都带 `salesperson_id`,确保销售之间数据隔离。查询时按销售过滤。
---
## 六、AI 分析
### 6.1 分析目标
MVP 只做两件事:
1. **客户识别**:从联系人中筛选出真实客户(排除微商、广告、纯社交联系人)
2. **沟通摘要**:对每个客户会话生成结构化摘要
### 6.2 客户识别
对每个联系人,取最近 N 条消息,调用 LLM 判断:
```json
{
"is_customer": true,
"customer_name": "张总",
"industry": "餐饮",
"intent_level": "medium",
"key_needs": ["收银系统", "会员管理"],
"reason": "多次询问产品价格和功能,提到门店运营需求"
}
```
筛选规则:
- 有超过 5 条对话的联系人
- 消息内容涉及产品咨询、价格、合作等关键词
- 排除纯群聊通知、广告推送类联系人
### 6.3 沟通摘要
对每个客户会话,按时间窗口(如最近 7 天或全部)生成:
```json
{
"summary": "客户最初咨询收银系统价格,对比了竞品后关注会员管理功能,销售安排了产品演示,客户表示需要和合伙人商量。",
"stage": "产品演示",
"objections": ["价格偏高", "需要合伙人确认"],
"next_action": "等待客户反馈,建议3天后跟进",
"last_contact_date": "2026-07-12"
}
```
### 6.4 模型选择
- 优先使用现有 Ollama 本地模型(如 qwen2.5)降低成本
- 消息量大时分批处理,每次传入不超过 50 条消息
- 分析结果存入 `customer` 表,不单独建表
---
## 七、成交数据录入
### 7.1 录入方式
Web 后台提供简单表单:
- 选择销售
- 选择客户(从 AI 识别的客户列表中选)
- 填写产品名称、金额、成交日期
- 可选填写备注
### 7.2 关联逻辑
成交记录通过 `contact_id` 自动关联到对应的微信会话。这样就能看到:
- 某个成交客户的所有聊天记录
- 从首次接触到成交的完整沟通时间线
- 成交前的关键沟通节点
---
## 八、Web 管理后台
### 8.1 技术选型
| 模块 | 选型 |
|---|---|
| 前端 | React + TailwindCSS |
| 后端 | Python FastAPI |
| 数据库 | PostgreSQL 17 |
| 部署 | 单机部署,Nginx 反向代理 |
### 8.2 页面清单
MVP 只做 5 个页面:
#### 首页 / 仪表盘
- 今日新增消息数
- 活跃客户数
- 本月成交金额
- 各销售消息量对比
#### 销售列表
- 每个销售的消息量、客户数、成交金额
- 最后同步时间
- 同步状态
#### 客户列表
- 按销售筛选
- 按意向等级筛选
- 显示客户名称、行业、意向、最后沟通时间
- 点击进入客户详情
#### 客户详情
- 客户基本信息(AI 识别结果)
- 完整聊天记录(时间线展示,复用现有搜索页面能力)
- AI 沟通摘要
- 关联的成交记录
#### 成交录入
- 简单表单
- 成交列表(可按销售、日期、产品筛选)
---
## 九、实施计划
### 第 1 周:数据采集多设备化
- [ ] 创建中央 PostgreSQL 数据库 `wechat_sales_db`
- [ ] 建表(6 张核心表)
- [ ] 改造现有采集脚本,支持写入中央库(增加 `salesperson_id` 字段)
- [ ] 在 2 台设备上部署采集代理并验证
### 第 2 周:AI 分析 + Web 后台
- [ ] 搭建 FastAPI 后端骨架
- [ ] 实现客户识别分析脚本
- [ ] 实现沟通摘要分析脚本
- [ ] 搭建 React 前端骨架
- [ ] 完成客户列表和客户详情页
### 第 3 周:成交录入 + 报表
- [ ] 成交录入表单
- [ ] 成交列表页
- [ ] 仪表盘基础数据展示
- [ ] 聊天记录页面集成
### 第 4 周:联调 + 试点
- [ ] 35 名销售实际接入
- [ ] 录入真实成交数据
- [ ] 验证"聊天→客户→成交"关联准确性
- [ ] 收集反馈,修复问题
---
## 十、成功标准
MVP 上线后需验证:
1. **采集完整性**:每个销售每天的消息采集率 > 95%
2. **客户识别准确率**AI 识别的客户中,> 80% 被销售确认是真实客户
3. **成交关联可用**:手动录入的成交记录能正确关联到对应聊天记录
4. **基础报表可用**:能看到每个销售的消息量、客户数、成交金额
5. **闭环验证**:至少能从 1 个成交客户回溯完整沟通链路
---
## 十一、与完整方案的关系
MVP 是总体方案"第一阶段"的精简版,主要区别:
| 维度 | MVP | 完整方案第一阶段 |
|---|---|---|
| 数据模型 | 6 张表 | 20+ 张表 |
| 成交数据 | 手动录入 | 接入 CRM/订单系统 |
| AI 分析 | 客户识别 + 沟通摘要 | 阶段识别 + 意向评分 + 异议分析 + 待办 |
| 权限 | 按 salesperson_id 简单隔离 | RBAC + 数据范围权限 |
| 同步 | 每日离线 | 每日 + 小时级 |
| 报表 | 基础统计 | 销售漏斗 + 能力雷达 + 话术分析 |
| 部署 | 单机 | 单机但面向多设备 |
MVP 验证通过后,按完整方案路线图逐步扩展。