返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >好用的在线客服系统PHP源码(开源代码+终身使用+安装教程)
  • 563
分享到

好用的在线客服系统PHP源码(开源代码+终身使用+安装教程)

在线客服系统客服系统php源码客服系统源码 2023-09-07 13:09:10 563人浏览 八月长安
摘要

​在线客服系统是一套交互式沟通工具,采用PHP+Mysql开发。高性能,不卡顿。使用它可以迅速缩小你的选择范围,联系多个供应商、客户等,也可以给你的企业一个关于用户体验的重大影响。(尾部下载完整版PH

​在线客服系统是一套交互式沟通工具,采用PHP+Mysql开发。高性能,不卡顿。使用它可以迅速缩小你的选择范围,联系多个供应商、客户等,也可以给你的企业一个关于用户体验的重大影响。(尾部下载完整版PHP客服系统源码)
在这里插入图片描述
在这里插入图片描述

一,思路梳理

1,首先思考群聊的实现方式。
​2,再来举一反三,思考单聊的实现方式。
有一个地方需要提一下,比如要给A用户发送消息,就要根据A的userId得到连接对象,然后就会把消息发送给A用户。

二,代码分析

1,首先是用户聊天框的js代码(html忽略)
此为用户点击在线客服按钮进入聊天框页面就执行的js代码。

说明:下面接收人id写死了为超级管理员,我这里省事情了,因为超级管理员的账号(也就是唯一标识)就是超级管理员这五个字,当真正开发时就要动态获取唯一标识了!

2,其次为后台系统客服聊天框的js代码

3,最后为服务端的websocket实例

package com.qianlong.controller;import com.qianlong.service.SelectService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import java.io.IOException;import java.text.SimpleDateFORMat;import java.util.Date;import java.util.HashMap;import java.util.Map;import javax.websocket.OnClose;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.PathParam;import javax.websocket.server.ServerEndpoint;//声明websocket某个服务端的地址@ServerEndpoint(value = "/charRoomServer/{param}")@Componentpublic class ChatRoomServer {    @Autowired    public static SelectService selectService;    private boolean firstFlag=true;    private Session session;    private String userName;    //发送人id    private String userId;    //key代表此次客户端的userId,value代表此次连接对象    private static final HashMap connectMap=new HashMap();    //保存所有用户昵称信息    //key是session的id,value是用户昵称    private static final HashMap userMap=new HashMap();    //服务端收到客户端的连接请求,连接成功后会执行此方法    @OnOpen    public void start(@PathParam(value = "param") String param, Session session) {        this.session=session;        this.userId=param; //接收参数        connectMap.put(param,this);    }    //客户端发来的信息,服务端接收    @OnMessage              //接收人userId    public void chat(String clientMessage,Session session) {        //firstFlag为true是第一次进入,第二次进入之后设为false        ChatRoomServer client=null;        if(firstFlag) {            this.userName=clientMessage;            //将新进来的用户保存到用户map            userMap.put(session.getId(), userName);            try {               if("超级管理员".equals(userId)){               }else{                   //构造发送给客户端的提示信息                   String message=htmlMessage("大白机器人:","亲爱的"+userId+",您想了解点儿啥?");                   client=(ChatRoomServer) connectMap.get(userId);                   //给对应的web端发送一个文本信息                   client.session.getBasicRemote().sendText(message);               }            } catch (IOException e) {                e.printStackTrace();            }            firstFlag=false;        }else {            System.err.println("clientMessage:"+userName);            //给对方发消息            String message1=htmlMessage(userId,clientMessage);            client  = (ChatRoomServer) connectMap.get(userName);           if(client!=null){               try {                   client.session.getBasicRemote().sendText(message1);               } catch (IOException e) {                   e.printStackTrace();               }           }            //给自己窗口发消息            String message2=htmlMessage(userId,clientMessage);            client  = (ChatRoomServer) connectMap.get(userId);            try {                client.session.getBasicRemote().sendText(message2);            } catch (IOException e) {                e.printStackTrace();            }                       //这是将前台用户发送的消息存数据库并标记为未读,和上面通信没关系            if("超级管理员".equals(userId)){            }else{                Map map=new HashMap();                map.put("account",userId);                map.put("message",clientMessage);                map.put("addtime",new Date());                int i = selectService.chatInsert(map);                System.out.println(i);            }        }        }            @OnClose    public void close() {        userMap.remove(session.getId());        connectMap.remove(userId);    }        public String htmlMessage(String userName,String message) {        StringBuffer stringBuffer=new StringBuffer();        SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        stringBuffer.append("
"); stringBuffer.append(""+sf.format(new Date())+""); stringBuffer.append("
"); stringBuffer.append("

"+userName+"

"
); stringBuffer.append("
"
); stringBuffer.append("
"); stringBuffer.append("
"
); stringBuffer.append("
"+message+"
"
); stringBuffer.append("
"
); stringBuffer.append("
"
); //这里拼接了消息发送人的userId,在前台进行截取字符串接收发送人的userId stringBuffer.append("|"+userName); return stringBuffer.toString(); }}

三,依赖注入

在websocket中进行依赖注入service并调用service方法进行数据库存储,如果按常规的方式是走不通的。

解决方式:

在该SpringBoot项目中添加一个WebsocketConfig配置类,对service进行配置。

@Configurationpublic class WebSocketConfig {        @Bean    public ServerEndpointExporter serverEndpointExporter() {        return new ServerEndpointExporter();    }             * 因 SpringBoot WebSocket 对每个客户端连接都会创建一个 WebSocketServer(@ServerEndpoint 注解对应的对象,Bean 注入操作会被直接略过,因而手动注入一个全局变量     */    @Autowired    public void setSelectService(SelectService selectService) {        ChatRoomServer.selectService = selectService;    }}

然后在websocket中注入service。

四,效果展示

在这里插入图片描述
在这里插入图片描述

五,源码下载

php客服系统源码包下载地址:
https://yfi.lanzouj.com/iHN4A061ok5c

来源地址:https://blog.csdn.net/q906270629/article/details/126248962

--结束END--

本文标题: 好用的在线客服系统PHP源码(开源代码+终身使用+安装教程)

本文链接: https://lsjlt.com/news/398248.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作