关于腾讯IM消息ID不统一的问题?服务端的MsgKey和前端的msgID不一样

news/2024/10/4 19:33:50/文章来源:https://blog.csdn.net/weixin_44309374/article/details/142055841

角色=>前端:web、小程序、客户端(ios、安卓);服务端;腾讯IM;

1、背景

IM消息ID不一致,本地没有缓存历史数据,导致在调用腾讯sdk方法时,id不一致报错问题

2、调研目的

  • 消息ID不统一的原因
  • 腾讯IM消息ID规则
  • 找到唯一ID的方法

3、问题描述

因为腾讯返回给服务端的MsgKey和前端的msgID不一样,没有唯一标识。
场景是拉我们自己服务端的历史记录接口。
如果 客户端 发了一条信息到 小程序,这个时候 小程序 是腾讯IM返回的msgID
客户端 退出了应用,又重新进入应用。
进入会话页-我们会重新拉取服务端的历史记录接口。这个时候客户端只有腾讯给服务端的MsgKey字段,并不是msgID。
那现在 客户端 想要撤回刚刚的消息,需要调用腾讯的SDK,在消息体里面需要一个消息ID,这个消息ID需要msgID的(也就是腾讯返回给前端的ID),但是现在客户端调取接口只有一个MsgKey,所以发生错误

4、腾讯IM消息ID规则 cloud.tencent.com

  • 客户端单聊/群聊消息 msg_id 的组成是:tinyid-clientTime-random
  • Web 端单聊/群聊消息 msgID 的组成是(v2.18.0及以上):tinyid-clientTime-random
  • 服务端单聊消息 msgKey 的组成是:clientSeq_random_serverTime

5、消息ID不统一的原因

我理解就是他们客服自己也不明白为啥不一样
在这里插入图片描述

6、消息ID不一样的表现

小程序实时接收到的格式:
"message": {"ID": "144115244425849730-1715418597-12766512","conversationID": "C2Cdl5qrip454w0","conversationType": "C2C","time": 1715418597,"sequence": 1657570002,"clientSequence": 1657570002,"random": 12766512,"from": "djrfbu1gq51c","to": "dl5qrip454w0","flow": "out","isSystemMessage": false,"protocol": "JSON","isResend": false,"isRead": true,"status": "success","clientTime": 1715418597,"senderTinyID": "144115244425849730","revokerInfo": {"userID": "","nick": "","avatar": ""},"type": "TIMCustomElem"
}
客户端实时接收到的格式:

在这里插入图片描述

服务端实时接收到的格式:
[Data:{"msgType": 7,"groupCode": "1789217509812125696","fromAccount": "1783382717849858048","targetAccount": "1788444782364856320","msgTriggerType": 2,"groupType": 0,"msgDigest": "看看看看看看看","content": {text:"看看看看看看看 "},"visibleRoles": "0011","status": "unSend","consultationOrderCode": "PO1789217509556285440","isMe": true},MsgRandom:"12766512",MsgSeq:"1657570002",MsgTime:"1715418597",MsgKey:"1657570002_12766512_1715418597",OnlineOnlyFlag:"0"
]
历史记录接口返回的格式
{groupCode: "1793578864715370496",msgContent: "{"keywords":[{"keyword":"{ConnectCustomer}","link":"400-888-6890","linkType":2,"replaceKeyword":"联系客服"}],"text":"医生将在 12 小时内与您沟通,逾期未回复,您可继续等待或 {ConnectCustomer}"}"msgKey: "1657570002_12766512_1715418597",msgRetraction: false,msgSeq: 1657570002,msgTime: 1715418597,MsgRandom: 12766512, // 需要接口新增当前字段msgType: 6,senderCode: "1792395382068744192",
}

7、通过对比发现

前端 可以通过 历史记录接口 中的 msgTime、MsgRandom和当前用户的tinyID拼接成前端的msg_id

小程序可以在登录的成功回调中获取到当前用户的tinyID。客户端的登录成功回调没有返回参数
在这里插入图片描述

所以说前端和服务端id不同,只缺一个tinyID就可以手动拼接

8、腾讯IM的反馈

这个tinyID是腾讯根据用户的userid生成的。

tinyid是后台给userid的映射,但是userid并不是tinyid

