Blog

/ /

消息能发出去但对方收不到-一篇文章讲清半送达的三种根因

“我发了呀,显示发送成功了!”

这是我听过最多次的”故障描述”。

发消息的人说发出去了,收消息的人说没收到。两边都没说谎,但问题就是存在。这种情况,在三条聊天的用户反馈里有个不正式的叫法——半送达。

所谓半送达,就是:消息从你这边的客户端”离开”了,显示已发送,但对面客户端没有触发”收到新消息”的推送,也没有把这条消息标记为已读。

听起来像是”消息在传输途中丢了”。但其实没那么玄乎,通常就是三种根因之一。

根因 A:对端客户端”假装不在线”

这是最常见的一种,但也是最难解释清楚的一种。

现象:消息显示已发送,对方客户端从未”上线接收”。你看到他头像旁边显示”在线”,但消息就是没推送过去。

原因:对方客户端的长连接断了。长连接是消息推送的基础——你的客户端和服务器之间有一条持久通道,服务器有新消息就通过这条通道推送过去。如果这条通道断了,服务器会暂时把消息存起来,等通道恢复再推。

但如果对方客户端的”网络切换”逻辑有问题(比如从 WiFi 切到 4G 时,长连接没平滑迁移),就会出现”看起来在线,实际不通”的状态。

怎么排查:

  1. 让对方在三条电脑版上看一眼对话列表。如果消息已经在列表里,说明消息到了,只是没推送。
  2. 让对方退出当前账号,重新登录一次。这会强制重建长连接。
  3. 如果重新登录之后消息立刻推送,基本确认是长连接问题。

怎么避免:

  • 让对方升级到最新版客户端。
  • 在网络切换频繁的场景(比如笔记本在公司 WiFi 和家里 WiFi 之间切换),偶尔重启客户端。

根因 B:对端账号被多端登录”挤掉”

现象:消息显示已发送,但只有部分设备收到。手机收到了,电脑没收到;或者反过来。

原因:三条聊天支持多端登录,但有设备数量上限(默认 5 个)。当超过上限时,最早登录的设备会被静默踢下线。

这个”踢下线”不会通知你,也不会弹窗。你以为设备还在线,实际它的长连接已经断了。新消息推送给”在线的设备”,所以你以为是”消息没到”,实际是”这个设备已经收不到了”。

怎么排查:

  1. 让对方在三条电脑版看”设置 → 设备管理”,看登录了几个设备。
  2. 如果超过 5 个,踢掉不用的。
  3. 踢完之后,断线的设备重新登录,未推送的消息会立刻同步。

怎么避免:

  • 不用的设备主动退出登录。
  • 重要的沟通尽量在 1-2 个常用设备上完成,不要”全设备铺开”。

根因 C:消息被本地通知系统”压住”

现象:消息确实到了对方客户端,但对方手机/电脑的通知栏没有弹出。

原因:操作系统的通知通道,有自己的优先级和节流策略。某些情况下,即使消息到了客户端,系统也会因为以下原因不弹通知:

  • 对方开了”专注模式”或者”免打扰”。
  • 对方把三条的通知权限关了。
  • 对方的系统判定这是”低优先级消息”(比如你连续发了多条相似消息,系统会折叠)。
  • 对方把对话标记成了”已读”,系统认为不需要再次提醒。

怎么排查:

  1. 让对方打开三条客户端,直接看对话列表。如果消息在列表里,说明客户端收到了。
  2. 检查系统的通知设置:三条的权限是不是”允许通知”?
  3. 检查对话本身:有没有被设成”免打扰”?

怎么避免:

  • 在设置里把重要的对话”置顶”,系统会优先推送。
  • 在系统层面允许三条的”重要通知”权限,而不是只允许”普通通知”。

综合排查清单

如果你是发消息的一方,怀疑”半送达”,可以让对方按这个清单检查:

检查项操作期望结果
1. 对话列表里有没有这条消息?让对方打开三条电脑版看如果有,客户端收到了
2. 设备管理里有没有不认识的设备?设置 → 设备管理删掉不用的
3. 系统通知权限开了吗?手机设置 → 应用 → 三条 → 通知全部打开
4. 对话有没有被免打扰?长按对话 → 免打扰关闭
5. 客户端是不是最新版?设置 → 关于升级到最新

如果这 5 步走完,对方还是说”没收到”,那基本可以确定是服务器端的延迟或者故障,需要联系三条官方支持。

FAQ

Q:为什么我说已发送,对方说没收到,系统也不报错?

A:大概率是”长连接断开”或者”设备被踢下线”。这两种情况下,服务器都认为”消息送达成功”(因为消息进了对端的存储队列),但客户端还没真正拉到这条消息。让对方重启客户端或者重新登录即可。

Q:消息撤回成功,但对方说还是看到了,这是为什么?

A:撤回是”软删除”——在你这边删了,但对方如果已经拉到本地,撤回指令要传过去才能生效。如果对方当时不在线,撤回指令要等对方上线才会执行。所以如果对方在你撤回之后才上线,他可能看到一条”对方撤回了一条消息”的提示。

Q:为什么有些消息秒到,有些消息要等几分钟?

A:消息的优先级不同。普通文字消息优先级最高,几秒必到。带大文件的、批量图片的、转发的链接,优先级会低一些。这是正常的,不是 bug。

Q:消息显示”已读”了,对方还说没看到,怎么办?

A:让对方检查通知设置,以及对话列表的滚动位置。已读代表客户端确认拉到了消息,但通知可能被静默了。

Leave a Reply

Your email address will not be published. Required fields are marked *