腾讯im坑位地图 - 劝退贴

背景

某线上虚拟医院需求,医患两端实时交流需求;为了满足医患两端的聊天需求,公司项目引入im聊天服务;并且正在逐步把im对话作为项目的主要流程,
各种开方、续方、问诊订单、提醒都接入了im;
腾讯是大厂,微信、qq也是独步天下的,这也是我们选择腾讯im的原因;
(主要是使用了腾讯的全家桶,cdn、cos云存储。。。领导也是腾讯那边过来的,说是有资源,可以得到更好的支持);于是风风火火开搞,谁曾想,从选择腾讯的那一刻开始,各种姿势踩坑,从仰望到失望,从入门到抓狂。。。。。。

项目上下文:

接入形式:
前端sdk、后端restApi服务接入;时序图:
在这里插入图片描述

账号创建部分就是简单的后台的restApi调用,不赘述;

看时序图非常简单明了,接入上手简单门槛低;
谁曾想,真正用起来,各种姿势被坑,让人抓狂,欲哭无泪!!!

坑位地图

深度体验踩坑:(场景比较绕)
以下分为历史消息存储、回调、消息展示及部分一一列出坑位,欢迎讨论、参考、咨询;

历史消息存储

普通付费账号,消息只能存30天;
为了尽快上线,我们的历史消息展示采用im sdk提供的历史消息展示功能,避免因为从自己db种获取、展示带来的问题;看文档免费账号支持延长消息存储市场为:7天;购买专业版消息存储时长为30天;
意思是如果不单独购买存储时长,只能拿到1个月的历史消息,(并不是你的账号一直缴费就一直能查看所有历史消息;并且,30天过后,消息历史清空,也就是如果7月1号上线,不购买存储时长的话,8月1号就看不到7月1号的消息了,而且,即使你8月2号买了180天时长,8月2号前30天的消息仍然拿不到了,因为被删除了;)
哑巴亏第一蛋

回调请求:

回调提示成功但是接收端看不到消息

由于两种回调请求,推送后回调参数显示消息发送成功;各种数据都正常并且表示消息发送成功,但是前端却看不到消息!!调用历史消息查询接口:/v4/openim/admin_getroammsg也查询不到数据;

回调缺失

A给B一共发送了5条im消息,发送和接收双方都能看到消息,但是只能收到其中的3条回调;

回调参数问题

后台指定A发送给B消息发送成功,收到的回调,toAccount 值却是:@TLS#NOT_FOUND(账号已经注销) ;我拿出生产环境日志,找到这个发送的账号调他们的account_check接口,确定这个账号没有被注销,并且,我们项目根本没有用到他们的注销接口啊!!!!

历史消息问题

历史消息缺失

A B 在对话过程中,其中一条消息是由A发送给B的,聊天当时发送成功,但是B重新进入对话框之后看不到该条消息;
后台已经接收到消息发送后的回调并处理成功;

即时聊天问题

第三者插足

两人聊天其中一方看到“第三者发送的消息”:涉及A B C 三个账号,其中 A与B正常聊天过程中,A在当前聊天页面看到了C给A发送的消息,而且消息一瞬即逝,聊天版的幻读,第三者插足啊!!!!
看看人家的回复:
在这里插入图片描述
看着没毛病吧,很官方;
实际呢,工单开头已经提供了这些东东了。
在这里插入图片描述

工单客服问题

客服人员能够在你没有及时补充相关问题描述时,打电话通知提交补充信息,这点还是值得表扬的;
可是,他们的技术支持人员,,,保证把你的问题磨到你放弃提问;各种装傻,各种看不懂你提的问题,明明工单上写的清清楚楚,问题的产生场景、各种log、各种参数都提供了,还在下面留言让提供这参数那参数,(明明在工单上面都写了,而且都是特殊标注!!!)反复留言好几次,之后,感觉实在不能再说提供的信息不全了,最后人家给你留言:我们这边并没有复现,,,what the fk?
完全客观描述,下面工单截图为证:针对以上的这几种问题,提的工单列表如下:
在这里插入图片描述
谨以此文,奉劝待接入im的同学,三思,三思;


后记
上面的第三者插足问题,在昨天深夜已经解决了;(主要是上线时间太紧,之前没耐心静下心来分析问题)
问题复现
1、打开A账号与B账号的聊天界面,保持
2、C账号发送消息给A账号
3、问题必现
原因分析
前端imsdk在注册对话的时候,只有一个sdkappid参数,sdk无法判断当前的对话是谁跟谁的对话;

但是在拉取历史消息列表时,有两个参数(fromAccount + toAccount);因此拉到的消息是当前两个人的历史消息;

基于以上两点,会出现:只要A正在与某个人的im对话框中,则,所有发给A的消息都会被展示在当前这个对话框中;

需要客户端对sdk二次开发,在渲染消息的时候,判断当前消息的fromAccount是不是当前im对话框的另外一方(当前是在A账号的视角,则就是当前对话的toAccount);不是的需要忽略;

另外
由于im支持后台调用sendmsg接口,指定账号A给账号B发送消息,同时支持消息同步在A的页面显示,此时sdk收到的事件消息的fromAccount就是A自己,需要在上面的改正基础上再加上一条判断,就是当fromAccount是自己时,消息也需要展示在对话框里;

至此,完美解决第三者插足问题;

最后吐槽一下腾讯的文档,
上面的这个问题,但凡文档里提一句关于消息展示的注意事项(比如需要二次开发,需要自行判断该消息是否需要展示等),也不致于让我们踩到这个大坑上,针对这个问题,前后提过三次工单,补充过几十次详细细节,结果是:
在这里插入图片描述
在这里插入图片描述
哎,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值