客服系统简易版

news2024/9/28 15:23:46

客服系统简易版架构

整体架构解读

  • 客服端和商城端都通过websocket连接到客服系统, 并定期维持心跳
  • 当客户接入客服系统时, 先根据策略选择在线客服, 然后再发送消息给客服

websocket实现

netty实现websocket协议, 增加心跳处理的handler, 详见chat-server模块

客服路由规则

暂时仅支持轮询的规则

优化: 比较好的方案是对客服接入的客户数进行分别统计, 选择客户数最小的, 当然如果统计的精细一点, 应该是统计客服在一段时间内收发消息的吞吐量

消息存储

bzmall数据库的chat_messages表, 用于存储全部的消息, 对于同一个会话的消息, 应该设置一个会话内的唯一id, 方便通过他来计算数量; 另外应该给fromto(即发送者和接收者)设置索引, 方便会话消息查询

消息拉取

当重新打开会话页面时, 应该拉取最新的消息, 实现起来也比较简单, 直接获取该会话的消息, 正序排列, 取最后面的n条即可;

消息的未读数

  • 在会话页面时, 定期将消息进行批量确认, 比如当前页面展示的是id为1-5号的消息, 则在下一个批量确认时直接发送5即可, 这样服务端确认5号之前的消息设置为已读了; 另外需要创建一张消息offset表, 因为同一个会话的消息在chat_messages中只存了一份, 无法区分两端的不同情况;
  • 另外需要接入极光推送, 保证能及时收到消息提醒

优化: 可以让app在本地缓存消息的offset, 定期同步服务端, 未读数可以每次讲最大的id返回, 让app通过差值计算

消息同步

当通过websocket接收到消息后, app先将消息与本地的消息offset进行比较, 计算出未读数, 并进行渲染; 然后将消息内容在会话页面进行渲染

常见问题

用户分组

关于客户和客服都连接到websocket上了, 怎么进行区分并找到他们并路由过去呢, 现在的实现方式是每个接入websocket的客户端都提供了uid, 这个uid

的组成是类型_用户id, 通过不同的类型前缀区分是客户还是客服

优化: 在服务端设置两个不同的存储用来接收客户和客服的连接, 这样清晰一点

多端同步

这个暂时应该涉及不到, 就按照单端处理吧先

多媒体消息类型

处理图片、音频、视频的这些, 还是先上传OSS, 然后将url传入后端即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2089012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WIN 系统中英文翻译神器"STranslate"再也不怕看不懂了

随着机器翻译工具的不断发展,翻译工作者的工作效率和效果得到了大幅提升。这些工具不仅可以提供快速的翻译参考,还可以帮助处理大量的文本,极大地节省了翻译的时间和精力。翻译也可以花更多的时间去精修译文,在机翻的“半成品”之…

自动化测试经典面试题

当下各行各业都呈现出了非常内卷的情况,测试圈内也出现了技术内卷的魔咒,因此大部分公司在招聘测试工程师的岗位时,都要求掌握一些自动化测试方面的技术。那么,我们在面试的时候哪些自动化测试的问题会被面试官经常问到呢&#xf…

12 对话模型微调2

1 P-Tuning P-Tuning 是在 Prompt-Tuning的基础上,通过新增 LSTM 或 MLP 编码模块来加速模型的收敛; 之前的实验也看到了使用prompt训练速度很慢,那么P-Tuning呢 参数占比: trainable params: 5,267,456 || all params: 1,308,37…

Golang学习总结

一、基本语法 Golang 设计理念:一种事情有且只有一种方法完成 软件包安装 直接官网下载好,配置安装下环境变量即可 /etc/profile # 在这个文件写入会对所有用户生效 ~/.profile # 在这个文件写入只会对当前用户生效# 以上两个文件中…

综合布线智能运维管理方案

布线运维管理的现状 基础档案资料分散、过时,无集中管理与自动更新机制; 缺乏变更规划工具与流程,易造成线缆混乱、变更效率低; 缺乏告警机制,关键线路中断无法及时发现。 nVisual综合布线智能运维管理系统组…

人工智能相关概念

特征选择方法 解决过拟合问题 正则化 k匿名算法 L-多样性算法 t相进性算法

MySQL中的锁详解

1.概念 锁是计算机协调多个进程或者线程并发访问某一资源的机制。那么如何保证数据并发访问的一致性、有效性是数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素,所以数据库中锁的应用极为重要,其复杂度也更高。 …

