“我发了呀,显示发送成功了!”
这是我听过最多次的”故障描述”。
发消息的人说发出去了,收消息的人说没收到。两边都没说谎,但问题就是存在。这种情况,在三条聊天的用户反馈里有个不正式的叫法——半送达。
所谓半送达,就是:消息从你这边的客户端”离开”了,显示已发送,但对面客户端没有触发”收到新消息”的推送,也没有把这条消息标记为已读。
听起来像是”消息在传输途中丢了”。但其实没那么玄乎,通常就是三种根因之一。
根因 A:对端客户端”假装不在线”
这是最常见的一种,但也是最难解释清楚的一种。
现象:消息显示已发送,对方客户端从未”上线接收”。你看到他头像旁边显示”在线”,但消息就是没推送过去。
原因:对方客户端的长连接断了。长连接是消息推送的基础——你的客户端和服务器之间有一条持久通道,服务器有新消息就通过这条通道推送过去。如果这条通道断了,服务器会暂时把消息存起来,等通道恢复再推。
但如果对方客户端的”网络切换”逻辑有问题(比如从 WiFi 切到 4G 时,长连接没平滑迁移),就会出现”看起来在线,实际不通”的状态。
怎么排查:
- 让对方在三条电脑版上看一眼对话列表。如果消息已经在列表里,说明消息到了,只是没推送。
- 让对方退出当前账号,重新登录一次。这会强制重建长连接。
- 如果重新登录之后消息立刻推送,基本确认是长连接问题。
怎么避免:
- 让对方升级到最新版客户端。
- 在网络切换频繁的场景(比如笔记本在公司 WiFi 和家里 WiFi 之间切换),偶尔重启客户端。
根因 B:对端账号被多端登录”挤掉”
现象:消息显示已发送,但只有部分设备收到。手机收到了,电脑没收到;或者反过来。
原因:三条聊天支持多端登录,但有设备数量上限(默认 5 个)。当超过上限时,最早登录的设备会被静默踢下线。
这个”踢下线”不会通知你,也不会弹窗。你以为设备还在线,实际它的长连接已经断了。新消息推送给”在线的设备”,所以你以为是”消息没到”,实际是”这个设备已经收不到了”。
怎么排查:
- 让对方在三条电脑版看”设置 → 设备管理”,看登录了几个设备。
- 如果超过 5 个,踢掉不用的。
- 踢完之后,断线的设备重新登录,未推送的消息会立刻同步。
怎么避免:
- 不用的设备主动退出登录。
- 重要的沟通尽量在 1-2 个常用设备上完成,不要”全设备铺开”。
根因 C:消息被本地通知系统”压住”

现象:消息确实到了对方客户端,但对方手机/电脑的通知栏没有弹出。
原因:操作系统的通知通道,有自己的优先级和节流策略。某些情况下,即使消息到了客户端,系统也会因为以下原因不弹通知:
- 对方开了”专注模式”或者”免打扰”。
- 对方把三条的通知权限关了。
- 对方的系统判定这是”低优先级消息”(比如你连续发了多条相似消息,系统会折叠)。
- 对方把对话标记成了”已读”,系统认为不需要再次提醒。
怎么排查:
- 让对方打开三条客户端,直接看对话列表。如果消息在列表里,说明客户端收到了。
- 检查系统的通知设置:三条的权限是不是”允许通知”?
- 检查对话本身:有没有被设成”免打扰”?
怎么避免:
- 在设置里把重要的对话”置顶”,系统会优先推送。
- 在系统层面允许三条的”重要通知”权限,而不是只允许”普通通知”。
综合排查清单
如果你是发消息的一方,怀疑”半送达”,可以让对方按这个清单检查:
| 检查项 | 操作 | 期望结果 |
|---|---|---|
| 1. 对话列表里有没有这条消息? | 让对方打开三条电脑版看 | 如果有,客户端收到了 |
| 2. 设备管理里有没有不认识的设备? | 设置 → 设备管理 | 删掉不用的 |
| 3. 系统通知权限开了吗? | 手机设置 → 应用 → 三条 → 通知 | 全部打开 |
| 4. 对话有没有被免打扰? | 长按对话 → 免打扰 | 关闭 |
| 5. 客户端是不是最新版? | 设置 → 关于 | 升级到最新 |
如果这 5 步走完,对方还是说”没收到”,那基本可以确定是服务器端的延迟或者故障,需要联系三条官方支持。
FAQ
Q:为什么我说已发送,对方说没收到,系统也不报错?
A:大概率是”长连接断开”或者”设备被踢下线”。这两种情况下,服务器都认为”消息送达成功”(因为消息进了对端的存储队列),但客户端还没真正拉到这条消息。让对方重启客户端或者重新登录即可。
Q:消息撤回成功,但对方说还是看到了,这是为什么?
A:撤回是”软删除”——在你这边删了,但对方如果已经拉到本地,撤回指令要传过去才能生效。如果对方当时不在线,撤回指令要等对方上线才会执行。所以如果对方在你撤回之后才上线,他可能看到一条”对方撤回了一条消息”的提示。
Q:为什么有些消息秒到,有些消息要等几分钟?
A:消息的优先级不同。普通文字消息优先级最高,几秒必到。带大文件的、批量图片的、转发的链接,优先级会低一些。这是正常的,不是 bug。
Q:消息显示”已读”了,对方还说没看到,怎么办?
A:让对方检查通知设置,以及对话列表的滚动位置。已读代表客户端确认拉到了消息,但通知可能被静默了。


