Socket.io教程: 基于Express和Mongodb的智能客服的简单设计与实现

智能客服的简单设计概述

  • 一个用户查询界面
  • 用户输入一个文本,比如订单号
  • 服务器通过模糊查询返回相应的订单信息
  • 如果是智能的话,还应该有AI相关服务,比如:各种场景和话术以及相关模型训练
  • 这里只来体现soket.io相关功能,不涉及AI相关实现

后端设计

数据库的封装和配置

module/config.js

var dbUrl = 'mongodb://localhost:27017/your-db-name'; // 这里填写连接你数据库的配置url

module.exports={
    dbUrl:dbUrl
}

module/db.js

// 这里是封装操作数据库的方法
var config = require('./config.js');
var  MongoClient=require('mongodb').MongoClient;
var ObjectID = require('mongodb').ObjectID;   /*查找_id*/
var dbUrl =config.dbUrl;

//封装连接数据库的方法
function _connect(callback){
    MongoClient.connect(dbUrl,function(err,db){
        if(err){
            console.log('数据库连接失败');
            console.log(err);
            return;
        }
        callback(db);
    })
}

exports.ObjectID = ObjectID;

/*
* json1 条件
* json2  列数
* json3 配置信息
* 
*/

exports.find = function(collectionName,json1,json2,json3,callback){

    if(arguments.length == 3){
        var cb=json2;
        var col={};  /*查询的列*/
        var skip=0;
        var limit=0;
    }else if(arguments.length==4){
        var cb=json3;
        var col=json2;  /*查询的列*/
        var skip=0;
        var limit=0;
    }else if(arguments.length==5){
        var cb = callback;
        var col = json2;  /*查询的列*/
        //json3={
        //    page,
        //    pageSize
        //}
        var limit=json3.pageSize || 10;   /*如果pageSize 每页10条*/
        var skip=json3.page? (json3.page-1)*limit : 0;  /*page每页传显示第一页*/
    }else{
        console.log('传入参数错误');
        return;
    }

    _connect(function(db){
       var result=db.collection(collectionName).find(json1,col).skip(skip).limit(limit);
        result.toArray(function(err,data){
            db.close();
            cb(err,data);
        })
    })
}

// 增加数据 db.insert("user",{"name":"user_number"},function(){})
exports.insert = function(collectionName,json,callback){
    _connect(function(db){
        db.collection(collectionName).insertOne(json,function(err,result){
            db.close();
            callback(err,result);
        })
    })
}

// 更新数据 db.update('user',{"id":123},{'name':"user_number"},function(){})
exports.update=function(collectionName,json1,json2,callback){
    _connect(function(db){
        db.collection(collectionName).updateOne(json1,{
            $set:json2
        },function(err,result){
            db.close();
            callback(err,result);
        })
    })
}

//封装删除的方法
exports.remove = function(collectionName,json,callback){
    _connect(function(db){
        db.collection(collectionName).removeOne(json,function(err,result){
            db.close();
            callback(err,result);
        })
    })
}

exports.count = function(collectionName,json,callback){
    _connect(function(db){
        db.collection(collectionName).count(json,function(err,data){
            callback(err,data)
        })
    })
}

后端程序的设计

var express = require('express');
var app=express();
var DB=require('./module/db.js');
var server = require('http').Server(app);
var io = require('socket.io')(server);

app.set('view engine','ejs');
app.use(express.static('public'));

app.get('/',function(req,res){
    //res.send('首页');
    res.render('index');
})

server.listen(3000,'127.0.0.1');

io.on('connection', function (socket) {
    console.log('建立链接')

    socket.on('message',function(data){
        console.log(data)
        //socket.emit('servermessage',msg);

        var msg = data.msg || '';  /*获取客户端的数据*/

        //去服务器查询数据
        DB.find('article',{'title':{$regex:new RegExp(msg)}},{'title':1},function(err,data){
            // console.log(data);
            socket.emit('servermessage',{
                result:data
            });
        })
    })
});

前端设计

views/index.ejs

<script src="/jquery-1.11.3.min.js"></script>
<script src="http://127.0.0.1:3000/socket.io/socket.io.js"></script>
    
<div class="box">
    <div class="list">
        <div id="list">
        </div>
        <div class="footer" id="footer">
        </div>
    </div>
    
    <div class="message">
        <input type="text" id="msg" />
        <input type="button" id="send" value="发送"/>
    </div>
</div>

<script>
    $(function(){
        var socket = io.connect('http://127.0.0.1:3000/');
        socket.on('servermessage',function(data){
            if(data.result.length) {
                var str='<ul>';
                for(var i=0;i<data.result.length;i++){
                    str+='<li>'+data.result[i].title+'</li>';
                }
                str+='</ul>';
            }else{
                var str='<p>没有找到您要的数据,请联系人工客服</p>'
            }
            $('#list').append(str);
            $('#footer').get(0).scrollIntoView();
        })

        var username = 'user_number' + Math.floor(Math.random()*10);

        //群聊功能--聊天室
        $('#send').click(function(){
            var msg = $('#msg').val();
            socket.emit('message',{
                'username':username,
                'msg':msg
            });
            $('#list').append(`<p><strong>${username}:</strong>  ${msg}</p>`);
            $('#msg').val();
        })
    })
</script>

猜你喜欢

转载自blog.csdn.net/Tyro_java/article/details/106605953
今日推荐