1104 lines
68 KiB
Markdown
1104 lines
68 KiB
Markdown
# 新流量池系统设计文档
|
||
|
||
> **版本**:V1.0
|
||
> **日期**:2026-01-29
|
||
> **状态**:已确认
|
||
|
||
---
|
||
|
||
## 功能概述
|
||
|
||
**流量池系统是一套统一管理客户资源的系统,通过对微信好友、群成员等多渠道流量进行归集、分类、打标、分配和行为追踪,实现客户资源的精细化运营和价值最大化。**
|
||
|
||
---
|
||
|
||
## 一、需求概述
|
||
|
||
### 1.1 项目背景
|
||
|
||
基于现有数据库中 `s2_` 开头的表(触客宝系统),设计一套全新的流量池管理系统,实现流量的统一管理、分类、追踪和分析。
|
||
|
||
### 1.2 核心需求
|
||
|
||
| 序号 | 需求 | 说明 |
|
||
|------|------|------|
|
||
| 1 | 流量池总表 | 全局唯一,按 identifier(微信ID优先)去重 |
|
||
| 2 | 公司子表 | 包含 companyId,支持多租户数据隔离 |
|
||
| 3 | 流量池分组 | 支持自定义流量池分组(如:高价值客户池、潜在客户池等) |
|
||
| 4 | 来源追溯 | 完整记录流量的获取渠道和路径 |
|
||
| 5 | 行为记录 | 记录所有消息互动和关键行为 |
|
||
| 6 | 标签同步 | 同步微信好友标签到流量池 |
|
||
|
||
### 1.3 设计原则
|
||
|
||
- **全局唯一**:流量池总表按 identifier 全局唯一,优先使用微信ID
|
||
- **多租户隔离**:子表通过 companyId 实现数据隔离
|
||
- **灵活分组**:支持系统默认分组和自定义分组
|
||
- **来源可追溯**:完整记录流量的获取渠道和路径
|
||
- **行为可分析**:记录用户行为,支持 RFM 分析
|
||
|
||
---
|
||
|
||
## 二、系统架构
|
||
|
||
### 2.1 整体系统架构图
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────────────────────────┐
|
||
│ 流量池系统整体架构 │
|
||
├─────────────────────────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ 【数据采集层】 │ │
|
||
│ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │
|
||
│ │ │ 微信好友 │ │ 群成员 │ │ 海报获客 │ │ 电话获客 │ │ API导入 │ ... │ │
|
||
│ │ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │ │
|
||
│ └────────┼──────────────┼──────────────┼──────────────┼──────────────┼───────────────┘ │
|
||
│ └──────────────┴──────────────┼──────────────┴──────────────┘ │
|
||
│ ▼ │
|
||
│ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ 【流量入池引擎】 │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │
|
||
│ │ │ 1.提取identifier │ ──▶ │ 2.查重/创建总表 │ ──▶ │ 3.创建公司记录 │ │ │
|
||
│ │ │ (微信ID优先) │ │ ck_traffic_pool │ │ ck_traffic_pool │ │ │
|
||
│ │ └─────────────────┘ └─────────────────┘ │ _company │ │ │
|
||
│ │ └────────┬────────┘ │ │
|
||
│ └────────────────────────────────────────────────────────────────┼─────────────────────┘ │
|
||
│ │ │
|
||
│ ┌───────────────────────────────────────────────────────┼───────────────────┐ │
|
||
│ │ │ │ │
|
||
│ ▼ ▼ ▼ │
|
||
│ ┌─────────────────┐ ┌─────────────────┐ ┌────────────┐│
|
||
│ │【来源追溯系统】 │ │ 【标签系统】 │ │【分配系统】││
|
||
│ │ │ │ │ │ ││
|
||
│ │ck_traffic_pool_ │ │ ┌───────────┐ │ │ck_traffic_ ││
|
||
│ │ source │ │ │ 标签类目 │ │ │ pool_allot ││
|
||
│ │ │ │ │ tag_ │ │ │ _record ││
|
||
│ │ · 来源类型 │ │ │ category │ │ │ ││
|
||
│ │ · 来源渠道 │ │ └─────┬─────┘ │ │ · 分配规则 ││
|
||
│ │ · 关联任务 │ │ │ │ │ · 归属客服 ││
|
||
│ │ · 首次来源标记 │ │ ▼ │ │ · 有效期 ││
|
||
│ └─────────────────┘ │ ┌───────────┐ │ └────────────┘│
|
||
│ │ │ 标签定义 │ │ │
|
||
│ │ │ tag_ │ │ │
|
||
│ │ │ define │ │ │
|
||
│ │ └─────┬─────┘ │ │
|
||
│ │ │ │ │
|
||
│ │ ▼ │ │
|
||
│ │ ┌───────────┐ │ │
|
||
│ │ │ 标签关联 │ │ │
|
||
│ │ │ tag │ │ │
|
||
│ │ └───────────┘ │ │
|
||
│ └────────┬────────┘ │
|
||
│ │ │
|
||
│ ┌───────────────────────────────────────────────────────────────┼─────────────────────┐ │
|
||
│ │ 【行为追踪系统】 │ │ │
|
||
│ │ ▼ │ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────────┐ │ │
|
||
│ │ │ 消息互动 │ │ 朋友圈互动 │ │ 订单行为 │ │ 行为记录表 │ │ │
|
||
│ │ │ s2_wechat_ │ ──▶ │ s2_wechat_ │ ──▶ │ 订单系统 │──▶│ck_traffic_ │ │ │
|
||
│ │ │ message │ │ moments │ │ │ │ pool_behavior │ │ │
|
||
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └───────┬───────┘ │ │
|
||
│ │ │ │ │
|
||
│ │ 记录行为后更新 RFM 指标 │ │ │
|
||
│ │ ┌─────────────────────────────────────┘ │ │
|
||
│ │ ▼ │ │
|
||
│ │ ┌───────────────────┐ │ │
|
||
│ │ │ 更新用户画像 │ │ │
|
||
│ │ │ · lastInteractTime│ │ │
|
||
│ │ │ · rfmF (频次) │ │ │
|
||
│ │ │ · rfmM (金额) │ │ │
|
||
│ │ │ · totalMsgCount │ │ │
|
||
│ │ └───────────────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ 【流量池分组与查询】 │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ ck_traffic_pool_group(分组表) │ │ │
|
||
│ │ │ │ │ │
|
||
│ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │
|
||
│ │ │ │ 全部好友池 │ │ 高价值客户 │ │ 潜在客户池 │ │ 高互动客户 │ 自定义 │ │ │
|
||
│ │ │ │ (系统默认) │ │ (系统默认) │ │ (系统默认) │ │ (系统默认) │ 分组... │ │ │
|
||
│ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │
|
||
│ │ └─────────┼────────────────┼────────────────┼────────────────┼────────────────┘ │ │
|
||
│ │ │ │ │ │ │ │
|
||
│ │ ▼ ▼ ▼ ▼ │ │
|
||
│ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ ruleConfig(JSON规则配置) │ │ │
|
||
│ │ │ │ │ │
|
||
│ │ │ friendStatus=2 rfmM>=1000 OR intentionLevel>=2 totalMsgCount │ │ │
|
||
│ │ │ level=VIP AND orderCount=0 >=50 │ │ │
|
||
│ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │
|
||
│ │ │ │ │
|
||
│ │ ▼ │ │
|
||
│ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ 动态查询 ck_traffic_pool_company 匹配规则的用户 │ │ │
|
||
│ │ │ 或查询 ck_traffic_pool_group_member 手动成员 │ │ │
|
||
│ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ 【工作台集成】 │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
||
│ │ │ 流量分发 │ │ 联系人导入 │ │ 自动建群 │ │ 群消息推送 │ ... │ │
|
||
│ │ │ │ │ │ │ │ │ │ │ │
|
||
│ │ │ pools: [1,2]│ │ pools: [3] │ │poolGroups: │ │trafficPools:│ │ │
|
||
│ │ │ │ │ │ │ [1,2,3] │ │ [4,5] │ │ │
|
||
│ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │
|
||
│ │ │ │ │ │ │ │
|
||
│ │ └────────────────┴────────────────┴────────────────┘ │ │
|
||
│ │ │ │ │
|
||
│ │ ▼ │ │
|
||
│ │ ┌─────────────────────────────┐ │ │
|
||
│ │ │ 根据分组ID获取目标用户列表 │ │ │
|
||
│ │ │ 执行工作台任务 │ │ │
|
||
│ │ └─────────────────────────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 2.2 标签与用户画像体系流程图
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────────────────────────┐
|
||
│ 标签与用户画像体系 │
|
||
├─────────────────────────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ 【标签来源】 【标签存储】 【标签应用】 │
|
||
│ │
|
||
│ ┌─────────────────┐ │
|
||
│ │ 微信同步 │ │
|
||
│ │ s2_wechat_friend│──┐ │
|
||
│ │ .labels │ │ ┌─────────────────────────────────────────┐ │
|
||
│ └─────────────────┘ │ │ ck_traffic_pool_tag_category │ │
|
||
│ │ │ (标签类目表) │ │
|
||
│ ┌─────────────────┐ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
|
||
│ │ 手动打标 │ │ │ │微信标签 │ │站内标签 │ │ AI标签 │ │ │
|
||
│ │ 用户操作 │──┤ │ │tagType=1│ │tagType=2│ │tagType=3│ │ │
|
||
│ └─────────────────┘ │ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │
|
||
│ │ └───────┼──────────┼──────────┼─────────┘ │
|
||
│ ┌─────────────────┐ │ │ │ │ │
|
||
│ │ 规则自动打标 │ │ ▼ ▼ ▼ │
|
||
│ │ 定时任务触发 │──┤ ┌─────────────────────────────────────────┐ │
|
||
│ └─────────────────┘ │ │ ck_traffic_pool_tag_define │ │
|
||
│ │──────────▶│ (标签定义表) │ │
|
||
│ ┌─────────────────┐ │ │ │ │
|
||
│ │ AI 智能打标 │ │ │ 示例标签定义: │ │
|
||
│ │ GPT分析生成 │──┤ │ · 高价值客户 (站内/客户等级) │ │
|
||
│ └─────────────────┘ │ │ · 活跃用户 (站内/行为标签) │ │
|
||
│ │ │ · 潜在流失 (AI/预测标签) │ │
|
||
│ ┌─────────────────┐ │ │ · VIP (微信/同步标签) │ │
|
||
│ │ 行为触发打标 │ │ └─────────────────┬───────────────────────┘ │
|
||
│ │ 订单/消息等 │──┘ │ │
|
||
│ └─────────────────┘ ▼ │
|
||
│ ┌─────────────────────────────────────────┐ │
|
||
│ │ ck_traffic_pool_tag │ │
|
||
│ │ (标签关联表) │ │
|
||
│ │ │ │
|
||
│ │ poolCompanyId ──▶ 用户 │ │
|
||
│ │ tagDefineId ──▶ 标签 │ │
|
||
│ │ source ──▶ 打标来源 │ │
|
||
│ │ score ──▶ AI置信度 │ │
|
||
│ └─────────────────┬───────────────────────┘ │
|
||
│ │ │
|
||
│ ┌──────────────────────────────────┼──────────────────────────┐ │
|
||
│ │ │ │ │
|
||
│ ▼ ▼ ▼ │
|
||
│ ┌─────────────────────┐ ┌─────────────────────┐ ┌───────────────┐ │
|
||
│ │ 用户画像展示 │ │ 分组规则匹配 │ │ 精准营销 │ │
|
||
│ │ │ │ │ │ │ │
|
||
│ │ · 基础信息 │ │ ruleConfig 中 │ │ · 定向推送 │ │
|
||
│ │ · 标签云 │ │ 支持标签条件: │ │ · 个性推荐 │ │
|
||
│ │ · RFM 雷达图 │ │ │ │ · 智能客服 │ │
|
||
│ │ · 行为轨迹 │ │ "type": "tag" │ │ │ │
|
||
│ │ · 来源追溯 │ │ "field": "tags" │ │ │ │
|
||
│ │ │ │ "operator": │ │ │ │
|
||
│ │ │ │ "contains" │ │ │ │
|
||
│ │ │ │ "value": │ │ │ │
|
||
│ │ │ │ ["VIP","重点"] │ │ │ │
|
||
│ └─────────────────────┘ └─────────────────────┘ └───────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────────────────────────┘
|
||
|
||
【用户画像数据来源】
|
||
|
||
┌─────────────────────────────────────────────────────────────────────────────────────────────┐
|
||
│ │
|
||
│ ck_traffic_pool_company(用户画像核心数据表) │
|
||
│ ┌──────────────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ │ │
|
||
│ │ 【基础属性】 【客户价值】 【行为统计】 │ │
|
||
│ │ ├─ realName ├─ level (等级) ├─ totalMsgCount │ │
|
||
│ │ ├─ phone ├─ intentionLevel ├─ lastMsgTime │ │
|
||
│ │ ├─ email ├─ lifecycle ├─ totalOrderCount │ │
|
||
│ │ ├─ birthday │ ├─ totalOrderAmount │ │
|
||
│ │ ├─ address │ ├─ lastOrderTime │ │
|
||
│ │ └─ customFields (JSON) │ │ │ │
|
||
│ │ │ │ │ │
|
||
│ │ 【RFM模型】 【归属信息】 【状态管理】 │ │
|
||
│ │ ├─ lastInteractTime (R) ├─ ownerWechatId ├─ friendStatus │ │
|
||
│ │ ├─ rfmF (频次) ├─ ownerAccountId ├─ allocateStatus │ │
|
||
│ │ ├─ rfmM (金额) ├─ ownerUserId ├─ status │ │
|
||
│ │ ├─ rfmScore (综合) │ │ │ │
|
||
│ │ └─ rfmType (客户类型) │ │ │ │
|
||
│ │ │ │
|
||
│ └──────────────────────────────────────────────────────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌──────────────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ 用户画像视图整合 │ │
|
||
│ │ │ │
|
||
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
|
||
│ │ │ 基础信息 │ │ 标签信息 │ │ 行为轨迹 │ │ 来源信息 │ │ │
|
||
│ │ │ │ │ │ │ │ │ │ │ │
|
||
│ │ │ traffic_ │ + │ traffic_ │ + │ traffic_ │ + │ traffic_ │ │ │
|
||
│ │ │ pool_ │ │ pool_tag │ │ pool_ │ │ pool_ │ │ │
|
||
│ │ │ company │ │ │ │ behavior │ │ source │ │ │
|
||
│ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ │
|
||
│ │ │ │ │ │ │ │
|
||
│ │ └────────────────┴────────────────┴────────────────┘ │ │
|
||
│ │ │ │ │
|
||
│ │ ▼ │ │
|
||
│ │ ┌──────────────────────┐ │ │
|
||
│ │ │ 完整用户画像 │ │ │
|
||
│ │ │ (前端展示用) │ │ │
|
||
│ │ └──────────────────────┘ │ │
|
||
│ └──────────────────────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 2.3 表结构关系图
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ ck_traffic_pool(总表) │
|
||
│ 全局唯一的流量标识 │
|
||
└─────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
│ 1:N
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ ck_traffic_pool_company(公司子表) │
|
||
│ 每个公司独立的流量详情(含companyId) │
|
||
└─────────────────────────────────────────────────────────────────────┘
|
||
│ │ │ │ │
|
||
│ N:1 │ 1:N │ 1:N │ 1:N │ 1:N
|
||
▼ ▼ ▼ ▼ ▼
|
||
┌──────────┐ ┌────────────┐ ┌────────────┐ ┌─────────────┐ ┌─────────────┐
|
||
│ 流量池 │ │ 来源记录 │ │ 标签记录 │ │ 行为记录 │ │ 分配记录 │
|
||
│ 分组 │ │ │ │ │ │ │ │ │
|
||
└──────────┘ └────────────┘ └────────────┘ └─────────────┘ └─────────────┘
|
||
```
|
||
|
||
### 2.2 表清单
|
||
|
||
| 序号 | 表名 | 说明 |
|
||
|------|------|------|
|
||
| 1 | `ck_traffic_pool` | 流量池总表(全局唯一) |
|
||
| 2 | `ck_traffic_pool_company` | 公司流量详情表(多租户) |
|
||
| 3 | `ck_traffic_pool_group` | 流量池分组表(规则使用JSON存储) |
|
||
| 4 | `ck_traffic_pool_group_member` | 流量池分组成员表(手动添加) |
|
||
| 5 | `ck_traffic_pool_source` | 流量来源记录表 |
|
||
| 6 | `ck_traffic_pool_tag_category` | 标签类目表 |
|
||
| 7 | `ck_traffic_pool_tag_define` | 标签定义表 |
|
||
| 8 | `ck_traffic_pool_tag` | 流量标签关联表 |
|
||
| 9 | `ck_traffic_pool_behavior` | 流量行为记录表 |
|
||
| 10 | `ck_traffic_pool_allot_record` | 流量分配记录表 |
|
||
|
||
> ⚠️ **优化说明**:废弃独立的 `ck_traffic_pool_group_rule` 表,规则改为存储在 `ck_traffic_pool_group.ruleConfig` 字段中(JSON格式),支持嵌套逻辑表达。
|
||
|
||
---
|
||
|
||
## 三、流量池分组设计
|
||
|
||
### 3.1 系统默认分组
|
||
|
||
| 分组名称 | 分组编码 | 说明 | 规则 |
|
||
|----------|----------|------|------|
|
||
| 全部好友流量池 | `all_friends` | 所有已添加的好友 | friendStatus = 2 |
|
||
| 高价值客户池 | `high_value` | 消费金额高的客户 | rfmM >= 阈值 或 level = 2(VIP) |
|
||
| 潜在客户池 | `potential` | 有意向但未成交 | intentionLevel >= 2 且 totalOrderCount = 0 |
|
||
| 高互动客户池 | `high_interact` | 互动频繁的客户 | rfmF >= 阈值 或 totalMsgCount >= 阈值 |
|
||
|
||
### 3.2 分组特性说明
|
||
|
||
> ⚠️ **重要**:一个流量可以同时属于多个分组
|
||
|
||
例如:某客户既消费金额高,又互动频繁,则该客户会同时出现在:
|
||
- 全部好友流量池
|
||
- 高价值客户池
|
||
- 高互动客户池
|
||
|
||
分组之间是**非互斥**关系,前端展示时需注意去重统计。
|
||
|
||
### 3.3 自定义分组
|
||
|
||
用户可以基于以下条件创建自定义分组:
|
||
|
||
- **标签条件**:包含/不包含特定标签
|
||
- **属性条件**:性别、地区、等级等
|
||
- **行为条件**:消息数、订单数、最后互动时间等
|
||
- **RFM条件**:R/F/M 值范围
|
||
- **来源条件**:特定来源渠道
|
||
|
||
### 3.4 分组规则配置(JSON结构)
|
||
|
||
> ⚠️ 规则直接存储在 `ck_traffic_pool_group.ruleConfig` 字段中,支持嵌套逻辑
|
||
|
||
**简单规则示例**(全部好友):
|
||
|
||
```json
|
||
{
|
||
"logic": "AND",
|
||
"conditions": [
|
||
{ "type": "field", "field": "friendStatus", "operator": "=", "value": 2, "valueType": "number" }
|
||
]
|
||
}
|
||
```
|
||
|
||
**复杂规则示例**(高价值客户:已通过好友 AND (消费>=1000 OR 等级=VIP)):
|
||
|
||
```json
|
||
{
|
||
"logic": "AND",
|
||
"conditions": [
|
||
{ "type": "field", "field": "friendStatus", "operator": "=", "value": 2, "valueType": "number" },
|
||
{
|
||
"type": "group",
|
||
"logic": "OR",
|
||
"conditions": [
|
||
{ "type": "field", "field": "rfmM", "operator": ">=", "value": 1000, "valueType": "number" },
|
||
{ "type": "field", "field": "level", "operator": "=", "value": 2, "valueType": "number" }
|
||
]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**标签规则示例**:
|
||
|
||
```json
|
||
{
|
||
"logic": "AND",
|
||
"conditions": [
|
||
{ "type": "field", "field": "friendStatus", "operator": "=", "value": 2, "valueType": "number" },
|
||
{ "type": "tag", "field": "tags", "operator": "contains", "value": ["重点客户", "已成交"], "valueType": "array" }
|
||
]
|
||
}
|
||
```
|
||
|
||
**规则字段说明**:
|
||
|
||
| 字段 | 说明 |
|
||
|------|------|
|
||
| type | 条件类型:`field`=字段条件,`group`=嵌套分组,`tag`=标签条件 |
|
||
| logic | 逻辑运算符:`AND`、`OR` |
|
||
| field | 字段名 |
|
||
| operator | 操作符:`=`, `!=`, `>`, `<`, `>=`, `<=`, `in`, `not_in`, `contains`, `not_contains`, `between` |
|
||
| value | 条件值 |
|
||
| valueType | 值类型:`string`, `number`, `array`, `date` |
|
||
|
||
---
|
||
|
||
## 四、详细表结构
|
||
|
||
### 4.1 流量池总表 `ck_traffic_pool`
|
||
|
||
> **用途**:存储全局唯一的流量标识,不区分公司
|
||
|
||
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|--------|------|
|
||
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
|
||
| identifier | varchar(64) | 是 | - | 流量唯一标识(微信ID优先) |
|
||
| identifierType | tinyint(2) | 是 | 1 | 标识类型:1=微信ID,2=微信号,3=手机号 |
|
||
| wechatId | varchar(64) | 否 | NULL | 微信ID |
|
||
| wechatAlias | varchar(64) | 否 | NULL | 微信号 |
|
||
| mobile | varchar(20) | 否 | NULL | 手机号 |
|
||
| nickname | varchar(100) | 否 | NULL | 昵称 |
|
||
| avatar | varchar(500) | 否 | NULL | 头像URL |
|
||
| gender | tinyint(1) | 否 | 0 | 性别:0=未知,1=男,2=女 |
|
||
| region | varchar(100) | 否 | NULL | 地区 |
|
||
| country | varchar(50) | 否 | NULL | 国家 |
|
||
| province | varchar(50) | 否 | NULL | 省份 |
|
||
| city | varchar(50) | 否 | NULL | 城市 |
|
||
| signature | varchar(500) | 否 | NULL | 个性签名 |
|
||
| firstSeenTime | int(11) | 否 | NULL | 首次出现时间 |
|
||
| lastSeenTime | int(11) | 否 | NULL | 最后活跃时间 |
|
||
| createTime | int(11) | 是 | - | 创建时间 |
|
||
| updateTime | int(11) | 否 | NULL | 更新时间 |
|
||
|
||
**索引设计**:
|
||
- 主键:`id`
|
||
- 唯一索引:`uk_identifier (identifier)`
|
||
- 普通索引:`idx_wechatId (wechatId)`、`idx_wechatAlias (wechatAlias)`、`idx_mobile (mobile)`
|
||
|
||
---
|
||
|
||
### 4.2 公司流量详情表 `ck_traffic_pool_company`
|
||
|
||
> **用途**:存储流量在各公司的详细信息,支持多租户
|
||
|
||
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|--------|------|
|
||
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
|
||
| poolId | int(11) UNSIGNED | 是 | - | 流量池总表ID |
|
||
| identifier | varchar(64) | 是 | - | 流量标识(冗余) |
|
||
| companyId | int(11) UNSIGNED | 是 | - | 公司ID |
|
||
| **归属信息** |
|
||
| ownerWechatId | varchar(64) | 否 | NULL | 归属客服微信ID |
|
||
| ownerAccountId | int(11) | 否 | NULL | 归属客服账号ID(s2_wechat_account.id) |
|
||
| ownerUserId | int(11) | 否 | NULL | 归属操盘手ID |
|
||
| **好友关联** |
|
||
| wechatFriendId | int(11) | 否 | NULL | 微信好友ID(s2_wechat_friend.id) |
|
||
| friendStatus | tinyint(2) | 否 | 0 | 好友状态:0=未加,1=待通过,2=已通过,3=已删除,4=被删除 |
|
||
| friendPassTime | int(11) | 否 | NULL | 好友通过时间 |
|
||
| **客户属性** |
|
||
| realName | varchar(50) | 否 | NULL | 真实姓名 |
|
||
| idCard | varchar(18) | 否 | NULL | 身份证号 |
|
||
| phone | varchar(20) | 否 | NULL | 联系电话 |
|
||
| email | varchar(100) | 否 | NULL | 邮箱 |
|
||
| birthday | date | 否 | NULL | 生日 |
|
||
| address | varchar(255) | 否 | NULL | 地址 |
|
||
| company | varchar(100) | 否 | NULL | 所在公司 |
|
||
| position | varchar(50) | 否 | NULL | 职位 |
|
||
| remark | varchar(500) | 否 | NULL | 备注 |
|
||
| customFields | json | 否 | NULL | 自定义字段 |
|
||
| **客户等级** |
|
||
| level | tinyint(2) | 否 | 0 | 客户等级:0=普通,1=重要,2=VIP |
|
||
| intentionLevel | tinyint(2) | 否 | 0 | 意向度:0=未知,1=低,2=中,3=高 |
|
||
| **RFM模型** |
|
||
| lastInteractTime | int(11) | 否 | NULL | 最后互动时间戳(R值动态计算:DATEDIFF(NOW(), FROM_UNIXTIME(lastInteractTime))) |
|
||
| rfmF | int(11) | 否 | 0 | F值-互动频次 |
|
||
| rfmM | decimal(12,2) | 否 | 0.00 | M值-消费金额 |
|
||
| rfmScore | int(11) | 否 | 0 | RFM综合评分 |
|
||
| rfmType | varchar(20) | 否 | NULL | RFM客户类型 |
|
||
| **统计信息** |
|
||
| totalOrderCount | int(11) | 否 | 0 | 累计订单数 |
|
||
| totalOrderAmount | decimal(12,2) | 否 | 0.00 | 累计订单金额 |
|
||
| lastOrderTime | int(11) | 否 | NULL | 最后下单时间 |
|
||
| totalMsgCount | int(11) | 否 | 0 | 累计消息数 |
|
||
| lastMsgTime | int(11) | 否 | NULL | 最后消息时间 |
|
||
| **来源追溯** |
|
||
| firstSourceType | tinyint(2) | 否 | NULL | 首次来源类型 |
|
||
| firstSourceTime | int(11) | 否 | NULL | 首次来源时间 |
|
||
| **生命周期** |
|
||
| lifecycle | tinyint(2) | 否 | 1 | 生命周期:1=新流量,2=跟进中,3=已成交,4=沉默,5=流失 |
|
||
| **状态管理** |
|
||
| status | tinyint(2) | 否 | 1 | 状态:0=禁用,1=正常,2=黑名单 |
|
||
| allocateStatus | tinyint(2) | 否 | 0 | 分配状态:0=未分配,1=已分配,2=已回收 |
|
||
| allocateTime | int(11) | 否 | NULL | 分配时间 |
|
||
| expireTime | int(11) | 否 | NULL | 到期时间 |
|
||
| **时间戳** |
|
||
| createTime | int(11) | 是 | - | 创建时间 |
|
||
| updateTime | int(11) | 否 | NULL | 更新时间 |
|
||
| isDel | tinyint(1) | 否 | 0 | 是否删除 |
|
||
| deleteTime | int(11) | 否 | NULL | 删除时间 |
|
||
|
||
**索引设计**:
|
||
- 主键:`id`
|
||
- 唯一索引:`uk_identifier_company (identifier, companyId)`
|
||
- 普通索引:`idx_poolId`、`idx_companyId`、`idx_ownerWechatId`、`idx_wechatFriendId`、`idx_friendStatus`、`idx_status`、`idx_level`、`idx_allocateStatus`、`idx_lifecycle`
|
||
|
||
> 💡 **优化说明**:删除重复的 `uk_pool_company` 唯一索引,因为 `poolId` 与 `identifier` 一一对应,保留更常用的 `uk_identifier_company`
|
||
|
||
---
|
||
|
||
### 4.3 流量池分组表 `ck_traffic_pool_group`
|
||
|
||
> **用途**:管理流量池分组(如:高价值客户池、潜在客户池等)
|
||
|
||
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|--------|------|
|
||
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
|
||
| companyId | int(11) UNSIGNED | 是 | - | 公司ID(0=系统默认) |
|
||
| groupCode | varchar(50) | 是 | - | 分组编码(唯一标识) |
|
||
| groupName | varchar(50) | 是 | - | 分组名称 |
|
||
| groupIcon | varchar(255) | 否 | NULL | 分组图标 |
|
||
| groupColor | varchar(20) | 否 | NULL | 分组颜色 |
|
||
| description | varchar(255) | 否 | NULL | 分组描述 |
|
||
| isSystem | tinyint(1) | 否 | 0 | 是否系统默认:0=否,1=是 |
|
||
| isDefault | tinyint(1) | 否 | 0 | 是否默认展示:0=否,1=是 |
|
||
| ruleType | tinyint(2) | 否 | 1 | 规则类型:1=动态规则,2=手动添加 |
|
||
| ruleConfig | json | 否 | NULL | 规则配置(JSON) |
|
||
| memberCount | int(11) | 否 | 0 | 成员数量(缓存) |
|
||
| sort | int(11) | 否 | 0 | 排序(数值越小越靠前) |
|
||
| status | tinyint(1) | 否 | 1 | 状态:0=禁用,1=启用 |
|
||
| userId | int(11) | 否 | NULL | 创建用户ID |
|
||
| createTime | int(11) | 是 | - | 创建时间 |
|
||
| updateTime | int(11) | 否 | NULL | 更新时间 |
|
||
| isDel | tinyint(1) | 否 | 0 | 是否删除 |
|
||
| deleteTime | int(11) | 否 | NULL | 删除时间 |
|
||
|
||
**索引设计**:
|
||
- 主键:`id`
|
||
- 唯一索引:`uk_company_code (companyId, groupCode)`
|
||
- 普通索引:`idx_companyId`、`idx_isSystem`、`idx_status`、`idx_sort`
|
||
|
||
---
|
||
|
||
### 4.4 流量池分组成员表 `ck_traffic_pool_group_member`
|
||
|
||
> **用途**:手动添加到分组的成员(ruleType=2时使用)
|
||
|
||
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|--------|------|
|
||
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
|
||
| groupId | int(11) UNSIGNED | 是 | - | 分组ID |
|
||
| poolCompanyId | int(11) UNSIGNED | 是 | - | 公司流量详情表ID |
|
||
| identifier | varchar(64) | 是 | - | 流量标识(冗余) |
|
||
| companyId | int(11) UNSIGNED | 是 | - | 公司ID |
|
||
| addType | tinyint(2) | 否 | 1 | 添加方式:1=手动,2=批量导入 |
|
||
| operatorId | int(11) | 否 | NULL | 操作人ID |
|
||
| createTime | int(11) | 是 | - | 创建时间 |
|
||
| isDel | tinyint(1) | 否 | 0 | 是否删除 |
|
||
| deleteTime | int(11) | 否 | NULL | 删除时间 |
|
||
|
||
**索引设计**:
|
||
- 主键:`id`
|
||
- 唯一索引:`uk_group_pool (groupId, poolCompanyId)`
|
||
- 普通索引:`idx_companyId`、`idx_identifier`
|
||
|
||
---
|
||
|
||
### 4.5 流量来源表 `ck_traffic_pool_source`
|
||
|
||
> **用途**:记录流量的获取渠道和来源路径
|
||
|
||
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|--------|------|
|
||
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
|
||
| poolCompanyId | int(11) UNSIGNED | 是 | - | 公司流量详情表ID |
|
||
| identifier | varchar(64) | 是 | - | 流量标识(冗余) |
|
||
| companyId | int(11) UNSIGNED | 是 | - | 公司ID |
|
||
| **来源类型** |
|
||
| sourceType | tinyint(2) | 是 | - | 来源类型(见下表) |
|
||
| sourceSubType | varchar(50) | 否 | NULL | 来源子类型 |
|
||
| **来源详情** |
|
||
| sourceId | varchar(100) | 否 | NULL | 来源ID |
|
||
| sourceName | varchar(255) | 否 | NULL | 来源名称 |
|
||
| sourceWechatId | varchar(64) | 否 | NULL | 来源微信ID |
|
||
| sourceChatroomId | varchar(64) | 否 | NULL | 来源群ID |
|
||
| sourceSceneId | int(11) | 否 | NULL | 来源场景ID |
|
||
| sourceChannelId | int(11) | 否 | NULL | 来源渠道ID |
|
||
| **关联任务** |
|
||
| friendTaskId | int(11) | 否 | NULL | 加好友任务ID |
|
||
| taskCustomerId | int(11) | 否 | NULL | 获客任务客户ID |
|
||
| **状态** |
|
||
| sourceStatus | tinyint(2) | 否 | 1 | 来源状态:1=待处理,2=处理中,3=已通过,4=已拒绝,5=已过期 |
|
||
| isFirstSource | tinyint(1) | 否 | 0 | 是否首次来源:0=否,1=是 |
|
||
| extra | json | 否 | NULL | 额外信息 |
|
||
| remark | varchar(255) | 否 | NULL | 备注 |
|
||
| createTime | int(11) | 是 | - | 创建时间 |
|
||
| updateTime | int(11) | 否 | NULL | 更新时间 |
|
||
|
||
**来源类型枚举**:
|
||
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| 1 | 好友添加 |
|
||
| 2 | 群成员 |
|
||
| 3 | 海报获客 |
|
||
| 4 | 电话获客 |
|
||
| 5 | 订单获客 |
|
||
| 6 | API导入 |
|
||
| 7 | 手动导入 |
|
||
| 8 | 裂变活动 |
|
||
|
||
---
|
||
|
||
## 五、标签系统设计
|
||
|
||
### 5.1 标签系统架构
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ 标签类型(tagType) │
|
||
│ 1=微信标签 2=站内标签 3=AI标签 │
|
||
└─────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ ck_traffic_pool_tag_category(标签类目表) │
|
||
│ 每种标签类型下可以有多个类目 │
|
||
└─────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
│ 1:N
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ ck_traffic_pool_tag_define(标签定义表) │
|
||
│ 每个类目下可以定义多个具体标签 │
|
||
└─────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
│ N:M
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ ck_traffic_pool_tag(流量标签关联表) │
|
||
│ 流量与标签的多对多关联 │
|
||
└─────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 5.2 标签类型说明
|
||
|
||
| 标签类型 | tagType | 说明 | 数据来源 |
|
||
|----------|---------|------|----------|
|
||
| 微信标签 | 1 | 从微信同步过来的好友标签 | s2_wechat_friend.labels 同步 |
|
||
| 站内标签 | 2 | 系统内部定义的业务标签 | 用户手动打标/规则自动打标 |
|
||
| AI标签 | 3 | AI根据用户画像自动生成 | AI分析自动生成 |
|
||
|
||
### 5.3 标签类目表 `ck_traffic_pool_tag_category`
|
||
|
||
> **用途**:管理标签的类目/分组,支持多级分类
|
||
|
||
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|--------|------|
|
||
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
|
||
| companyId | int(11) UNSIGNED | 是 | - | 公司ID(0=系统默认) |
|
||
| parentId | int(11) UNSIGNED | 否 | 0 | 父类目ID(0=顶级类目) |
|
||
| tagType | tinyint(2) | 是 | - | 标签类型:1=微信标签,2=站内标签,3=AI标签 |
|
||
| categoryCode | varchar(50) | 是 | - | 类目编码 |
|
||
| categoryName | varchar(50) | 是 | - | 类目名称 |
|
||
| categoryIcon | varchar(255) | 否 | NULL | 类目图标 |
|
||
| categoryColor | varchar(20) | 否 | NULL | 类目颜色 |
|
||
| description | varchar(255) | 否 | NULL | 类目描述 |
|
||
| isSystem | tinyint(1) | 否 | 0 | 是否系统默认:0=否,1=是 |
|
||
| sort | int(11) | 否 | 0 | 排序 |
|
||
| status | tinyint(1) | 否 | 1 | 状态:0=禁用,1=启用 |
|
||
| userId | int(11) | 否 | NULL | 创建用户ID |
|
||
| createTime | int(11) | 是 | - | 创建时间 |
|
||
| updateTime | int(11) | 否 | NULL | 更新时间 |
|
||
| isDel | tinyint(1) | 否 | 0 | 是否删除 |
|
||
| deleteTime | int(11) | 否 | NULL | 删除时间 |
|
||
|
||
**索引设计**:
|
||
- 主键:`id`
|
||
- 唯一索引:`uk_company_code (companyId, categoryCode)`
|
||
- 普通索引:`idx_companyId`、`idx_parentId`、`idx_tagType`、`idx_status`
|
||
|
||
---
|
||
|
||
### 5.4 标签定义表 `ck_traffic_pool_tag_define`
|
||
|
||
> **用途**:定义具体的标签
|
||
|
||
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|--------|------|
|
||
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
|
||
| companyId | int(11) UNSIGNED | 是 | - | 公司ID(0=系统默认) |
|
||
| categoryId | int(11) UNSIGNED | 否 | 0 | 所属类目ID |
|
||
| tagType | tinyint(2) | 是 | - | 标签类型:1=微信标签,2=站内标签,3=AI标签 |
|
||
| tagCode | varchar(50) | 是 | - | 标签编码 |
|
||
| tagName | varchar(50) | 是 | - | 标签名称 |
|
||
| tagIcon | varchar(255) | 否 | NULL | 标签图标 |
|
||
| tagColor | varchar(20) | 否 | NULL | 标签颜色 |
|
||
| description | varchar(255) | 否 | NULL | 标签描述 |
|
||
| isSystem | tinyint(1) | 否 | 0 | 是否系统默认:0=否,1=是 |
|
||
| isExclusive | tinyint(1) | 否 | 0 | 是否互斥标签:0=否,1=是(同类目下只能选一个) |
|
||
| sort | int(11) | 否 | 0 | 排序 |
|
||
| status | tinyint(1) | 否 | 1 | 状态:0=禁用,1=启用 |
|
||
| useCount | int(11) | 否 | 0 | 使用次数(缓存) |
|
||
| syncFromWechat | tinyint(1) | 否 | 0 | 是否来自微信同步:0=否,1=是 |
|
||
| userId | int(11) | 否 | NULL | 创建用户ID |
|
||
| createTime | int(11) | 是 | - | 创建时间 |
|
||
| updateTime | int(11) | 否 | NULL | 更新时间 |
|
||
| isDel | tinyint(1) | 否 | 0 | 是否删除 |
|
||
| deleteTime | int(11) | 否 | NULL | 删除时间 |
|
||
|
||
**索引设计**:
|
||
- 主键:`id`
|
||
- 唯一索引:`uk_company_code (companyId, tagCode)`
|
||
- 普通索引:`idx_companyId`、`idx_categoryId`、`idx_tagType`、`idx_tagName`、`idx_status`
|
||
|
||
---
|
||
|
||
### 5.5 流量标签关联表 `ck_traffic_pool_tag`
|
||
|
||
> **用途**:记录流量与标签的关联关系
|
||
|
||
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|--------|------|
|
||
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
|
||
| poolCompanyId | int(11) UNSIGNED | 是 | - | 公司流量详情表ID |
|
||
| identifier | varchar(64) | 是 | - | 流量标识(冗余) |
|
||
| companyId | int(11) UNSIGNED | 是 | - | 公司ID |
|
||
| **标签信息** |
|
||
| tagDefineId | int(11) UNSIGNED | 是 | - | 标签定义ID |
|
||
| tagType | tinyint(2) | 是 | - | 标签类型:1=微信标签,2=站内标签,3=AI标签 |
|
||
| categoryId | int(11) UNSIGNED | 否 | 0 | 类目ID(冗余) |
|
||
| tagName | varchar(50) | 是 | - | 标签名称(冗余,方便查询) |
|
||
| tagValue | varchar(255) | 否 | NULL | 标签值(部分标签需要值,如:消费金额=1000) |
|
||
| **来源信息** |
|
||
| source | tinyint(2) | 否 | 1 | 打标来源:1=手动,2=规则自动,3=AI自动,4=微信同步 |
|
||
| sourceId | varchar(100) | 否 | NULL | 来源ID(规则ID/AI任务ID等) |
|
||
| sourceRemark | varchar(255) | 否 | NULL | 来源备注 |
|
||
| **操作信息** |
|
||
| operatorId | int(11) | 否 | NULL | 操作人ID |
|
||
| score | decimal(5,2) | 否 | NULL | AI标签置信度(0-100,仅AI标签使用) |
|
||
| expireTime | int(11) | 否 | NULL | 过期时间(部分标签有时效性) |
|
||
| createTime | int(11) | 是 | - | 创建时间 |
|
||
| updateTime | int(11) | 否 | NULL | 更新时间 |
|
||
| isDel | tinyint(1) | 否 | 0 | 是否删除 |
|
||
| deleteTime | int(11) | 否 | NULL | 删除时间 |
|
||
|
||
**索引设计**:
|
||
- 主键:`id`
|
||
- 唯一索引:`uk_pool_tag (poolCompanyId, tagDefineId)`
|
||
- 普通索引:`idx_identifier_company`、`idx_tagDefineId`、`idx_tagType`、`idx_categoryId`、`idx_tagName`
|
||
|
||
---
|
||
|
||
### 5.6 系统默认标签类目
|
||
|
||
系统初始化时需要插入以下默认类目:
|
||
|
||
**微信标签类目**(tagType=1):
|
||
| 类目编码 | 类目名称 | 说明 |
|
||
|----------|----------|------|
|
||
| wechat_default | 微信默认标签 | 从微信同步的标签 |
|
||
|
||
**站内标签类目**(tagType=2):
|
||
| 类目编码 | 类目名称 | 说明 |
|
||
|----------|----------|------|
|
||
| customer_level | 客户等级 | 普通/重要/VIP |
|
||
| customer_intention | 客户意向 | 低意向/中意向/高意向 |
|
||
| customer_stage | 客户阶段 | 新客户/跟进中/已成交/已流失 |
|
||
| customer_source | 客户来源 | 海报/电话/群聊/好友推荐等 |
|
||
| customer_industry | 所属行业 | 行业分类标签 |
|
||
| customer_preference | 客户偏好 | 产品偏好/服务偏好等 |
|
||
|
||
**AI标签类目**(tagType=3):
|
||
| 类目编码 | 类目名称 | 说明 |
|
||
|----------|----------|------|
|
||
| ai_portrait | AI画像标签 | AI分析的用户画像 |
|
||
| ai_behavior | AI行为标签 | AI分析的行为特征 |
|
||
| ai_prediction | AI预测标签 | AI预测的标签(如:高转化潜力) |
|
||
|
||
---
|
||
|
||
### 5.7 流量行为表 `ck_traffic_pool_behavior`
|
||
|
||
> **用途**:记录流量的各种行为(包括所有消息互动)
|
||
|
||
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|--------|------|
|
||
| id | bigint(20) UNSIGNED | 是 | AUTO | 主键ID |
|
||
| poolCompanyId | int(11) UNSIGNED | 是 | - | 公司流量详情表ID |
|
||
| identifier | varchar(64) | 是 | - | 流量标识(冗余) |
|
||
| companyId | int(11) UNSIGNED | 是 | - | 公司ID |
|
||
| **行为信息** |
|
||
| behaviorType | tinyint(2) | 是 | - | 行为类型(见下表) |
|
||
| behaviorSubType | varchar(50) | 否 | NULL | 行为子类型 |
|
||
| behaviorName | varchar(100) | 否 | NULL | 行为名称 |
|
||
| **行为详情** |
|
||
| targetType | varchar(50) | 否 | NULL | 目标类型 |
|
||
| targetId | varchar(100) | 否 | NULL | 目标ID |
|
||
| targetName | varchar(255) | 否 | NULL | 目标名称 |
|
||
| amount | decimal(12,2) | 否 | 0.00 | 金额 |
|
||
| **关联信息**(只记录ID,通过ID关联查询详情) |
|
||
| wechatAccountId | int(11) | 否 | NULL | 客服微信账号ID |
|
||
| messageId | bigint(20) | 否 | NULL | 消息ID(关联s2_wechat_message.id) |
|
||
| momentsId | int(11) | 否 | NULL | 朋友圈ID(关联s2_wechat_moments.id) |
|
||
| orderId | varchar(50) | 否 | NULL | 订单号 |
|
||
| extra | json | 否 | NULL | 额外信息 |
|
||
| remark | varchar(255) | 否 | NULL | 备注 |
|
||
| behaviorTime | int(11) | 是 | - | 行为时间 |
|
||
| createTime | int(11) | 是 | - | 创建时间 |
|
||
|
||
**行为类型枚举**:
|
||
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| 1 | 发送消息 |
|
||
| 2 | 接收消息 |
|
||
| 3 | 浏览 |
|
||
| 4 | 点击 |
|
||
| 5 | 咨询 |
|
||
| 6 | 下单 |
|
||
| 7 | 支付 |
|
||
| 8 | 退款 |
|
||
| 9 | 点赞朋友圈 |
|
||
| 10 | 评论朋友圈 |
|
||
|
||
---
|
||
|
||
### 5.8 流量分配记录表 `ck_traffic_pool_allot_record`
|
||
|
||
> **用途**:记录流量的分配历史
|
||
|
||
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|--------|------|
|
||
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
|
||
| poolCompanyId | int(11) UNSIGNED | 是 | - | 公司流量详情表ID |
|
||
| identifier | varchar(64) | 是 | - | 流量标识(冗余) |
|
||
| companyId | int(11) UNSIGNED | 是 | - | 公司ID |
|
||
| **分配信息** |
|
||
| allotType | tinyint(2) | 否 | 1 | 分配类型:1=首次分配,2=重新分配,3=回收后分配 |
|
||
| allotRuleId | int(11) | 否 | NULL | 分配规则ID |
|
||
| **分配前** |
|
||
| fromWechatId | varchar(64) | 否 | NULL | 原归属客服微信ID |
|
||
| fromAccountId | int(11) | 否 | NULL | 原归属账号ID |
|
||
| fromUserId | int(11) | 否 | NULL | 原归属操盘手ID |
|
||
| **分配后** |
|
||
| toWechatId | varchar(64) | 是 | - | 新归属客服微信ID |
|
||
| toAccountId | int(11) | 否 | NULL | 新归属账号ID |
|
||
| toUserId | int(11) | 否 | NULL | 新归属操盘手ID |
|
||
| **有效期** |
|
||
| expireDays | int(11) | 否 | 30 | 有效期(天) |
|
||
| expireTime | int(11) | 否 | NULL | 到期时间 |
|
||
| status | tinyint(2) | 否 | 1 | 状态:1=生效中,2=已过期,3=已回收 |
|
||
| operatorId | int(11) | 否 | NULL | 操作人ID |
|
||
| remark | varchar(255) | 否 | NULL | 备注 |
|
||
| createTime | int(11) | 是 | - | 创建时间 |
|
||
| updateTime | int(11) | 否 | NULL | 更新时间 |
|
||
|
||
---
|
||
|
||
## 六、系统默认数据
|
||
|
||
### 6.1 默认流量池分组(含规则)
|
||
|
||
> ⚠️ 规则使用 JSON 格式存储在 `ruleConfig` 字段中
|
||
|
||
```sql
|
||
INSERT INTO `ck_traffic_pool_group`
|
||
(`companyId`, `groupCode`, `groupName`, `description`, `isSystem`, `isDefault`, `ruleType`, `ruleConfig`, `sort`, `status`)
|
||
VALUES
|
||
-- 全部好友流量池
|
||
(0, 'all_friends', '全部好友流量池', '所有已添加的好友', 1, 1, 1,
|
||
'{"logic":"AND","conditions":[{"type":"field","field":"friendStatus","operator":"=","value":2,"valueType":"number"}]}',
|
||
1, 1),
|
||
|
||
-- 高价值客户池:已通过好友 AND (消费>=1000 OR 等级=VIP)
|
||
(0, 'high_value', '高价值客户池', '消费金额高的客户', 1, 0, 1,
|
||
'{"logic":"AND","conditions":[{"type":"field","field":"friendStatus","operator":"=","value":2,"valueType":"number"},{"type":"group","logic":"OR","conditions":[{"type":"field","field":"rfmM","operator":">=","value":1000,"valueType":"number"},{"type":"field","field":"level","operator":"=","value":2,"valueType":"number"}]}]}',
|
||
2, 1),
|
||
|
||
-- 潜在客户池:已通过好友 AND 意向度>=中 AND 订单数=0
|
||
(0, 'potential', '潜在客户池', '有意向但未成交的客户', 1, 0, 1,
|
||
'{"logic":"AND","conditions":[{"type":"field","field":"friendStatus","operator":"=","value":2,"valueType":"number"},{"type":"field","field":"intentionLevel","operator":">=","value":2,"valueType":"number"},{"type":"field","field":"totalOrderCount","operator":"=","value":0,"valueType":"number"}]}',
|
||
3, 1),
|
||
|
||
-- 高互动客户池:已通过好友 AND 消息数>=50
|
||
(0, 'high_interact', '高互动客户池', '互动频繁的客户', 1, 0, 1,
|
||
'{"logic":"AND","conditions":[{"type":"field","field":"friendStatus","operator":"=","value":2,"valueType":"number"},{"type":"field","field":"totalMsgCount","operator":">=","value":50,"valueType":"number"}]}',
|
||
4, 1);
|
||
```
|
||
|
||
---
|
||
|
||
## 七、与现有表的关联关系
|
||
|
||
### 7.1 关联图
|
||
|
||
```
|
||
┌─────────────────────┐ ┌─────────────────────┐
|
||
│ s2_wechat_account │◄────────│ ck_traffic_pool_ │
|
||
│ (微信客服号) │ │ company │
|
||
└─────────────────────┘ │ (ownerWechatId) │
|
||
│ └─────────────────────┘
|
||
│ │
|
||
▼ │
|
||
┌─────────────────────┐ │
|
||
│ s2_wechat_friend │◄─────────────────┘
|
||
│ (微信好友) │ (wechatFriendId)
|
||
└─────────────────────┘
|
||
│
|
||
│ wechatId
|
||
▼
|
||
┌─────────────────────┐
|
||
│ ck_traffic_pool │
|
||
│ (流量池总表) │
|
||
│ (identifier) │
|
||
└─────────────────────┘
|
||
```
|
||
|
||
### 7.2 关联字段映射
|
||
|
||
| 新表字段 | 关联表 | 关联字段 | 说明 |
|
||
|----------|--------|----------|------|
|
||
| `ck_traffic_pool.identifier` | `s2_wechat_friend` | `wechatId` | 微信ID匹配 |
|
||
| `ck_traffic_pool_company.wechatFriendId` | `s2_wechat_friend` | `id` | 好友ID关联 |
|
||
| `ck_traffic_pool_company.ownerWechatId` | `s2_wechat_account` | `wechatId` | 客服微信ID |
|
||
| `ck_traffic_pool_company.ownerAccountId` | `s2_wechat_account` | `id` | 客服账号ID |
|
||
| `ck_traffic_pool_source.friendTaskId` | `s2_friend_task` | `id` | 加好友任务ID |
|
||
| `ck_traffic_pool_behavior.messageId` | `s2_wechat_message` | `id` | 消息ID |
|
||
|
||
---
|
||
|
||
## 八、核心业务流程
|
||
|
||
### 8.1 流量入池流程
|
||
|
||
```
|
||
1. 新流量进入(好友添加/群成员/获客等)
|
||
↓
|
||
2. 提取 identifier(优先微信ID)
|
||
↓
|
||
3. 查询 ck_traffic_pool 是否存在
|
||
├── 不存在 → 创建总表记录
|
||
└── 存在 → 获取 poolId
|
||
↓
|
||
4. 查询 ck_traffic_pool_company 是否存在该公司记录
|
||
├── 不存在 → 创建公司记录
|
||
└── 存在 → 更新公司记录
|
||
↓
|
||
5. 创建 ck_traffic_pool_source 来源记录
|
||
↓
|
||
6. 同步标签到 ck_traffic_pool_tag
|
||
↓
|
||
7. 根据分配规则执行分配 → ck_traffic_pool_allot_record
|
||
```
|
||
|
||
### 8.2 好友通过同步流程
|
||
|
||
```
|
||
1. s2_wechat_friend 新增好友通过记录
|
||
↓
|
||
2. 根据 wechatId 匹配 ck_traffic_pool
|
||
↓
|
||
3. 更新 ck_traffic_pool_company:
|
||
- wechatFriendId = 好友ID
|
||
- friendStatus = 2
|
||
- friendPassTime = 当前时间
|
||
↓
|
||
4. 同步好友标签到 ck_traffic_pool_tag
|
||
↓
|
||
5. 更新总表基础信息(昵称、头像等)
|
||
```
|
||
|
||
### 8.3 消息互动记录流程
|
||
|
||
```
|
||
1. s2_wechat_message 新增消息记录
|
||
↓
|
||
2. 根据 wechatFriendId 找到对应流量
|
||
↓
|
||
3. 创建 ck_traffic_pool_behavior 行为记录
|
||
↓
|
||
4. 更新 ck_traffic_pool_company:
|
||
- totalMsgCount += 1
|
||
- lastMsgTime = 当前时间
|
||
- rfmR = 0(重置为今天)
|
||
- rfmF += 1
|
||
```
|
||
|
||
### 8.4 流量池分组查询流程
|
||
|
||
```
|
||
1. 获取分组配置
|
||
↓
|
||
2. 解析规则配置 ruleConfig
|
||
↓
|
||
3. 动态构建 SQL 查询条件
|
||
↓
|
||
4. 查询 ck_traffic_pool_company
|
||
↓
|
||
5. 返回分组成员列表
|
||
```
|
||
|
||
---
|
||
|
||
## 九、确认事项
|
||
|
||
> ✅ 以下事项已全部确认
|
||
|
||
| 事项 | 确认结果 |
|
||
|------|----------|
|
||
| identifier 优先级 | ✅ 微信ID优先 |
|
||
| 表名前缀 | ✅ ck_ 开头 |
|
||
| 行为记录 | ✅ 需要记录所有消息互动(只记录消息ID,通过ID关联查询详情) |
|
||
| 标签同步 | ✅ 需要同步微信好友标签 |
|
||
| 流量池分组 | ✅ 支持系统默认和自定义分组,一个流量可属于多个分组 |
|
||
| 身份证字段 | ✅ 新增身份证号字段 |
|
||
| 标签分类 | ✅ 分为微信标签、站内标签、AI标签,支持类目扩展 |
|
||
|
||
---
|
||
|
||
## 十、开发注意事项
|
||
|
||
### 10.1 统计字段并发更新规范
|
||
|
||
> ⚠️ `totalMsgCount`、`totalOrderCount` 等统计字段在高并发场景下需使用原子操作
|
||
|
||
**错误示例**:
|
||
```php
|
||
// ❌ 可能导致数据丢失
|
||
$record = Model::find($id);
|
||
$record->totalMsgCount = $record->totalMsgCount + 1;
|
||
$record->save();
|
||
```
|
||
|
||
**正确示例**:
|
||
```php
|
||
// ✅ 使用原子操作
|
||
Db::table('ck_traffic_pool_company')
|
||
->where('id', $id)
|
||
->inc('totalMsgCount', 1)
|
||
->update();
|
||
|
||
// ✅ 或使用 SQL
|
||
UPDATE ck_traffic_pool_company
|
||
SET totalMsgCount = totalMsgCount + 1,
|
||
lastMsgTime = UNIX_TIMESTAMP(),
|
||
lastInteractTime = UNIX_TIMESTAMP()
|
||
WHERE id = ?;
|
||
```
|
||
|
||
### 10.2 RFM R值计算方式
|
||
|
||
R值不存储天数,而是存储 `lastInteractTime` 时间戳,查询时动态计算:
|
||
|
||
```sql
|
||
SELECT
|
||
*,
|
||
DATEDIFF(NOW(), FROM_UNIXTIME(lastInteractTime)) AS rfmR
|
||
FROM ck_traffic_pool_company
|
||
WHERE companyId = ?;
|
||
```
|
||
|
||
### 10.3 首次来源标记
|
||
|
||
流量入池时,需判断是否为首次来源:
|
||
|
||
```php
|
||
// 检查是否已有来源记录
|
||
$existSource = Db::table('ck_traffic_pool_source')
|
||
->where('poolCompanyId', $poolCompanyId)
|
||
->find();
|
||
|
||
$isFirstSource = $existSource ? 0 : 1;
|
||
|
||
// 如果是首次来源,同时更新 company 表的首次来源字段
|
||
if ($isFirstSource) {
|
||
Db::table('ck_traffic_pool_company')
|
||
->where('id', $poolCompanyId)
|
||
->update([
|
||
'firstSourceType' => $sourceType,
|
||
'firstSourceTime' => time()
|
||
]);
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 十一、下一步计划
|
||
|
||
确认本文档后,将进行以下开发工作:
|
||
|
||
1. **创建 SQL 文件**:生成所有表的建表语句
|
||
2. **数据迁移脚本**:(如需要)从旧表迁移数据
|
||
3. **Model 层开发**:创建对应的 PHP Model 类
|
||
4. **Service 层开发**:实现核心业务逻辑
|
||
5. **Controller 层开发**:实现 API 接口
|
||
6. **前端页面开发**:流量池管理界面
|
||
|
||
---
|
||
|
||
**请确认以上设计方案,确认后开始开发。**
|
||
|