如果你需要判断一个消息是否为同一个,可以通过severtime和random判断

客户端可以通过xlog日志获取到tinyID https://cloud.tencent.com/developer/article/1502366
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

9、解决方案

1、前端获取tinyID

在这里插入图片描述

  1. 客户端在登录的时候,读取IM的日志文件,获取到当前用户的 tinyID ,拿到tinyID后保存到服务器
  2. 进入对话页,先根据群code获取当前会话页人员的 tinyID 接口——新增接口
  3. 根据senderCode和ownerCode判断是不是自己发送的消息
  4. 如果是患者,使用患者的tinyID拼接,医生 使用医生的tinyID拼接
2、通过后端获取tinyID
  1. 进入对话页调用后台的一个接口,以当前群组内的医生和患者名义自动触发一个消息,当前消息不上屏。
  2. 前端拿到当前的实时消息后,分别存储医生和患者的tinyID
  3. 调用服务端历史记录接口遍历判断是否为自己发送,拼接ID
3、拉取腾讯的历史记录接口
  1. 需要区分最近拉取的20条数据,是否是当前群组的,如不是,继续拉取
  2. 安卓可以设置拉取某个时间段内的记录,web&小程序不可以
4、等待腾讯SDK更新

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程新知网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt网络】—— Qt网络编程

目录 (一)UDP Socket 1.1 核心API概览 1.2 代码示例 1.2.1 回显服务器 1.2.2 回显客户端 (二)TCP Socket 2.1 核心API概览 2.2 代码示例 2.2.1 回显服务器 2.2.2 回显客户端 (三)HTTP Client 3…

在 Web 中判断页面是不是刷新

在 Web 开发中,我们经常需要区分用户是否通过刷新操作重新加载了页面。这一操作可能是由用户手动刷新(如按下 F5 键或点击浏览器刷新按钮)或通过浏览器自动重新加载。判断页面是否刷新有助于开发者优化用户体验,例如在使用 vue 的…

一文讲清投影,定义投影,投影栅格……

正确的空间坐标系是进行地理分析和处理的基础,投影是其中十分重要的概念。在ArcGIS系列的软件中关于投影的工具有四个,分别是定义投影、投影、投影栅格、批量投影。 你能分清他们吗? 如果不能。别急,下面我来给你一一介绍。 定…

Java学习中,为什么会混淆类方法和实例方法,应该怎么办?

在Java学习过程中,初学者经常会混淆类方法(静态方法)和实例方法。这种混淆源于它们之间的概念和使用方式具有一定的相似性,但却在本质上存在较大的区别。理解并掌握两者的区别和应用场景,是掌握Java面向对象编程思想的…

Vscode python无法转到函数定义

今天上午换了电脑,使用Vscode发现找不到对应的函数定义了。 使用了网上的全部教程。一点用没有。重启电脑,重启Vscode也没有作用。最后通过重装vscode,解决问题。(也不知道Vscode什么毛病) 重点语句: 去官网…

mac 电脑 git credential osxkeychain问题

git credential osxkeychain问题,无法拉取最新代码,failed to get:-128 1.问题描述 不知道是系统还是brew进行了更新,启动项目后 git pull 无法拉取最新代码,git项目git pull 操作时突然提示:git credential osxkeych…

VTK-vtkBandedPolyDataContourFilter学习

