一、系统架构与核心价值
开源在线客服系统的全栈解决方案需满足多端兼容性、实时通信能力和可扩展性三大核心需求。基于PHP后端+UniApp前端的技术组合,可实现H5网页、微信小程序、App三端统一管理,降低企业维护成本。系统采用分层架构设计:
- 通信层:WebSocket实现实时消息推送
- 业务层:PHP处理会话分配、工单流转
- 存储层:MySQL存储对话记录,Redis缓存会话状态
- 接口层:RESTful API对接多端应用
该架构的优势在于:
- 开发效率提升:UniApp”一次编写,多端运行”特性减少60%以上重复开发
- 成本优化:开源代码免除SaaS服务年费,仅需支付服务器成本
- 自主可控:企业可完全掌握数据主权,避免第三方服务的数据安全风险
二、PHP后端核心实现
1. 基础环境搭建
// 推荐环境配置{"PHP": ">=7.4","MySQL": "5.7+","Redis": "4.0+","Swoole": "4.5+" // 用于WebSocket服务}
安装步骤:
- 部署LNMP环境(Linux+Nginx+MySQL+PHP)
- 配置PHP扩展:pdo_mysql、redis、swoole
- 使用Composer管理依赖:
composer require predis/predis workerman/workerman
2. 实时通信实现
WebSocket服务核心代码:
// server.php$ws_server = new Swoole\WebSocket\Server("0.0.0.0", 9502);$ws_server->on('message', function($server, $frame) {$data = json_decode($frame->data, true);// 消息路由处理switch($data['type']) {case 'chat':// 消息持久化$this->saveMessage($data);// 推送至客服端$this->pushToAgent($data);break;}});
3. 数据库设计
关键表结构:
-- 会话表CREATE TABLE `sessions` (`id` int AUTO_INCREMENT,`user_id` varchar(32),`agent_id` varchar(32),`status` tinyint DEFAULT 0 COMMENT '0-待分配 1-处理中 2-已结束',PRIMARY KEY (`id`));-- 消息表CREATE TABLE `messages` (`id` bigint AUTO_INCREMENT,`session_id` int,`sender_type` tinyint COMMENT '0-用户 1-客服',`content` text,`created_at` datetime,PRIMARY KEY (`id`));
三、UniApp前端开发
1. 多端适配方案
在manifest.json中配置:
{"mp-weixin": {"appid": "your_appid","setting": {"urlCheck": false}},"h5": {"title": "在线客服","router": {"mode": "hash"}}}
2. 核心组件实现
消息列表组件示例:
<template><scroll-view scroll-y class="message-list"><view v-for="msg in messages" :key="msg.id":class="['message', msg.sender_type === 0 ? 'user' : 'agent']"><text>{{msg.content}}</text></view></scroll-view></template><script>export default {data() {return {messages: []}},methods: {connectWebSocket() {uni.connectSocket({url: 'wss://yourdomain.com/ws',success: () => {uni.onSocketMessage((res) => {this.messages.push(JSON.parse(res.data));});}});}}}</script>
3. 小程序特有优化
-
权限处理:
// 微信小程序获取用户信息uni.getUserInfo({success: (res) => {this.userInfo = res.userInfo;// 提交至后端进行身份验证}});
-
性能优化:
- 使用
wx.setKeepScreenOn保持屏幕常亮 - 大文件上传使用分片传输
- 图片使用CDN加速
四、部署与运维方案
1. 服务器配置建议
| 规格 | 适用场景 | 并发能力 |
|---|---|---|
| 2核4G | 测试环境/小型企业 | 500并发 |
| 4核8G | 中型企业日活1万+ | 2000并发 |
| 8核16G+ | 大型企业/高流量场景 | 5000+并发 |
2. 自动化部署脚本
#!/bin/bash# 代码更新git pull origin master# 依赖安装composer install --no-dev# 服务重启supervisorctl restart customer_service# 静态资源更新uni build --platform h5cp -r dist/* /var/www/html/
3. 监控告警配置
使用Prometheus+Grafana监控关键指标:
- WebSocket连接数
- 消息处理延迟
- 数据库查询耗时
- 服务器负载
五、安全防护措施
-
数据加密:
// 敏感数据加密function encryptData($data) {$method = 'AES-256-CBC';$key = openssl_random_pseudo_bytes(32);$iv = openssl_random_pseudo_bytes(16);return ['data' => base64_encode(openssl_encrypt($data, $method, $key, 0, $iv)),'iv' => base64_encode($iv),'key' => base64_encode($key) // 实际应存储在安全区域];}
-
防攻击策略:
- 接口限流:使用Redis实现令牌桶算法
- SQL注入防护:使用PDO预处理语句
- XSS防护:前端转义+后端过滤
- 合规性要求:
- 用户数据删除功能实现
- 操作日志完整记录
- 定期安全审计
六、扩展功能建议
- 智能路由:基于用户标签自动分配客服
- AI预处理:使用NLP进行问题分类和自动回复
- 数据分析:会话时长、满意度统计等BI功能
- 多语言支持:i18n国际化方案
该开源方案通过PHP+UniApp的技术组合,实现了从后端服务到多端前端的完整闭环。企业可根据实际需求进行二次开发,建议初期采用模块化开发方式,重点实现核心会话功能,再逐步扩展高级特性。实际部署时需特别注意WebSocket服务的稳定性,建议使用负载均衡器分配连接,并配置心跳机制检测断连情况。