SLAM的详细介绍,包括其基本原理、主要组件、算法类型、应用场景以及面临的挑战

创作不易,您的关注、点赞、收藏和转发是我坚持下去的动力! 大家有技术交流指导、论文及技术文档写作指导、项目开发合作的需求可以私信联系我。 SLAM(Simultaneous Localization and Mapping)是一种用于机器人和计算机视觉领域的…

设计模式之生成器方法

一、生成器模式概念 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式…

Mudbox 2013/2018简体中文版百度云(附教程)

如大家所了解的,Autodesk Mudbox是一款专业的‌3D数字雕刻和纹理绘画软件‌,它结合了直观的用户界面和一套高性能的创作工具,使三维建模专业人员能够快速轻松地制作高度逼真的有机和无机的三维资产。‌ 目前常用的版本有Mudbox 2013和Mudbox…

微气象在线监测系统:宏观层面的电网灾害预防和应急管理

微气象受局部地形(如山谷、河谷)、地物(如建筑物、森林)和地面条件(如水面、农田)的影响较大,而大范围气象环境则更多地受气候系统和天气模式的控制。输电线路微气象监测的主要目的是为了评估和…

Java基础(6)- Java代码笔记3

目录 一、二维数组 1.二维数组定义 a.动态初始化 b.静态初始化 c.简单静态初始化 2.获取数组长度 二、方法 1.无参无返回值方法 2.有参无返回值方法 3.无参有返回值方法 4.有参有返回值方法 5.形式参数和实际参数 6.三层架构思想 7.方法注意事项 8.数组作为方法参…

如何实现DWG转DXF在线?原来很简单

DWG转DXF在线怎么转?在CAD设计领域,文件格式转换是一项常见且重要的任务。DWG和DXF作为两种广泛使用的CAD文件格式,经常需要在不同软件或平台间进行转换。那么要怎么做才能顺利转换呢?下面,本文将详细介绍三种在线转换…

通过Origin提取图片数据

第一步: Tool --> Digitizer 第二步:点击文件,导入图片 第三步:设置坐标轴位置和数值(Edit Aix) 滑动鼠标放大图片,将X1移动到0,X2移动到80,Y1移动到97.0&#xff0c…

极客天成分布式全闪存储在大模型训练中的应用

01 国内大语言模型训练使用的存储系统应用现状 近年来,中国在人工智能领域,特别是大语言模型(LLM)的研发和应用方面取得了显著进展。随着百度文心一言、阿里通义千问、讯飞星火等国产大模型的推出,中国AI产业进入了快速发展期。这一趋势带动…

SpringBoot 集成mybatis-plus

目录 前言 简介 前提 运用mybatis-plus(使用20241.1版本的idea) 1 自动创建springboot项目 1.1 点击新建,SpringBoot 1.2 添加依赖项,点击创建 2添加 MyBatis-Plus Starter 依赖 2.1 打开mybatis-plus官网,点…

适配算能BM1684开发板,bmodel推理模型转换

通过mlir转bmodel 一、文件转移 从算能官网technical center (sophgo.com)下载最新的版本,下载下来之后解压出来,再Ubuntu系统中创建一个sophon文件夹存放后续用到的文件,将tpu-mlir_v1.2.8-g32d7b3ec-20230802.tar.gz文件放入Ubuntu系统中…

《Java面试题集中营》- Redis

建议阅读《Redis开发与运维》《Redis设计与实现》《Redis深度历险:核心原理和应用实践》 Redis 为什么是单线程? 为什么单线程还能这么快? 单线程能够避免线程切换和竞态产生的消耗,而且单线程可以简化数据结构和算法的实现 至于单线程还快…

idea付费插件,SequenceDiagram有哪些优点

以下idea付费插件你们都用过哪些呢? SequenceDiagram插件是一种用于绘制时序图的工具。时序图是一种图形化的表示对象之间消息传递顺序的方法。 该插件可以在使用各种编程语言编写代码时,方便地绘制时序图,以帮助开发者更好地理解和描述系统…

Qt text-align和padding属性

1. text-align属性是用来设置文本的水平对齐方式。 text-align: center 文本将居中显示text-align: left 文本将左对齐显示text-align: right 文本将右对齐显示 2. 内边距padding: 内边距是元素内容与其边框之间的空间 padding-left: 10px; 距离内左边距10个像素点padding-r…