官网有一个例子,看完之后仍然不太明白。经过一点点的探索,记录一下收获。 1.建立一个六边形的点集 Create(vtkPoints, points);points->InsertNextPoint(-5, 0, 0);points->InsertNextPoint(-2.5, -4.33, 0);points->InsertNextPoint(2.5, -4.…

首批通过!华为云CodeArts Snap智能开发助手通过可信AI智能编码工具评估,获当前最高等级

近日,华为云CodeArts Snap智能开发助手在中国信通院组织的智能编码工具首轮评估中,最终获得4级评级, 成为国内首批通过该项评估并获得当前最高评级的企业之一。 此次评估以《智能化软件工程技术和应用要求 第2部分:智能开发能力》为依据&…

数据结构与算法——带小白详谈顺序表

目录 一:线性表 二:顺序表 2.1:静态顺序表 2.2:动态顺序表 三:顺序表功能实现(动态) 3.1:对顺序表进行初始化 3.2:判断顺序表是否为空 3.3:打印顺序表…

前端技术(七)——less 教程

一、less简介 1. less是什么? less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Mixin、函数等特性,使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服…

【Delphi】使用Windows 中的蓝牙功能

要在 Delphi 中实现一个完整的蓝牙操作程序,包括蓝牙设备的发现、配对、连接和数据发送,您可以使用 Windows 的 Bluetooth API。此 API 提供了用于蓝牙通信的各类函数。以下是一个演示程序,它展示了如何发现、配对、连接和发送数据。 主要步…

图的广度优先遍历与深度优先遍历(C语言)

这是结果 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>#define _CRT_SECURE_NO_WARNINGS// 定义边表结点结构 typedef struct EdgeNode {int adjvex; // 邻接顶点域&#xff0c;存储该边所指向的顶点struct EdgeNode* next; // 指向下一条…

RP2040 C SDK clocks时钟源配置使用

RP2040 C SDK clocks时钟源配置使用 &#x1f33f;RP2040时钟源API函数文档&#xff1a;https://www.raspberrypi.com/documentation/pico-sdk/hardware.html#group_hardware_clocks &#x1f341;RP2040时钟树&#xff1a; 系统时钟源可以来自外部时钟输入&#xff08;exte…

Mysql Innodb存储引擎原理—链接如下

Mysql Innodb存储引擎| ProcessOn免费在线作图,在线流程图,在线思维导图 ProcessOn是一个在线协作绘图平台&#xff0c;为用户提供强大、易用的作图工具&#xff01;支持在线创作流程图、思维导图、组织结构图、网络拓扑图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。同…

conda、anaconda、pip、torch、pytorch、tensorflow到底是什么东西?(转载自本人的知乎回答)

转载自本人的知乎回答&#xff08;截止2024年9月&#xff0c;1700赞同&#xff0c;2400收藏&#xff09; https://www.zhihu.com/question/566592612/answer/3063465880 如果你是一个大四的CS准研究生回去补基础课&#xff0c;假如是科班CS甚至科班EE的话那你基础也太差了。你…

Docker方式部署ProxySQL和Keepalived组合实现MGR的高可用访问

ProxySQL 代理访问MGR&#xff0c;可以做到故障自动切换主节点&#xff0c;可以自定义访问规则实现读写分离 目录 网络架构一、环境准备二、软件安装1. MGR集群配置2. 创建必要用户2. ProxySQL部署测试3. Keepalived部署高可用4. 测试高可用 网络架构 一、环境准备 三台物理主…

python-新冠病毒

题目描述 假设我们掌握了特定时间段内特定城市的新冠病毒感染病例的信息。在排名 i 的当天有 i 个案例&#xff0c;即&#xff1a; 第一天有一例感染第二天有两例感染第三天有三例感染以此类推...... 请计算 n 天内的感染总数和每天平均感染数。 输入 整数 n 表示天数&…

运动耳机精选分享,热门骨传导耳机运动好物推荐!

因为骨传导耳机独特的佩戴方式和声音的传播方式&#xff0c;受到了小耳、油耳以及运动爱好者的的喜爱&#xff0c;但也由于市面上的骨传导耳机品牌越来越多&#xff0c;很多朋友不知道该怎么选择&#xff0c;今天我挑选出市面上体验感较好&#xff0c;各方面比较出色的骨传导给…

通信工程学习:什么是FMC固定移动融合

FMC&#xff1a;固定移动融合 FMC固定移动融合&#xff0c;即Fixed Mobile Convergence&#xff08;固定移动网络融合&#xff09;&#xff0c;是指通过固定网络与移动网络之间的融通、合作&#xff0c;实现全业务及融合业务的经营。这一技术旨在打破传统固定网络和移动网络之间…

2024年职业院校人工智能实训室方案解读(融入AIGC技术)

随着人工智能技术的飞速发展&#xff0c;职业院校作为技能型人才培养的重要基地&#xff0c;亟需加强人工智能实训室的建设&#xff0c;以应对市场需求和行业变革。该方案不仅涵盖了全面的人工智能教学内容&#xff0c;还融入了AIGC&#xff08;Artificial Intelligence Genera…