开源全栈客服系统:PHP+UniApp+H5搭建指南

一、系统架构与核心价值

开源在线客服系统的全栈解决方案需满足多端兼容性、实时通信能力和可扩展性三大核心需求。基于PHP后端+UniApp前端的技术组合,可实现H5网页、微信小程序、App三端统一管理,降低企业维护成本。系统采用分层架构设计:

  • 通信层:WebSocket实现实时消息推送
  • 业务层:PHP处理会话分配、工单流转
  • 存储层:MySQL存储对话记录,Redis缓存会话状态
  • 接口层:RESTful API对接多端应用
    该架构的优势在于:
  1. 开发效率提升:UniApp”一次编写,多端运行”特性减少60%以上重复开发
  2. 成本优化:开源代码免除SaaS服务年费,仅需支付服务器成本
  3. 自主可控:企业可完全掌握数据主权,避免第三方服务的数据安全风险

二、PHP后端核心实现

1. 基础环境搭建

  1. // 推荐环境配置
  2. {
  3. "PHP": ">=7.4",
  4. "MySQL": "5.7+",
  5. "Redis": "4.0+",
  6. "Swoole": "4.5+" // 用于WebSocket服务
  7. }

安装步骤:

  1. 部署LNMP环境(Linux+Nginx+MySQL+PHP)
  2. 配置PHP扩展:pdo_mysql、redis、swoole
  3. 使用Composer管理依赖:
    1. composer require predis/predis workerman/workerman

2. 实时通信实现

WebSocket服务核心代码:

  1. // server.php
  2. $ws_server = new Swoole\WebSocket\Server("0.0.0.0", 9502);
  3. $ws_server->on('message', function($server, $frame) {
  4. $data = json_decode($frame->data, true);
  5. // 消息路由处理
  6. switch($data['type']) {
  7. case 'chat':
  8. // 消息持久化
  9. $this->saveMessage($data);
  10. // 推送至客服端
  11. $this->pushToAgent($data);
  12. break;
  13. }
  14. });

3. 数据库设计

关键表结构:

  1. -- 会话表
  2. CREATE TABLE `sessions` (
  3. `id` int AUTO_INCREMENT,
  4. `user_id` varchar(32),
  5. `agent_id` varchar(32),
  6. `status` tinyint DEFAULT 0 COMMENT '0-待分配 1-处理中 2-已结束',
  7. PRIMARY KEY (`id`)
  8. );
  9. -- 消息表
  10. CREATE TABLE `messages` (
  11. `id` bigint AUTO_INCREMENT,
  12. `session_id` int,
  13. `sender_type` tinyint COMMENT '0-用户 1-客服',
  14. `content` text,
  15. `created_at` datetime,
  16. PRIMARY KEY (`id`)
  17. );

三、UniApp前端开发

1. 多端适配方案

manifest.json中配置:

  1. {
  2. "mp-weixin": {
  3. "appid": "your_appid",
  4. "setting": {
  5. "urlCheck": false
  6. }
  7. },
  8. "h5": {
  9. "title": "在线客服",
  10. "router": {
  11. "mode": "hash"
  12. }
  13. }
  14. }

2. 核心组件实现

消息列表组件示例:

  1. <template>
  2. <scroll-view scroll-y class="message-list">
  3. <view v-for="msg in messages" :key="msg.id"
  4. :class="['message', msg.sender_type === 0 ? 'user' : 'agent']">
  5. <text>{{msg.content}}</text>
  6. </view>
  7. </scroll-view>
  8. </template>
  9. <script>
  10. export default {
  11. data() {
  12. return {
  13. messages: []
  14. }
  15. },
  16. methods: {
  17. connectWebSocket() {
  18. uni.connectSocket({
  19. url: 'wss://yourdomain.com/ws',
  20. success: () => {
  21. uni.onSocketMessage((res) => {
  22. this.messages.push(JSON.parse(res.data));
  23. });
  24. }
  25. });
  26. }
  27. }
  28. }
  29. </script>

3. 小程序特有优化

  1. 权限处理:

    1. // 微信小程序获取用户信息
    2. uni.getUserInfo({
    3. success: (res) => {
    4. this.userInfo = res.userInfo;
    5. // 提交至后端进行身份验证
    6. }
    7. });
  2. 性能优化:

  • 使用wx.setKeepScreenOn保持屏幕常亮
  • 大文件上传使用分片传输
  • 图片使用CDN加速

四、部署与运维方案

1. 服务器配置建议

规格 适用场景 并发能力
2核4G 测试环境/小型企业 500并发
4核8G 中型企业日活1万+ 2000并发
8核16G+ 大型企业/高流量场景 5000+并发

2. 自动化部署脚本

  1. #!/bin/bash
  2. # 代码更新
  3. git pull origin master
  4. # 依赖安装
  5. composer install --no-dev
  6. # 服务重启
  7. supervisorctl restart customer_service
  8. # 静态资源更新
  9. uni build --platform h5
  10. cp -r dist/* /var/www/html/

3. 监控告警配置

使用Prometheus+Grafana监控关键指标:

  • WebSocket连接数
  • 消息处理延迟
  • 数据库查询耗时
  • 服务器负载

五、安全防护措施

  1. 数据加密

    1. // 敏感数据加密
    2. function encryptData($data) {
    3. $method = 'AES-256-CBC';
    4. $key = openssl_random_pseudo_bytes(32);
    5. $iv = openssl_random_pseudo_bytes(16);
    6. return [
    7. 'data' => base64_encode(openssl_encrypt($data, $method, $key, 0, $iv)),
    8. 'iv' => base64_encode($iv),
    9. 'key' => base64_encode($key) // 实际应存储在安全区域
    10. ];
    11. }
  2. 防攻击策略

  • 接口限流:使用Redis实现令牌桶算法
  • SQL注入防护:使用PDO预处理语句
  • XSS防护:前端转义+后端过滤
  1. 合规性要求
  • 用户数据删除功能实现
  • 操作日志完整记录
  • 定期安全审计

六、扩展功能建议

  1. 智能路由:基于用户标签自动分配客服
  2. AI预处理:使用NLP进行问题分类和自动回复
  3. 数据分析:会话时长、满意度统计等BI功能
  4. 多语言支持:i18n国际化方案

该开源方案通过PHP+UniApp的技术组合,实现了从后端服务到多端前端的完整闭环。企业可根据实际需求进行二次开发,建议初期采用模块化开发方式,重点实现核心会话功能,再逐步扩展高级特性。实际部署时需特别注意WebSocket服务的稳定性,建议使用负载均衡器分配连接,并配置心跳机制检测断连情况。