一周开发一个轻量级客服系统(代码开源)

本文介绍了一周内如何利用短连接开发一个客服系统,包括后端Spring Boot、前端Vue、MySQL数据库、Redis缓存、RabbitMQ消息队列等技术。系统已开源在GitHub,支持通过SDK方式接入。后期计划优化并实现长连接的IM聊天系统。
摘要由CSDN通过智能技术生成


前言

客服系统比较常见,主流的还是采用三方SDK接入,这些SDK的实现方式大都采用长连接,性能要求比较高,费用也偏高。此系列文章采用短连接的形成,快速开发一个实用性客服系统。

规划:

1.通过短连接实现客服系统,代码全部开源在github上(已完成)
2.将此客服系统通过SDK的方式供别人使用(已完成)
3.通过长连接实现IM聊天系统+客服系统,并开源(未完成)


一、聊天系统为什么使用短连接?

  1. 客服系统的及时性不是很高,客服一般要处理多个用户的聊天咨询,在一般情况下,客服和用户之间的聊天实时性不是很高,一般会有几秒的等待时间。
  2. 开发成本:短连接通过http协议实现,收发消息只需要发送http请求即可,开发简单。
  3. 性能:长连接需要客户端和服务器一直保持连接,比较消耗服务器性能,用户量一大,服务器的压力很大。

二、技术方案

在这里插入图片描述
通过短连接轮询的方式,达到收发消息。

后端技术方案:

数据库:MySQL
项目框架:Sping Boot
缓存:Redis
消息队列:Rabbit

前端技术方案

VUE

原生端

安卓:未开发
IOS:未开发
目前原生端接入方式为:跳转H5聊天页面,以内嵌的方式,短连接的方案目前不考虑原生端,后面长连接的方式会考虑原生端。

三、代码详细设计

1.数据库设计

表名:account
主要功能:后台管理账号,客服人员登录
核心字段:app_id,name

表名:user
主要功能:聊天用户表,每个需要聊天的用户都需要自动注册该表,通过该表的id来收发消息
核心字段:id,type(用户类型:1游客,2管理员,3登录用户),app_key,client_type(客户端类型:1H5,2PC,3安卓,4IOS),out_user_id(外部系统的用户id)

表名:app
主要功能:应用表,每个后台管理员账号下可以新增多个应用,每个应用都归于一个后台管理员
核心字段:app_key,app_secret,state,user_id(管理员id,对应account表)

表名:conversation
主要功能:会话表,每个聊天窗口都会新建一个会话
核心字段:from_user_id,to_user_id,last_text,from_unread_count(未读消息数),to_unread_count(未读消息数),extra(扩展字段,用户昵称、头像或其他字段在这里)

表名:conversation
主要功能:会话表,每个聊天窗口都会新建一个会话
核心字段:from_user_id,to_user_id,text,type(消息类型:1文本,2图片,3语音,4视频,5其他),file_url(文件对于的URL,发送图片/文件),file_small_url(文件小图的URL),state(消息状态),extra(扩展字段,用户昵称、头像或其他字段在这里),conversation_id,cover_img_url(封面图片的URL,如发布的视频)

2.后端程序

1.发消息

public void sendMsg(SendMsgParam param, ResponseDataBase responseDataBase) {
   
        String lastText = param.text;
        if (TextUtil.isEmpty(lastText)){
   
            lastText = "["+MsgType.getMsgType(param.type).desc+"]";
        }
        else {
   
            if (lastText.length()>8){
   
                lastText = lastText.substring(0,8);
                lastText += "...";
            }
        }

        boolean isFirstCreateConversation = false;
        if (param.conversationId<=0){
   
            //会话id为空,则有可能是第一次聊天
            //1.查询是否以前有聊天会话
            ConversationExample conversationExample = new ConversationExample();
            ConversationExample.Criteria criteria1 = conversationExample.createCriteria();
            criteria1.andFromUserIdEqualTo(param.fromUserId);
            criteria1.andToUserIdEqualTo(param.toUserId);

            ConversationExample.Criteria criteria2 = conversationExample.createCriteria();
            criteria2.andFromUserIdEqualTo(param.toUserId);
            criteria2.andToUserIdEqualTo(param.fromUserId);

            conversationExample.or(criteria2);
            List<Conversation> conversations = conversationMapper.selectByExample(conversationExample);
            if (!CollectionUtils.isEmpty(conversations)){
   
                param.conversationId = conversations.get(0).getId();
            }
            else {
   
                //第一次会话,建立新的会话
                Conversation conversation = new Conversation();
                conversation.setFromUserId(param.fromUserId);
                conversation.setToUserId(param.toUserId);
                conversation.setTimestamp(System.currentTimeMillis());
                conversation.setState(1);
                conversation.setToUnreadCount(1);
                conversation.setFromUnreadCount(0
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值