邀约与私信

批量私信的送达判据

为什么 ACK / HTTP 200 不算送达,以及未确认时客户端会怎么做。

这一页解释「为什么软件说没送达」以及「怎样才算真的发出去」。批量私信最容易出问题的地方,不是请求发没发出去,而是发出去之后到底有没有进入对方的会话。

1. 不走 HTTP 盲发

旧方案调用 HTTP 接口,看到 status=0 或 HTTP 200 就记「已发送」。但这类回执只代表服务端收下了请求,不代表消息进入了会话,更不代表对方能看到。

万境当前走的是:

  1. 主进程建立/复用页面 WebSocket 会话;
  2. 按 IM 协议发送 protobuf 帧;
  3. 回到该达人的精确会话历史里查 s:client_message_id;
  4. 命中后才把这条记为「已发」。

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会话/达人状态异常停止并提示检查会话
98001004Cookie 或店铺 ID 不匹配提示重新绑定店铺
98001002 / 10000 / 45101011会话未就绪、需要重新登录或识别站点连续出现才停,单条个体失败只跳过

6. 实操建议

  1. 新店、新话术先跑 10–20 个达人,确认网页端/APP 端能看到消息;
  2. 组合消息先只发文字,确认链路正常后再加图片和商品卡;
  3. 看到「未确认送达」先停,不要连续重试同一批人;
  4. 保留日志;需要协助时用客户端内「问题反馈」,勾选日志和截图,必要时附带故障店铺 Cookie。