当前位置: 首页>业内资讯>客服技术

今天教大家用nodejs搭建一个在线客服,使用了nodejs-websocket包

            现在NODEJS已经很流行了,基本做前端的人都需要这个,nodejs安装一个nodejs-websocket包,就可以轻松实现在线客服功能,下面这是我做的一个在线客服,大家有需要可以拿去用。

            首先你得下载一个NODEjs,然后用npm安装nodejs-websocket包,命令用npm i nodejs-websocket,就可以安装了

            下面是客服的源代码

<html>
<head>
    <title>客服系统</title>
</head>
<body>
<h1>客服系统-客服</h1>
<input type="text" id="snedTxt" value="在的" />
<button id="sendb">发送</button>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
    span{ margin: 10px}
</style>
<div class="vip"></div>
<div id="recv"></div>
<script src="jquery.min.js"></script>
<script src="jquery.cookie.min.js"></script>

<script type="text/javascript">
    var guest='kefu';
    var ws = new WebSocket("ws://localhost:3000/");// 设置服务器地址 //
    ws.onopen=function(){  // onopen 连接触发 //
        console.log("连接");
        document.getElementById("recv").innerHTML="已连接"; //  innerHTML 可以 获取 也可以 插入  /
    }
    ws.onclose=function(){ // onclose 断开触发 //
        console.log("连接关闭");
    }
    ws.onmessage =function(e){ // onmessage 接收到信息触发  //
        //$.cookie('th-ws-user','',{expires:7});
        console.log(e.data);
        var obj=JSON.parse(e.data);
        var name=obj.name;
        //alert(name);
        var str=$.cookie('th-ws-user');
        //alert(user);
        //console.log(user);
        if(!str){
            console.log(1);
            user=[];
            user.push(name);
        }else{
            console.log(2);
            user=str.split(",");
            if(str.indexOf(name)==-1){
                //alert(name);
                user.push(name);
            }
        }
        str = user.join(',');
        $.cookie('th-ws-user',str,{expires:7});


        console.log(user);
        $(".vip").html('');
        $.each(user,function(i,n){
            //alert(n);
            $("<span>").html(n).appendTo($(".vip")).click(function(){
                guest=n;
            });
        });

        document.getElementById("recv").innerHTML = obj.content;
    }
    document.getElementById("sendb").onclick=function(){ // 监测 id=“sendb”的 按钮 触发 onclick 就会发送数据 send //
        var txt = document.getElementById("snedTxt").value;
        var obj={name:'kefu',content:txt,guest:guest};
        var txt=JSON.stringify(obj);
        ws.send(txt);
    }
</script>
</body>
</html>

下面再把客户端的代码贴出来

<html>
<head>
    <title>客服系统</title>
</head>
<body>
<h1>客服系统-客户</h1>
<input type="text" id="snedTxt" value="在吗?" />
<button id="sendb">发送</button>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<div id="recv"></div>
<script src="jquery.min.js"></script>
<script src="jquery.cookie.min.js"></script>
<script type="text/javascript">
  //   $(function(){
 //   var name=$.cookie('th-ws-name');
    //alert(name);
    //if(name==="undefined"){
      var  name=get_random(32);
      //  $.cookie('th-ws-name', name, { expires: 7 });
       // name=$.cookie('th-ws-name');
        console.log(name);
   // }
    //alert(name);
    //return false;
    var ws = new WebSocket("ws://localhost:3000/");// 设置服务器地址 //
    ws.onopen=function(){  // onopen 连接触发 //
        console.log("连接");
        document.getElementById("recv").innerHTML="已连接"; //  innerHTML 可以 获取 也可以 插入  /
    }
    ws.onclose=function(){ // onclose 断开触发 //
        console.log("连接关闭");
    }
    ws.onmessage =function(e){ // onmessage 接收到信息触发  //
        console.log(e.data);
        document.getElementById("recv").innerHTML = e.data;
    }
    document.getElementById("sendb").onclick=function(){ // 监测 id=“sendb”的 按钮 触发 onclick 就会发送数据 send //
        var txt = document.getElementById("snedTxt").value;
        var obj={name:name,content:txt};
        var str=JSON.stringify(obj);
        ws.send(str);
    }

    window.onunload = function(){
        var obj={name:name,content:'关闭'};
        var str=JSON.stringify(obj);
        ws.send(str);
    }

    function get_random(length) {
        var chars='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
        var result = '';
        for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
        return result;
    }

  //  });
</script>

</body>
</html>

再来把nodejs端的代码贴出来

var ws = require('nodejs-websocket');
var port=3000
var user=[];
var server = ws.createServer(function(conn){
    //受到连接触发//
//在服务端cmd安装npm install nodejs-websocket//
    console.log('连接成功');
    conn.on("text",function(str){
        // 收到信息触发     接收 //
        var obj=JSON.parse(str);
        var txt=obj.content;
        var name=obj.name;
        console.log("收到信息:"+obj.content);
        console.log("用户:"+obj.name);
        boardcast(txt,name,str) // 广播消息 //
        conn.sendText(str) // 发送数据给自己 //
        conn.name=obj.name;
        var off=false;

        user.forEach(function(item){
            if(item.name==obj.name){
                off=true;
            }
        })
        if(off==false){
            user.push(conn);
        }


    })
    conn.on("close",function(code,reason){
        // 断开连接触发 //
        console.log("连接关闭");
    })
    conn.on("error",function(err){
        // 出错触发 //
        console.log("连接出错")
        console.log(err)
    })
    function boardcast(txt,name,str){  // 广播 //
        // server.connections  保存每个连接进来的用户 //
        console.log("BOAR:"+str);
        var obj=JSON.parse(str);
        console.log("S----------------");
        user.forEach(function(item){
            if(name=='kefu'){//客服发的信息
                console.log("T-F:"+item.name+"   VS  "+obj.guest);
                if(item.name==obj.guest){
                    item.sendText(str);
                    console.log("客户收:"+name);
                }
            }else{//客户发的信息
                console.log("T-H:"+item.name);
                if(item.name=='kefu'){
                    item.sendText(str)
                    console.log("客服收:"+name);
                }
            }
        })

        console.log("E------------------");
        console.log(user.length);
        server.connections.forEach(function(conn){   //  .forEach 是调用数组里每个元素  //
            var item=conn.frameBuffer;
            console.log(server.connections.length);
            //if(conn.frameBuffer.name==null){
            //conn.sendText(str)
            //}

        })
    }
}).listen(port)
console.log("^^^^^")
运行的效果是这样的


嘿,我来帮您!

微信公众号