|
|
@@ -0,0 +1,966 @@
|
|
|
+# 电商平台店铺客户消息收发功能 — 技术方案
|
|
|
+
|
|
|
+## 一、项目概述
|
|
|
+
|
|
|
+### 1.1 目标
|
|
|
+
|
|
|
+作为 SaaS 平台,接入**抖音(抖店)、快手、小红书**三家电商平台的店铺客户消息收发能力,使入驻平台的商家店铺能够通过我们的系统接收和回复客户消息,并实现 **AI 自动回复**。
|
|
|
+
|
|
|
+### 1.2 核心能力
|
|
|
+
|
|
|
+| 能力 | 说明 |
|
|
|
+|------|------|
|
|
|
+| 消息接收 | 实时接收三个平台店铺的客户消息(文本、图片、卡片等) |
|
|
|
+| 消息发送 | 通过平台 API 向客户回复消息(文本、图片、商品卡片等) |
|
|
|
+| AI 自动回复 | 对接 AI 模型,根据客户消息自动生成回复内容 |
|
|
|
+| 多店铺管理 | 一个租户可绑定多个平台的多个店铺 |
|
|
|
+| 会话管理 | 统一管理跨平台的客户会话,支持人工接管 |
|
|
|
+
|
|
|
+### 1.3 三平台接入方式对比
|
|
|
+
|
|
|
+| 维度 | 抖音(抖店) | 快手 | 小红书 |
|
|
|
+|------|-------------|------|--------|
|
|
|
+| 开放平台 | 抖店开放平台 op.jinritemai.com | 快手电商开放平台 open.kwaixiaodian.com | 小红书开放平台 open.xiaohongshu.com |
|
|
|
+| 消息接收 | 飞鸽消息推送(WebSocket / HTTP 回调) | 快手消息服务(HTTP 回调) | 聚光平台私信通 API(HTTP 回调) |
|
|
|
+| 消息发送 | 飞鸽 API / 三方客服 API | 快手私信三方客服 API | 聚光私信 API |
|
|
|
+| 应用类型 | 自用型 / 第三方应用 | 自用型 / 第三方应用 | 品牌商 / ISV 服务商 |
|
|
|
+| 认证方式 | OAuth2.0 + access_token | OAuth2.0 + access_token | OAuth2.0 + access_token |
|
|
|
+| 消息类型 | 文本、图片、商品卡片、订单卡片等 | 文本、图片、商品卡片、订单卡片等 | 文本、图片、笔记卡片等 |
|
|
|
+| 回复时效 | 48小时内可回复 | 用户互动后 48 小时内 | 用户进线后 24 小时内 |
|
|
|
+| 主动触达 | 支持场景化主动私信 | 支持潜客主动触达 | 仅限回复场景 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 二、整体架构
|
|
|
+
|
|
|
+### 2.1 系统架构图
|
|
|
+
|
|
|
+```
|
|
|
+┌─────────────────────────────────────────────────────────────────────────────┐
|
|
|
+│ SaaS 平台 │
|
|
|
+│ │
|
|
|
+│ ┌──────────┐ ┌──────────────────────────────────────────────────────┐ │
|
|
|
+│ │ 管理后台 │ │ 消息中台服务 │ │
|
|
|
+│ │ (fs-admin)│ │ │ │
|
|
|
+│ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
|
|
+│ │ ·店铺管理 │ │ │ 抖音消息适配 │ │ 快手消息适配 │ │ 小红书消息适配│ │ │
|
|
|
+│ │ ·会话监控 │ │ │ (Douyin) │ │ (Kuaishou) │ │(Xiaohongshu)│ │ │
|
|
|
+│ │ ·话术配置 │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │
|
|
|
+│ │ ·数据统计 │ │ │ │ │ │ │
|
|
|
+│ └──────────┘ │ ┌──────┴───────────────┴───────────────┴──────┐ │ │
|
|
|
+│ │ │ 统一消息处理层 │ │ │
|
|
|
+│ ┌──────────┐ │ │ ·消息标准化 ·会话管理 ·路由分发 ·限流 │ │ │
|
|
|
+│ │ 客服工作台│ │ └──────────────────────┬──────────────────────┘ │ │
|
|
|
+│ │(company-app)│ │ │ │
|
|
|
+│ │ │ │ ┌──────────────────────┴──────────────────────┐ │ │
|
|
|
+│ │ ·实时会话 │ │ │ AI 回复引擎 │ │ │
|
|
|
+│ │ ·人工接管 │ │ │ ·意图识别 ·知识库匹配 ·LLM 生成 ·审核 │ │ │
|
|
|
+│ │ ·快捷话术 │ │ └────────────────────────────────────────────┘ │ │
|
|
|
+│ └──────────┘ └──────────────────────────────────────────────────────┘ │
|
|
|
+│ │
|
|
|
+│ ┌──────────────────────────────────────────────────────────────────────┐ │
|
|
|
+│ │ 基础设施层 │ │
|
|
|
+│ │ ·MySQL(主库 + 租户库) ·Redis(缓存/会话) ·MQ(消息队列) │ │
|
|
|
+│ └──────────────────────────────────────────────────────────────────────┘ │
|
|
|
+└─────────────────────────────────────────────────────────────────────────────┘
|
|
|
+ ▲ ▲ ▲
|
|
|
+ │ HTTP 回调 │ HTTP 回调 │ HTTP 回调
|
|
|
+ │ │ │
|
|
|
+ ┌──────┴──────┐ ┌────────┴───────┐ ┌──────┴──────┐
|
|
|
+ │ 抖店飞鸽 │ │ 快手消息服务 │ │ 小红书聚光 │
|
|
|
+ │ 消息推送 │ │ 消息推送 │ │ 私信通推送 │
|
|
|
+ └─────────────┘ └────────────────┘ └─────────────┘
|
|
|
+```
|
|
|
+
|
|
|
+### 2.2 消息流转流程
|
|
|
+
|
|
|
+```
|
|
|
+客户发消息 → 平台推送 → 我们的回调接口 → 消息标准化 → 入库 → AI 处理 → 回复消息 → 调用平台 API → 客户收到回复
|
|
|
+```
|
|
|
+
|
|
|
+详细步骤:
|
|
|
+
|
|
|
+1. **客户在电商平台发消息**:买家在抖音/快手/小红书店铺的客服对话中发送消息
|
|
|
+2. **平台推送消息**:平台通过 HTTP 回调将消息推送到我们配置的回调地址
|
|
|
+3. **接收并验签**:我们的回调接口接收消息,验证签名确保消息来源合法
|
|
|
+4. **消息标准化**:将不同平台的消息格式转换为统一的内部消息模型
|
|
|
+5. **持久化存储**:将消息存入租户数据库,关联会话
|
|
|
+6. **AI 处理**:将消息发送给 AI 引擎,生成回复内容
|
|
|
+7. **发送回复**:调用对应平台的消息发送 API,将回复发送给客户
|
|
|
+8. **记录日志**:记录消息收发日志,更新会话状态
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 三、各平台接入详情
|
|
|
+
|
|
|
+### 3.1 抖音(抖店)接入
|
|
|
+
|
|
|
+#### 3.1.1 接入前置条件
|
|
|
+
|
|
|
+| 条件 | 说明 |
|
|
|
+|------|------|
|
|
|
+| 开放平台账号 | 注册抖店开放平台,完成企业认证 |
|
|
|
+| 应用创建 | 创建「第三方应用」(SaaS 平台作为服务商)或商家创建「自用型应用」 |
|
|
|
+| 应用类目 | 选择「商家后台系统」或「客服管理」类目 |
|
|
|
+| 权限申请 | 申请「飞鸽消息」权限包(含飞鸽会话消息推送、发送消息等) |
|
|
|
+| 店铺授权 | 商家在抖店后台授权应用访问店铺数据 |
|
|
|
+
|
|
|
+#### 3.1.2 核心接口
|
|
|
+
|
|
|
+**(1)消息接收 — 飞鸽会话消息推送**
|
|
|
+
|
|
|
+- **推送方式**:HTTP POST 回调
|
|
|
+- **消息 tag**:`143`(飞鸽会话消息)
|
|
|
+- **推送地址**:在开放平台控制台配置
|
|
|
+
|
|
|
+消息体结构:
|
|
|
+```json
|
|
|
+[
|
|
|
+ {
|
|
|
+ "tag": "143",
|
|
|
+ "msgId": "0443477XXXXXXX48874::xxx:1618990587:6837374XXXXXXX89128",
|
|
|
+ "data": {
|
|
|
+ "conversation_id": 7316734919177160000,
|
|
|
+ "content": "你好,请问在吗?",
|
|
|
+ "extra": "{}",
|
|
|
+ "server_msg_id": 1786312592802848,
|
|
|
+ "sender_role": "Buyer",
|
|
|
+ "customer_hint": "提示信息",
|
|
|
+ "type": "text",
|
|
|
+ "create_time": 1703560445,
|
|
|
+ "card_type": "",
|
|
|
+ "data_id": "",
|
|
|
+ "foot_text": "",
|
|
|
+ "doudian_open_id": "xxxxxx",
|
|
|
+ "aid": "1128",
|
|
|
+ "shop_id": 77977,
|
|
|
+ "pigeon_cid": "72123232377977"
|
|
|
+ }
|
|
|
+ }
|
|
|
+]
|
|
|
+```
|
|
|
+
|
|
|
+关键字段说明:
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|------|------|
|
|
|
+| `conversation_id` | 会话 ID,回复消息时需要 |
|
|
|
+| `content` | 消息内容(文本消息为文字,图片消息为图片 URL) |
|
|
|
+| `sender_role` | 发送方角色:`Buyer`(买家)、`System`、`Robot`、`CurrentServer` |
|
|
|
+| `type` | 消息类型:`text`(文本)、`image`(图片)、`card`(卡片) 等 |
|
|
|
+| `server_msg_id` | 消息 ID,回复时需要引用 |
|
|
|
+| `shop_id` | 店铺 ID,用于区分不同店铺 |
|
|
|
+| `doudian_open_id` | 用户 Open ID |
|
|
|
+
|
|
|
+**(2)消息发送 — 飞鸽 API**
|
|
|
+
|
|
|
+发送文本消息接口:
|
|
|
+- **接口地址**:`https://openapi-fxg.jinritemai.com/pigeon/sendMessage`
|
|
|
+- **请求方式**:POST
|
|
|
+- **认证方式**:access_token(通过 OAuth2.0 获取)
|
|
|
+
|
|
|
+请求参数:
|
|
|
+```json
|
|
|
+{
|
|
|
+ "conversation_id": 7316734919177160000,
|
|
|
+ "msg_type": "text",
|
|
|
+ "content": "{\"text\":\"您好,有什么可以帮您?\"}",
|
|
|
+ "shop_id": "77977"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**(3)三方客服 API(推荐)**
|
|
|
+
|
|
|
+抖店开放平台提供「三方客服 API」,允许第三方系统以客服身份接入飞鸽,实现消息收发:
|
|
|
+
|
|
|
+| 接口 | 说明 |
|
|
|
+|------|------|
|
|
|
+| 会话事件推送 | 客户进线、会话分配等事件推送 |
|
|
|
+| 接收消息推送 | 客户发送的消息实时推送 |
|
|
|
+| 发送消息 | 以客服身份向客户发送消息 |
|
|
|
+| 获取会话列表 | 获取当前客服接待的会话列表 |
|
|
|
+| 结束会话 | 主动结束会话 |
|
|
|
+
|
|
|
+#### 3.1.3 OAuth2.0 授权流程
|
|
|
+
|
|
|
+```
|
|
|
+商家点击授权 → 跳转抖店授权页 → 商家同意授权 → 回调带 code → 用 code 换 access_token → 刷新 token
|
|
|
+```
|
|
|
+
|
|
|
+- **授权 URL**:`https://openapi-fxg.jinritemai.com/oauth/authorize`
|
|
|
+- **Token URL**:`https://openapi-fxg.jinritemai.com/oauth/token`
|
|
|
+- **access_token 有效期**:通常 24 小时
|
|
|
+- **refresh_token 有效期**:通常 30 天
|
|
|
+
|
|
|
+#### 3.1.4 消息推送验签
|
|
|
+
|
|
|
+抖店使用 MD5 或 HMAC-SHA256 签名验证:
|
|
|
+
|
|
|
+```
|
|
|
+签名原文 = app_id + body + app_secret
|
|
|
+签名结果 = MD5(签名原文) 或 HMAC-SHA256(app_secret, 签名原文)
|
|
|
+```
|
|
|
+
|
|
|
+请求头中携带:
|
|
|
+- `event-sign`:签名值
|
|
|
+- `app-id`:应用 app_key
|
|
|
+
|
|
|
+#### 3.1.5 飞鸽插件接入(可选增强)
|
|
|
+
|
|
|
+飞鸽支持右侧工作台插件,可在客服工作台嵌入我们的 AI 面板:
|
|
|
+
|
|
|
+- 插件类型:机器人
|
|
|
+- 页面规范:宽度 410px,高度不限
|
|
|
+- 接入流程:创建应用 → 申请飞鸽插件权限 → 开发插件 → 上线
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 3.2 快手接入
|
|
|
+
|
|
|
+#### 3.2.1 接入前置条件
|
|
|
+
|
|
|
+| 条件 | 说明 |
|
|
|
+|------|------|
|
|
|
+| 开放平台账号 | 注册快手电商开放平台,完成企业认证 |
|
|
|
+| 应用创建 | 创建「第三方应用」(SaaS 服务商)或「自用型应用」 |
|
|
|
+| 权限申请 | 申请「客服管理」相关权限(客服质检、智能客服等) |
|
|
|
+| 店铺授权 | 商家授权应用访问店铺数据 |
|
|
|
+
|
|
|
+#### 3.2.2 核心接口
|
|
|
+
|
|
|
+**(1)消息接收 — 快手消息服务**
|
|
|
+
|
|
|
+- **推送方式**:HTTP POST 回调
|
|
|
+- **推送地址**:在快手开放平台控制台配置
|
|
|
+- **消息加密**:AES 加密,需使用 app_secret 解密
|
|
|
+
|
|
|
+消息体结构(解密后):
|
|
|
+```json
|
|
|
+{
|
|
|
+ "biz_type": "im_message",
|
|
|
+ "data": {
|
|
|
+ "conversation_id": "xxx",
|
|
|
+ "msg_id": "xxx",
|
|
|
+ "msg_type": "text",
|
|
|
+ "content": "{\"text\":\"你好\"}",
|
|
|
+ "from_open_id": "xxx",
|
|
|
+ "to_open_id": "xxx",
|
|
|
+ "create_time": 1703560445000,
|
|
|
+ "shop_id": 123456
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**(2)消息发送 — 快手私信三方客服 API**
|
|
|
+
|
|
|
+- **接口地址**:`https://open.kuaishou.com/openapi/message/send`
|
|
|
+- **请求方式**:POST
|
|
|
+- **认证方式**:access_token
|
|
|
+
|
|
|
+请求参数:
|
|
|
+```json
|
|
|
+{
|
|
|
+ "request_id": "uuid-xxx",
|
|
|
+ "open_id": "商家 openId",
|
|
|
+ "app_id": "应用 appId",
|
|
|
+ "kpn": "KUAISHOU",
|
|
|
+ "sub_biz": "KSIM_TO_ADIM",
|
|
|
+ "scene": "im_reply_msg",
|
|
|
+ "target_open_id": "客户 openId",
|
|
|
+ "msg_type": "text",
|
|
|
+ "content": "{\"text\":\"您好,有什么可以帮您?\"}"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**(3)潜客主动触达**
|
|
|
+
|
|
|
+快手支持对潜客(10日内有互动行为的用户)主动发送消息:
|
|
|
+
|
|
|
+- **接口地址**:`https://open.kuaishou.com/openapi/kuailiao/potentialUsersPage`
|
|
|
+- **scene**:`im_potential_customer_msg`
|
|
|
+- **限制**:单 appid QPS 10;每日主动沟通额度有限
|
|
|
+
|
|
|
+#### 3.2.3 OAuth2.0 授权流程
|
|
|
+
|
|
|
+```
|
|
|
+商家点击授权 → 跳转快手授权页 → 商家同意授权 → 回调带 code → 用 code 换 access_token → 刷新 token
|
|
|
+```
|
|
|
+
|
|
|
+- **授权 URL**:`https://open.kuaishou.com/oauth2/authorize`
|
|
|
+- **Token URL**:`https://open.kuaishou.com/oauth2/access_token`
|
|
|
+- **系统参数**:appkey、timestamp、access_token、version、param、method、sign、signMethod
|
|
|
+
|
|
|
+#### 3.2.4 签名算法
|
|
|
+
|
|
|
+快手使用 HMAC-SHA256 签名:
|
|
|
+
|
|
|
+```
|
|
|
+签名原文 = 将除 sign 外的所有系统参数和业务参数按字母排序拼接
|
|
|
+签名结果 = HMAC-SHA256(signSecret, 签名原文)
|
|
|
+```
|
|
|
+
|
|
|
+#### 3.2.5 消息解密
|
|
|
+
|
|
|
+快手推送的消息使用 AES 加密:
|
|
|
+
|
|
|
+```
|
|
|
+解密步骤:
|
|
|
+1. Base64 解码密文
|
|
|
+2. 使用 app_secret 作为 AES Key
|
|
|
+3. AES/CBC/PKCS5Padding 解密
|
|
|
+4. 得到明文 JSON
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 3.3 小红书接入
|
|
|
+
|
|
|
+#### 3.3.1 接入前置条件
|
|
|
+
|
|
|
+| 条件 | 说明 |
|
|
|
+|------|------|
|
|
|
+| 开放平台账号 | 注册小红书开放平台,完成企业认证 |
|
|
|
+| 应用创建 | 创建应用,选择「商家后台系统」或「企业ERP」类目 |
|
|
|
+| 私信通开通 | 在专业号平台开通「私信通」功能 |
|
|
|
+| 聚光平台授权 | 在聚光平台完成三方客服 API 对接配置 |
|
|
|
+| 店铺授权 | 商家授权应用 |
|
|
|
+
|
|
|
+**⚠️ 重要说明**:小红书的客服消息接入路径与其他两家不同,需要同时对接**开放平台 API** 和**聚光平台私信通**:
|
|
|
+
|
|
|
+- **开放平台**:用于订单、商品等业务消息推送(HTTP 回调)
|
|
|
+- **聚光平台私信通**:用于客户私信的收发(通过聚光平台配置回调地址 + Token)
|
|
|
+
|
|
|
+#### 3.3.2 核心接口
|
|
|
+
|
|
|
+**(1)消息接收 — 聚光平台私信通**
|
|
|
+
|
|
|
+小红书私信通通过聚光平台推送客户私信消息:
|
|
|
+
|
|
|
+- **推送方式**:HTTP POST 回调
|
|
|
+- **配置入口**:聚光平台 → 工具 → 私信 API 对接
|
|
|
+- **认证方式**:Token 验证(在聚光平台配置时获取)
|
|
|
+
|
|
|
+消息体结构:
|
|
|
+```json
|
|
|
+{
|
|
|
+ "event_type": "im_receive_msg",
|
|
|
+ "data": {
|
|
|
+ "conversation_id": "xxx",
|
|
|
+ "msg_id": "xxx",
|
|
|
+ "msg_type": "text",
|
|
|
+ "content": "你好,请问这个商品还有吗?",
|
|
|
+ "sender_id": "xxx",
|
|
|
+ "receiver_id": "xxx",
|
|
|
+ "create_time": 1703560445,
|
|
|
+ "seller_id": "xxx"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**(2)消息发送 — 聚光私信 API**
|
|
|
+
|
|
|
+通过聚光平台配置的接口地址发送回复消息:
|
|
|
+
|
|
|
+- **接口地址**:由聚光平台分配(配置回调时获取)
|
|
|
+- **请求方式**:POST
|
|
|
+- **认证方式**:Bearer Token(聚光平台 Token)
|
|
|
+
|
|
|
+请求参数:
|
|
|
+```json
|
|
|
+{
|
|
|
+ "conversation_id": "xxx",
|
|
|
+ "msg_type": "text",
|
|
|
+ "content": "您好,商品还有库存,可以直接下单哦~"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**(3)开放平台消息推送(业务消息)**
|
|
|
+
|
|
|
+小红书开放平台支持订单、商品、售后等业务消息推送:
|
|
|
+
|
|
|
+| 消息类型 | msgTag | 说明 |
|
|
|
+|---------|--------|------|
|
|
|
+| 订单状态变更 | `msg_fulfillment_status_change` | 下单、支付、发货、收货等 |
|
|
|
+| 收货信息变更 | `msg_fulfillment_receiver_change` | 地址修改 |
|
|
|
+| 商品上下架 | `msg_item_buyable` | 商品状态变更 |
|
|
|
+| 售后申请 | `msg_after_sale_create` | 退款/退货/换货申请 |
|
|
|
+
|
|
|
+推送消息体:
|
|
|
+```json
|
|
|
+[
|
|
|
+ {
|
|
|
+ "msgTag": "msg_fulfillment_status_change",
|
|
|
+ "sellerId": "xxx",
|
|
|
+ "data": "{\"order_id\":\"xxx\",\"status\":\"paid\"}"
|
|
|
+ }
|
|
|
+]
|
|
|
+```
|
|
|
+
|
|
|
+#### 3.3.3 OAuth2.0 授权流程
|
|
|
+
|
|
|
+```
|
|
|
+商家点击授权 → 跳转小红书授权页 → 商家同意授权 → 回调带 code → 用 code 换 access_token → 刷新 token
|
|
|
+```
|
|
|
+
|
|
|
+- **授权 URL**:`https://open.xiaohongshu.com/oauth/authorize`
|
|
|
+- **Token URL**:`https://open.xiaohongshu.com/oauth/token`
|
|
|
+
|
|
|
+#### 3.3.4 签名算法
|
|
|
+
|
|
|
+小红书使用 MD5 签名:
|
|
|
+
|
|
|
+```
|
|
|
+1. 将除 sign 外的系统参数和所有请求参数按字母排序
|
|
|
+2. 用 & 连接:app-key=xhs&canshu=test×tamp=1625475843
|
|
|
+3. 拼接 url + 参数 + app-secret
|
|
|
+4. MD5 计算签名
|
|
|
+```
|
|
|
+
|
|
|
+请求头:
|
|
|
+```
|
|
|
+timestamp: 1625475843
|
|
|
+app-key: xhs
|
|
|
+sign: a7b7430de338783293443133ab9b9357
|
|
|
+```
|
|
|
+
|
|
|
+#### 3.3.5 私信通特殊限制
|
|
|
+
|
|
|
+| 限制项 | 说明 |
|
|
|
+|--------|------|
|
|
|
+| 开通条件 | 需为企业专业号 + 聚光平台推广资质认证 |
|
|
|
+| 回复时效 | 用户进线后 24 小时内可回复 |
|
|
|
+| 主动触达 | 仅限回复场景,不支持主动私信 |
|
|
|
+| 消息类型 | 支持文本、图片、视频;富文本内容会拆分 |
|
|
|
+| 表情限制 | 部分表情显示为文字 |
|
|
|
+| 月投流要求 | 聚光平台月投流超 3000 元才可生效 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 四、数据库设计
|
|
|
+
|
|
|
+### 4.1 主库表(公共/跨租户)
|
|
|
+
|
|
|
+```sql
|
|
|
+-- 平台店铺绑定表(主库)
|
|
|
+CREATE TABLE `platform_shop` (
|
|
|
+ `id` bigint NOT NULL AUTO_INCREMENT,
|
|
|
+ `tenant_id` bigint NOT NULL COMMENT '租户ID',
|
|
|
+ `platform` varchar(20) NOT NULL COMMENT '平台标识:douyin/kuaishou/xiaohongshu',
|
|
|
+ `shop_id` varchar(64) NOT NULL COMMENT '平台店铺ID',
|
|
|
+ `shop_name` varchar(128) DEFAULT NULL COMMENT '店铺名称',
|
|
|
+ `app_id` varchar(64) DEFAULT NULL COMMENT '应用ID/Key',
|
|
|
+ `app_secret` varchar(256) DEFAULT NULL COMMENT '应用Secret(加密存储)',
|
|
|
+ `access_token` varchar(512) DEFAULT NULL COMMENT '访问令牌(加密存储)',
|
|
|
+ `refresh_token` varchar(512) DEFAULT NULL COMMENT '刷新令牌(加密存储)',
|
|
|
+ `token_expire_time` datetime DEFAULT NULL COMMENT '令牌过期时间',
|
|
|
+ `callback_url` varchar(256) DEFAULT NULL COMMENT '回调地址',
|
|
|
+ `callback_token` varchar(128) DEFAULT NULL COMMENT '回调验证Token',
|
|
|
+ `callback_aes_key` varchar(256) DEFAULT NULL COMMENT '回调消息加密Key(加密存储)',
|
|
|
+ `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:0-禁用 1-启用',
|
|
|
+ `auth_status` tinyint NOT NULL DEFAULT '0' COMMENT '授权状态:0-未授权 1-已授权 2-已过期',
|
|
|
+ `last_sync_time` datetime DEFAULT NULL COMMENT '最后同步时间',
|
|
|
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
+ `del_flag` tinyint NOT NULL DEFAULT '0',
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
+ UNIQUE KEY `uk_tenant_platform_shop` (`tenant_id`, `platform`, `shop_id`),
|
|
|
+ KEY `idx_platform_shop` (`platform`, `shop_id`)
|
|
|
+) ENGINE=InnoDB COMMENT='平台店铺绑定表';
|
|
|
+```
|
|
|
+
|
|
|
+### 4.2 租户库表
|
|
|
+
|
|
|
+```sql
|
|
|
+-- 统一消息表
|
|
|
+CREATE TABLE `chat_message` (
|
|
|
+ `id` bigint NOT NULL AUTO_INCREMENT,
|
|
|
+ `msg_id` varchar(128) NOT NULL COMMENT '消息唯一ID(平台消息ID)',
|
|
|
+ `platform` varchar(20) NOT NULL COMMENT '平台:douyin/kuaishou/xiaohongshu',
|
|
|
+ `shop_id` varchar(64) NOT NULL COMMENT '平台店铺ID',
|
|
|
+ `conversation_id` varchar(128) NOT NULL COMMENT '会话ID',
|
|
|
+ `direction` tinyint NOT NULL COMMENT '方向:1-接收(客户发来) 2-发送(发给客户)',
|
|
|
+ `sender_type` varchar(20) NOT NULL COMMENT '发送者类型:customer/ai/agent/system',
|
|
|
+ `sender_id` varchar(64) DEFAULT NULL COMMENT '发送者ID',
|
|
|
+ `msg_type` varchar(20) NOT NULL COMMENT '消息类型:text/image/card/video',
|
|
|
+ `content` text COMMENT '消息内容(文本内容或JSON)',
|
|
|
+ `extra` text COMMENT '扩展信息(JSON,如图片URL、卡片数据等)',
|
|
|
+ `ai_reply_id` bigint DEFAULT NULL COMMENT 'AI回复记录ID',
|
|
|
+ `is_read` tinyint NOT NULL DEFAULT '0' COMMENT '是否已读:0-未读 1-已读',
|
|
|
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
+ UNIQUE KEY `uk_msg_id` (`msg_id`),
|
|
|
+ KEY `idx_conversation` (`conversation_id`, `create_time`),
|
|
|
+ KEY `idx_platform_shop` (`platform`, `shop_id`, `create_time`)
|
|
|
+) ENGINE=InnoDB COMMENT='统一消息表';
|
|
|
+
|
|
|
+-- 会话表
|
|
|
+CREATE TABLE `chat_conversation` (
|
|
|
+ `id` bigint NOT NULL AUTO_INCREMENT,
|
|
|
+ `conversation_id` varchar(128) NOT NULL COMMENT '会话ID',
|
|
|
+ `platform` varchar(20) NOT NULL COMMENT '平台',
|
|
|
+ `shop_id` varchar(64) NOT NULL COMMENT '平台店铺ID',
|
|
|
+ `customer_id` varchar(64) NOT NULL COMMENT '客户ID(平台OpenID)',
|
|
|
+ `customer_name` varchar(64) DEFAULT NULL COMMENT '客户昵称',
|
|
|
+ `customer_avatar` varchar(256) DEFAULT NULL COMMENT '客户头像',
|
|
|
+ `agent_id` bigint DEFAULT NULL COMMENT '当前接待客服ID(人工接管时)',
|
|
|
+ `status` tinyint NOT NULL DEFAULT '1' COMMENT '会话状态:1-进行中 2-已结束 3-待处理',
|
|
|
+ `ai_enabled` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用AI回复:0-否 1-是',
|
|
|
+ `last_msg_time` datetime DEFAULT NULL COMMENT '最后消息时间',
|
|
|
+ `last_msg_content` varchar(512) DEFAULT NULL COMMENT '最后消息摘要',
|
|
|
+ `unread_count` int NOT NULL DEFAULT '0' COMMENT '未读消息数',
|
|
|
+ `source` varchar(64) DEFAULT NULL COMMENT '进线来源',
|
|
|
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
+ UNIQUE KEY `uk_conversation_id` (`conversation_id`),
|
|
|
+ KEY `idx_platform_shop_status` (`platform`, `shop_id`, `status`, `last_msg_time`),
|
|
|
+ KEY `idx_customer` (`customer_id`)
|
|
|
+) ENGINE=InnoDB COMMENT='会话表';
|
|
|
+
|
|
|
+-- AI回复记录表
|
|
|
+CREATE TABLE `chat_ai_reply_log` (
|
|
|
+ `id` bigint NOT NULL AUTO_INCREMENT,
|
|
|
+ `conversation_id` varchar(128) NOT NULL COMMENT '会话ID',
|
|
|
+ `msg_id` varchar(128) NOT NULL COMMENT '原始消息ID',
|
|
|
+ `platform` varchar(20) NOT NULL COMMENT '平台',
|
|
|
+ `shop_id` varchar(64) NOT NULL COMMENT '平台店铺ID',
|
|
|
+ `input_content` text COMMENT '输入内容',
|
|
|
+ `ai_response` text COMMENT 'AI回复内容',
|
|
|
+ `ai_model` varchar(64) DEFAULT NULL COMMENT 'AI模型标识',
|
|
|
+ `reply_status` tinyint NOT NULL DEFAULT '0' COMMENT '回复状态:0-待回复 1-已回复 2-回复失败 3-人工拦截',
|
|
|
+ `reply_msg_id` varchar(128) DEFAULT NULL COMMENT '回复消息ID',
|
|
|
+ `confidence` decimal(5,4) DEFAULT NULL COMMENT '置信度',
|
|
|
+ `latency_ms` int DEFAULT NULL COMMENT 'AI响应耗时(ms)',
|
|
|
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
+ KEY `idx_conversation` (`conversation_id`),
|
|
|
+ KEY `idx_msg_id` (`msg_id`)
|
|
|
+) ENGINE=InnoDB COMMENT='AI回复记录表';
|
|
|
+
|
|
|
+-- 话术库表
|
|
|
+CREATE TABLE `chat_quick_reply` (
|
|
|
+ `id` bigint NOT NULL AUTO_INCREMENT,
|
|
|
+ `tenant_id` bigint NOT NULL COMMENT '租户ID',
|
|
|
+ `platform` varchar(20) DEFAULT NULL COMMENT '适用平台(空表示通用)',
|
|
|
+ `category` varchar(64) DEFAULT NULL COMMENT '分类',
|
|
|
+ `title` varchar(128) NOT NULL COMMENT '话术标题',
|
|
|
+ `content` text NOT NULL COMMENT '话术内容',
|
|
|
+ `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序',
|
|
|
+ `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:0-禁用 1-启用',
|
|
|
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
+ PRIMARY KEY (`id`)
|
|
|
+) ENGINE=InnoDB COMMENT='话术库表';
|
|
|
+
|
|
|
+-- AI回复规则表
|
|
|
+CREATE TABLE `chat_ai_rule` (
|
|
|
+ `id` bigint NOT NULL AUTO_INCREMENT,
|
|
|
+ `tenant_id` bigint NOT NULL COMMENT '租户ID',
|
|
|
+ `platform` varchar(20) DEFAULT NULL COMMENT '适用平台',
|
|
|
+ `shop_id` varchar(64) DEFAULT NULL COMMENT '适用店铺(空表示全部)',
|
|
|
+ `rule_name` varchar(128) NOT NULL COMMENT '规则名称',
|
|
|
+ `rule_type` varchar(32) NOT NULL COMMENT '规则类型:keyword/intent/all',
|
|
|
+ `keyword` varchar(256) DEFAULT NULL COMMENT '关键词(逗号分隔)',
|
|
|
+ `intent` varchar(64) DEFAULT NULL COMMENT '意图标识',
|
|
|
+ `reply_content` text NOT NULL COMMENT '回复内容',
|
|
|
+ `priority` int NOT NULL DEFAULT '0' COMMENT '优先级(越大越优先)',
|
|
|
+ `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:0-禁用 1-启用',
|
|
|
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
+ PRIMARY KEY (`id`)
|
|
|
+) ENGINE=InnoDB COMMENT='AI回复规则表';
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 五、核心模块设计
|
|
|
+
|
|
|
+### 5.1 模块结构
|
|
|
+
|
|
|
+在现有项目中新增以下模块/包:
|
|
|
+
|
|
|
+```
|
|
|
+fs-service/
|
|
|
+└── src/main/java/com/fs/
|
|
|
+ └── chat/
|
|
|
+ ├── config/ # 配置
|
|
|
+ │ ├── ChatProperties.java
|
|
|
+ │ └── ChatMqConfig.java
|
|
|
+ ├── constant/ # 常量
|
|
|
+ │ ├── PlatformEnum.java
|
|
|
+ │ └── MsgTypeEnum.java
|
|
|
+ ├── controller/ # 回调接口
|
|
|
+ │ ├── DouyinCallbackController.java
|
|
|
+ │ ├── KuaishouCallbackController.java
|
|
|
+ │ └── XiaohongshuCallbackController.java
|
|
|
+ ├── adapter/ # 平台适配器
|
|
|
+ │ ├── PlatformAdapter.java # 适配器接口
|
|
|
+ │ ├── DouyinAdapter.java
|
|
|
+ │ ├── KuaishouAdapter.java
|
|
|
+ │ └── XiaohongshuAdapter.java
|
|
|
+ ├── client/ # 平台API客户端
|
|
|
+ │ ├── DouyinClient.java
|
|
|
+ │ ├── KuaishouClient.java
|
|
|
+ │ └── XiaohongshuClient.java
|
|
|
+ ├── domain/ # 实体
|
|
|
+ │ ├── ChatMessage.java
|
|
|
+ │ ├── ChatConversation.java
|
|
|
+ │ ├── ChatAiReplyLog.java
|
|
|
+ │ └── UnifiedMessage.java # 统一消息模型
|
|
|
+ ├── mapper/ # Mapper
|
|
|
+ ├── service/ # 服务
|
|
|
+ │ ├── ChatMessageService.java
|
|
|
+ │ ├── ChatConversationService.java
|
|
|
+ │ ├── ChatAiService.java
|
|
|
+ │ ├── PlatformAuthService.java
|
|
|
+ │ └── impl/
|
|
|
+ └── mq/ # 消息队列
|
|
|
+ ├── MessageConsumer.java
|
|
|
+ └── MessageProducer.java
|
|
|
+```
|
|
|
+
|
|
|
+### 5.2 统一消息模型
|
|
|
+
|
|
|
+```java
|
|
|
+public class UnifiedMessage {
|
|
|
+
|
|
|
+ private String platform;
|
|
|
+ private String shopId;
|
|
|
+ private String conversationId;
|
|
|
+ private String msgId;
|
|
|
+ private String msgType;
|
|
|
+ private String content;
|
|
|
+ private String senderType;
|
|
|
+ private String senderId;
|
|
|
+ private Long createTime;
|
|
|
+ private Map<String, Object> extra;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 5.3 平台适配器接口
|
|
|
+
|
|
|
+```java
|
|
|
+public interface PlatformAdapter {
|
|
|
+
|
|
|
+ String getPlatform();
|
|
|
+
|
|
|
+ UnifiedMessage normalize(String rawBody);
|
|
|
+
|
|
|
+ String sendTextMessage(String shopId, String conversationId, String text);
|
|
|
+
|
|
|
+ String sendImageMessage(String shopId, String conversationId, String imageUrl);
|
|
|
+
|
|
|
+ boolean verifySignature(HttpServletRequest request, String body);
|
|
|
+
|
|
|
+ void refreshToken(String shopId);
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 5.4 回调接口设计
|
|
|
+
|
|
|
+三个平台使用独立的回调 URL,便于独立验签和处理:
|
|
|
+
|
|
|
+| 平台 | 回调地址 | 说明 |
|
|
|
+|------|---------|------|
|
|
|
+| 抖音 | `/api/chat/callback/douyin` | 接收飞鸽消息推送 |
|
|
|
+| 快手 | `/api/chat/callback/kuaishou` | 接收快手消息推送 |
|
|
|
+| 小红书 | `/api/chat/callback/xiaohongshu` | 接收聚光私信推送 |
|
|
|
+
|
|
|
+回调接口统一处理流程:
|
|
|
+
|
|
|
+```
|
|
|
+1. 接收 HTTP POST 请求
|
|
|
+2. 读取 body,调用对应适配器验签
|
|
|
+3. 验签通过后,调用适配器 normalize() 转换为统一消息
|
|
|
+4. 将统一消息发送到 MQ
|
|
|
+5. 立即返回成功响应(避免平台超时重推)
|
|
|
+```
|
|
|
+
|
|
|
+### 5.5 消息队列处理
|
|
|
+
|
|
|
+使用 MQ(RocketMQ / RabbitMQ)解耦消息接收与处理:
|
|
|
+
|
|
|
+```
|
|
|
+回调接口 → MQ(topic: chat-message-receive)→ 消费者处理
|
|
|
+ ↓
|
|
|
+ 1. 消息去重(msg_id 幂等)
|
|
|
+ 2. 查找/创建会话
|
|
|
+ 3. 消息入库
|
|
|
+ 4. 更新会话状态
|
|
|
+ 5. 触发 AI 回复流程
|
|
|
+```
|
|
|
+
|
|
|
+### 5.6 AI 回复引擎
|
|
|
+
|
|
|
+```
|
|
|
+收到客户消息
|
|
|
+ │
|
|
|
+ ├── 检查会话是否启用 AI
|
|
|
+ │ │
|
|
|
+ │ └── 否 → 仅通知人工客服
|
|
|
+ │
|
|
|
+ ├── 检查是否有人工接管
|
|
|
+ │ │
|
|
|
+ │ └── 是 → 不自动回复,仅转发给人工
|
|
|
+ │
|
|
|
+ ├── 匹配规则(关键词/意图)
|
|
|
+ │ │
|
|
|
+ │ ├── 命中规则 → 使用规则回复
|
|
|
+ │ │
|
|
|
+ │ └── 未命中 → 调用 LLM 生成回复
|
|
|
+ │
|
|
|
+ ├── 回复内容审核(敏感词过滤)
|
|
|
+ │
|
|
|
+ ├── 调用平台 API 发送回复
|
|
|
+ │
|
|
|
+ └── 记录 AI 回复日志
|
|
|
+```
|
|
|
+
|
|
|
+AI 回复调用链路:
|
|
|
+
|
|
|
+```
|
|
|
+ChatAiService.processMessage(unifiedMessage)
|
|
|
+ → 规则匹配(关键词 → 意图识别)
|
|
|
+ → 未命中则调用 AI 模型
|
|
|
+ → 构建上下文(最近 N 条消息 + 系统提示词 + 知识库)
|
|
|
+ → 调用 LLM API(FastGPT / OpenAI / 自部署模型)
|
|
|
+ → 获取回复内容
|
|
|
+ → 敏感词过滤
|
|
|
+ → 调用 PlatformAdapter.sendTextMessage() 发送
|
|
|
+ → 记录日志
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 六、Token 管理方案
|
|
|
+
|
|
|
+### 6.1 Token 存储与刷新
|
|
|
+
|
|
|
+三个平台均使用 OAuth2.0,access_token 有有效期,需要自动刷新:
|
|
|
+
|
|
|
+```
|
|
|
+┌──────────────────────────────────────────────────────────┐
|
|
|
+│ Token 管理器 │
|
|
|
+│ │
|
|
|
+│ · 启动时加载所有店铺 Token 到缓存 │
|
|
|
+│ · 定时检查 Token 过期时间(提前 1 小时刷新) │
|
|
|
+│ · 调用 API 前检查 Token 有效性 │
|
|
|
+│ · Token 刷新失败时标记店铺授权过期,通知租户 │
|
|
|
+│ · Token 变更同步更新数据库和缓存 │
|
|
|
+└──────────────────────────────────────────────────────────┘
|
|
|
+```
|
|
|
+
|
|
|
+### 6.2 Token 加密存储
|
|
|
+
|
|
|
+access_token、refresh_token、app_secret 等敏感信息在数据库中加密存储:
|
|
|
+
|
|
|
+- 使用 AES-256 加密
|
|
|
+- 密钥通过配置中心管理,不硬编码
|
|
|
+- 读取时解密,缓存中可存明文(Redis 已有租户前缀隔离)
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 七、多租户适配
|
|
|
+
|
|
|
+### 7.1 租户识别
|
|
|
+
|
|
|
+回调消息中携带 `shop_id`,通过 `platform_shop` 表反查 `tenant_id`,然后切换到对应租户数据源:
|
|
|
+
|
|
|
+```
|
|
|
+平台推送消息 → 解析 shop_id → 查主库 platform_shop 得到 tenant_id → 切换租户数据源 → 处理业务
|
|
|
+```
|
|
|
+
|
|
|
+### 7.2 数据隔离
|
|
|
+
|
|
|
+| 数据 | 存储位置 | 隔离方式 |
|
|
|
+|------|---------|---------|
|
|
|
+| 平台店铺绑定(platform_shop) | 主库 | tenant_id 字段 |
|
|
|
+| 消息、会话、AI 日志 | 租户库 | 按库隔离 |
|
|
|
+| 话术库、AI 规则 | 租户库 | 按库隔离 |
|
|
|
+| Token 缓存 | Redis | 租户前缀隔离 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 八、关键技术点
|
|
|
+
|
|
|
+### 8.1 消息幂等
|
|
|
+
|
|
|
+三个平台均可能重推消息,必须做幂等处理:
|
|
|
+
|
|
|
+- 使用 `msg_id`(平台消息 ID)作为幂等键
|
|
|
+- 入库前先查 `chat_message` 表是否已存在该 `msg_id`
|
|
|
+- Redis 缓存近期 `msg_id`(TTL 24h),先查缓存再查库
|
|
|
+
|
|
|
+### 8.2 回调接口响应时效
|
|
|
+
|
|
|
+| 平台 | 超时要求 | 处理策略 |
|
|
|
+|------|---------|---------|
|
|
|
+| 抖音 | 2 秒内返回 | 收到后立即返回 `{"code":0,"msg":"success"}`,异步处理 |
|
|
|
+| 快手 | 2 秒内返回 | 同上 |
|
|
|
+| 小红书 | 即时返回 200 | 同上 |
|
|
|
+
|
|
|
+**关键**:回调接口只做验签 + 发 MQ + 返回成功,不做任何耗时业务处理。
|
|
|
+
|
|
|
+### 8.3 消息回复时效
|
|
|
+
|
|
|
+| 平台 | 可回复时效 | 超时处理 |
|
|
|
+|------|-----------|---------|
|
|
|
+| 抖音 | 48 小时 | 超时无法回复,需等待客户再次发消息 |
|
|
|
+| 快手 | 48 小时 | 同上 |
|
|
|
+| 小红书 | 24 小时 | 同上 |
|
|
|
+
|
|
|
+AI 回复需在时效内完成,建议 AI 响应时间控制在 3 秒以内。
|
|
|
+
|
|
|
+### 8.4 并发与限流
|
|
|
+
|
|
|
+- **回调接口**:平台推送频率高,需支持高并发接收
|
|
|
+- **消息发送**:各平台 API 有 QPS 限制,需做限流
|
|
|
+ - 抖音:按店铺限流
|
|
|
+ - 快手:单 appid QPS 10
|
|
|
+ - 小红书:QPS 10(企业认证可提升)
|
|
|
+- **AI 调用**:LLM API 有并发限制,需做排队和降级
|
|
|
+
|
|
|
+### 8.5 敏感词过滤
|
|
|
+
|
|
|
+发送前必须过滤敏感词:
|
|
|
+
|
|
|
+- 各平台均有敏感词检测机制,违规消息会被拦截甚至封号
|
|
|
+- 在 AI 回复发送前增加敏感词过滤层
|
|
|
+- 支持租户自定义敏感词库
|
|
|
+- 过滤命中后替换为 `***` 或使用安全话术替代
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 九、接口清单
|
|
|
+
|
|
|
+### 9.1 回调接口(平台调用我们)
|
|
|
+
|
|
|
+| 接口 | 方法 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| `/api/chat/callback/douyin` | POST | 抖音飞鸽消息回调 |
|
|
|
+| `/api/chat/callback/kuaishou` | POST | 快手消息回调 |
|
|
|
+| `/api/chat/callback/xiaohongshu` | POST | 小红书私信回调 |
|
|
|
+| `/api/chat/callback/douyin/auth` | GET | 抖音授权回调 |
|
|
|
+| `/api/chat/callback/kuaishou/auth` | GET | 快手授权回调 |
|
|
|
+| `/api/chat/callback/xiaohongshu/auth` | GET | 小红书授权回调 |
|
|
|
+
|
|
|
+### 9.2 管理接口(我们前端调用)
|
|
|
+
|
|
|
+| 接口 | 方法 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| `/api/chat/shop/list` | GET | 获取店铺列表 |
|
|
|
+| `/api/chat/shop/bind` | POST | 绑定平台店铺 |
|
|
|
+| `/api/chat/shop/unbind/{id}` | POST | 解绑店铺 |
|
|
|
+| `/api/chat/shop/auth-url` | GET | 获取授权链接 |
|
|
|
+| `/api/chat/conversation/list` | GET | 会话列表 |
|
|
|
+| `/api/chat/conversation/detail` | GET | 会话详情 |
|
|
|
+| `/api/chat/message/list` | GET | 消息列表 |
|
|
|
+| `/api/chat/message/send` | POST | 发送消息(人工) |
|
|
|
+| `/api/chat/conversation/takeover` | POST | 人工接管 |
|
|
|
+| `/api/chat/conversation/release` | POST | 释放(恢复AI) |
|
|
|
+| `/api/chat/ai/rule/list` | GET | AI规则列表 |
|
|
|
+| `/api/chat/ai/rule/save` | POST | 保存AI规则 |
|
|
|
+| `/api/chat/ai/toggle` | POST | 开关AI回复 |
|
|
|
+| `/api/chat/quick-reply/list` | GET | 话术库列表 |
|
|
|
+| `/api/chat/quick-reply/save` | POST | 保存话术 |
|
|
|
+| `/api/chat/stats/overview` | GET | 数据统计概览 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 十、开发计划
|
|
|
+
|
|
|
+### 第一阶段:基础框架搭建
|
|
|
+
|
|
|
+1. 创建 chat 模块目录结构和基础类
|
|
|
+2. 实现统一消息模型和平台适配器接口
|
|
|
+3. 实现数据库表创建和 Mapper
|
|
|
+4. 实现 MQ 配置和消息生产者/消费者
|
|
|
+5. 实现 Token 管理器
|
|
|
+
|
|
|
+### 第二阶段:抖音接入
|
|
|
+
|
|
|
+1. 实现抖音适配器(DouyinAdapter)
|
|
|
+2. 实现抖音回调接口和验签
|
|
|
+3. 实现抖音消息发送客户端
|
|
|
+4. 实现抖音 OAuth2.0 授权流程
|
|
|
+5. 联调测试
|
|
|
+
|
|
|
+### 第三阶段:快手接入
|
|
|
+
|
|
|
+1. 实现快手适配器(KuaishouAdapter)
|
|
|
+2. 实现快手回调接口和验签 + AES 解密
|
|
|
+3. 实现快手消息发送客户端
|
|
|
+4. 实现快手 OAuth2.0 授权流程
|
|
|
+5. 联调测试
|
|
|
+
|
|
|
+### 第四阶段:小红书接入
|
|
|
+
|
|
|
+1. 实现小红书适配器(XiaohongshuAdapter)
|
|
|
+2. 实现小红书回调接口和验签
|
|
|
+3. 实现小红书消息发送客户端
|
|
|
+4. 对接聚光平台私信通
|
|
|
+5. 联调测试
|
|
|
+
|
|
|
+### 第五阶段:AI 回复引擎
|
|
|
+
|
|
|
+1. 实现规则匹配引擎(关键词/意图)
|
|
|
+2. 对接 LLM API(FastGPT / OpenAI)
|
|
|
+3. 实现上下文构建和知识库检索
|
|
|
+4. 实现敏感词过滤
|
|
|
+5. 实现人工接管机制
|
|
|
+
|
|
|
+### 第六阶段:管理后台
|
|
|
+
|
|
|
+1. 店铺管理页面
|
|
|
+2. 会话监控页面
|
|
|
+3. AI 规则配置页面
|
|
|
+4. 话术库管理页面
|
|
|
+5. 数据统计页面
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 十一、风险与注意事项
|
|
|
+
|
|
|
+### 11.1 平台风险
|
|
|
+
|
|
|
+| 风险 | 影响 | 应对 |
|
|
|
+|------|------|------|
|
|
|
+| 平台 API 变更 | 接口不可用 | 关注平台公告,预留适配器升级窗口 |
|
|
|
+| 权限审核不通过 | 无法使用某些接口 | 提前沟通平台运营,准备资质材料 |
|
|
|
+| Token 过期未刷新 | 消息收发中断 | 定时刷新 + 调用前检查 + 失败告警 |
|
|
|
+| 消息推送延迟 | 客户等待时间长 | 监控推送延迟,超时告警 |
|
|
|
+
|
|
|
+### 11.2 合规风险
|
|
|
+
|
|
|
+| 风险 | 应对 |
|
|
|
+|------|------|
|
|
|
+| 敏感信息泄露 | Token 加密存储,日志脱敏 |
|
|
|
+| 违规内容发送 | 敏感词过滤 + AI 回复审核 |
|
|
|
+| 用户隐私保护 | 不持久化用户敏感字段,遵守各平台数据安全规范 |
|
|
|
+| 诱导/骚扰用户 | 遵守各平台消息发送频率限制,不做主动营销推送 |
|
|
|
+
|
|
|
+### 11.3 技术风险
|
|
|
+
|
|
|
+| 风险 | 应对 |
|
|
|
+|------|------|
|
|
|
+| AI 回复不准确 | 置信度阈值控制 + 低置信度转人工 |
|
|
|
+| AI 响应超时 | 设置超时时间(3s),超时使用默认话术 |
|
|
|
+| 高并发消息积压 | MQ 削峰 + 消费者扩容 |
|
|
|
+| 多平台回调冲突 | 独立回调 URL + 独立线程池 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 十二、参考文档
|
|
|
+
|
|
|
+| 平台 | 文档地址 |
|
|
|
+|------|---------|
|
|
|
+| 抖店开放平台 | https://op.jinritemai.com/docs/guide-docs/10/99 |
|
|
|
+| 抖店飞鸽消息推送 | https://op.jinritemai.com/docs/message-docs/1456/6015 |
|
|
|
+| 抖店三方客服 API | https://op.jinritemai.com/docs/api-docs/61/1880 |
|
|
|
+| 抖音开放平台 IM | https://developer.open-douyin.com/docs/resource/zh-CN/dop/develop/openapi/search-management/private-message/send-msg |
|
|
|
+| 快手电商开放平台 | https://open.kwaixiaodian.com |
|
|
|
+| 快手开放平台客服 | https://open.kuaishou.com/docs/develop/functionAccessGuide/customerService.html |
|
|
|
+| 快手消息服务 | https://open.kwaixiaodian.com/docs/dev?pageSign=120a69028f0e9ea69145644317ae8bcd1614263915925 |
|
|
|
+| 小红书开放平台 | https://open.xiaohongshu.com/document/developer/file/4 |
|
|
|
+| 小红书消息推送 | https://xiaohongshu.apifox.cn/doc-2810938 |
|
|
|
+| 小红书私信通 | https://pro.xiaohongshu.com (专业号平台 → 内容与互动 → 私信通) |
|