这一页解释「为什么软件说没送达」以及「怎样才算真的发出去」。批量私信最容易出问题的地方,不是请求发没发出去,而是发出去之后到底有没有进入对方的会话。
1. 不走 HTTP 盲发
旧方案调用 HTTP 接口,看到 status=0 或 HTTP 200 就记「已发送」。但这类回执只代表服务端收下了请求,不代表消息进入了会话,更不代表对方能看到。
万境当前走的是:
- 主进程建立/复用页面 WebSocket 会话;
- 按 IM 协议发送 protobuf 帧;
- 回到该达人的精确会话历史里查
s:client_message_id; - 命中后才把这条记为「已发」。
2. 三种消息形态
| 形态 | subCmd | 说明 |
|---|---|---|
| 文字 | 10029 | 纯文本话术 |
| 图片 | 10174 | 先上传图片,再发图片消息 |
| 商品卡 | 10380 | 商品卡片消息 |
组合模式可以按你指定的顺序发送文字、图片、商品卡。每一块都要确认命中后才发下一块;不会因为第一块成功就把剩下的盲发出去。
3. 什么不算送达
以下都不算:
- WebSocket 已连接
- 请求返回 ACK
- HTTP 200
- 外层
status=0 - 界面上出现「已提交」
只有精确会话历史里出现对应的 client_message_id,才算这条消息真的进入了会话。
4. 未确认时会怎样
- 任务立即停止;
- 这条不记为「已发」;
- 不自动重发;
- 日志里保留原始错误码和会话信息,方便排查。
这是保护机制,不是 bug。批量任务最怕「以为发了,其实没发」然后继续跑几百条。
5. 常见的平台侧限制
| 错误码 | 含义 | 客户端处理 |
|---|---|---|
| 16030001 | 达人未开通电商(EC)权限 | 归为「跳过」,不计失败,不重试 |
| 16030009 | 平台测试账号(creator is test account) | 归为「跳过」,不计失败;换一批真实达人 |
| 16024049 | 该店铺当日发送额度用完 | 停止该店铺任务,不换站点绕过 |
| 16030007 | 该站点店铺未激活 | 停止并提示去 TikTok 后台开通 |
| 16030008 | 会话/达人状态异常 | 停止并提示检查会话 |
| 98001004 | Cookie 或店铺 ID 不匹配 | 提示重新绑定店铺 |
| 98001002 / 10000 / 45101011 | 会话未就绪、需要重新登录或识别站点 | 连续出现才停,单条个体失败只跳过 |
6. 实操建议
- 新店、新话术先跑 10–20 个达人,确认网页端/APP 端能看到消息;
- 组合消息先只发文字,确认链路正常后再加图片和商品卡;
- 看到「未确认送达」先停,不要连续重试同一批人;
- 保留日志;需要协助时用客户端内「问题反馈」,勾选日志和截图,必要时附带故障店铺 Cookie。