本文档旨在详细说明CRMEB系统中客服系统模块的设计架构、核心功能、代码实现及开发规范,为系统开发人员提供完整的开发参考。
本文档适用于CRMEB系统开发人员、维护人员及二次开发人员,用于指导客服系统模块的开发、扩展和维护工作。
| 术语 | 解释 |
|---|---|
| 客服系统 | 用于商家与用户进行实时沟通的系统 |
| WebSocket | 一种在单个TCP连接上进行全双工通信的协议 |
| 会话转接 | 将当前聊天会话转交给其他客服处理 |
| 客服话术 | 客服常用的回复模板 |
| 全局话术 | 所有客服均可使用的话术 |
| 个人话术 | 仅当前客服可使用的话术 |
| 游客模式 | 未登录用户发起聊天的模式 |
客服系统采用前后端分离架构,后端使用ThinkPHP框架,前端使用Vue.js,基于WebSocket实现实时通信:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 前端应用 │────▶│ WebSocket服务器 │────▶│ 后端API服务 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ 数据库 │
└─────────────────┘
客服API:/crmeb/app/kefuapi/
controller/ - 客服API控制器middleware/ - 客服API中间件route/ - 客服API路由validate/ - 客服API验证器服务模型:/crmeb/app/model/service/
StoreService.php - 客服信息模型StoreServiceRecord.php - 客服聊天用户记录模型StoreServiceLog.php - 客服聊天记录模型StoreServiceSpeechcraft.php - 客服话术模型客服服务:/crmeb/app/services/kefu/
KefuLoginServices.php - 客服登录服务KefuUserServices.php - 客服用户服务KefuServiceServices.php - 客服服务管理KefuSpeechcraftServices.php - 客服话术服务客服前端API:/template/admin/src/api/kefu.js
WebSocket实现:基于Workerman框架实现
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | int(10) unsigned | 客服ID |
| uid | int(10) | 关联用户ID |
| nick_name | varchar(20) | 客服昵称 |
| avatar | varchar(255) | 客服头像 |
| phone | varchar(20) | 客服手机号 |
| password | varchar(60) | 客服密码 |
| salt | varchar(10) | 密码盐 |
| status | tinyint(1) | 状态(0-禁用,1-启用) |
| is_online | tinyint(1) | 在线状态(0-离线,1-在线) |
| add_time | int(10) | 添加时间 |
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | int(10) unsigned | 记录ID |
| uid | int(10) | 用户ID |
| service_id | int(10) | 客服ID |
| last_msg | varchar(255) | 最后一条消息内容 |
| last_time | int(10) | 最后消息时间 |
| is_visitor | tinyint(1) | 是否游客(0-否,1-是) |
| visitor_id | varchar(50) | 游客ID |
| status | tinyint(1) | 状态(0-结束,1-进行中) |
| add_time | int(10) | 添加时间 |
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | int(10) unsigned | 记录ID |
| from_id | int(10) | 发送者ID |
| to_id | int(10) | 接收者ID |
| service_id | int(10) | 客服ID |
| message | text | 消息内容 |
| type | tinyint(1) | 消息类型(0-文本,1-图片) |
| is_read | tinyint(1) | 是否已读(0-未读,1-已读) |
| is_visitor | tinyint(1) | 是否游客(0-否,1-是) |
| visitor_id | varchar(50) | 游客ID |
| add_time | int(10) | 添加时间 |
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | int(10) unsigned | 话术ID |
| uid | int(10) | 客服ID(0-全局话术) |
| cate_id | int(10) | 分类ID |
| title | varchar(100) | 话术标题 |
| content | text | 话术内容 |
| sort | int(10) | 排序 |
| status | tinyint(1) | 状态(0-禁用,1-启用) |
| add_time | int(10) | 添加时间 |
/kefuapi/login/kefuapi/key/kefuapi/scan/:key/kefuapi/user/record/kefuapi/service/list/kefuapi/service/transfer/kefuapi/user/info/:uid/kefuapi/user/label/:uid/kefuapi/user/label/:uid/kefuapi/order/list/:uid/kefuapi/order/delivery/:id/kefuapi/order/refund/kefuapi/service/speechcraft/kefuapi/service/speechcraft命名规范:
KefuLoginServicesgetUserListchatMessageKEFU_STATUS_ONLINE代码结构:
WebSocket规范:
问题:WebSocket连接失败或频繁断开 解决方案:
问题:消息推送延迟严重 解决方案:
问题:聊天记录丢失或不完整 解决方案:
问题:客服转接失败或聊天记录丢失 解决方案:
| 版本 | 更新日期 | 更新内容 | 更新人 |
|---|---|---|---|
| 1.0 | 2026-01-19 | 初始版本,包含客服账号管理、客服聊天功能、用户管理、订单处理、商品相关、客服话术管理、客服转接等核心功能 | AI Assistant |
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 前端应用 │────▶│ WebSocket服务器 │────▶│ 后端API服务 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ 数据库 │
└─────────────────┘
聊天流程:
1. 用户访问网站,发起聊天请求
2. 系统分配客服(或用户选择客服)
3. 建立WebSocket连接
4. 用户和客服开始聊天
a. 发送消息
b. 接收消息
c. 消息已读状态更新
5. 聊天结束,保存聊天记录
6. 关闭WebSocket连接
客服转接流程:
1. 当前客服发起转接请求
2. 系统验证转接权限
3. 选择目标客服
4. 发送转接请求给目标客服
5. 目标客服接受转接
6. 系统更新会话归属
7. 通知当前客服和目标客服
8. 转接完成,保留聊天记录
| 权限名称 | 描述 |
|---|---|
| kefu_login | 客服登录权限 |
| kefu_chat | 聊天功能权限 |
| kefu_user | 用户管理权限 |
| kefu_order | 订单处理权限 |
| kefu_product | 商品查看权限 |
| kefu_speechcraft | 话术管理权限 |
| kefu_transfer | 客服转接权限 |
提示:该文档由AI生成,仅供参考。