如果一条由评论触发的自动化显示活动条目 status: "sent",但发出评论的人却说他们从未收到私信,这几乎总是由于收件人的 Instagram 隐私设置——并非你的自动化或 Ayrshare 出了故障。
sent 表示 Instagram 接受了该消息,并不代表消息已被送达。 Instagram 在任何 API 层面都没有暴露消息投递情况。当 Instagram 接受该消息的那一刻,Ayrshare 就会把 send_dm 动作标记为 sent;消息是否实际到达收件人,取决于 Ayrshare 无法读取或更改的设置。
收件人的 “Message requests” 设置决定了投递
每个 Instagram 用户都会在 Settings and activity → Messages and story replies → Message requests 下控制谁可以向他们发送消息请求。可选项大致为 “Everyone”、“Your followers” 和 “No one”。
当你的自动化向一位已限制消息请求的人发送私信时,Meta 会接受该请求,返回一个带有消息 ID 的成功响应,然后静默丢弃这条消息。既没有错误,也没有失败 Webhook,更没有投递/已读信号——这种丢弃在任何 API 层都不可见。Meta 自己是知道该消息无法送达的(其自家 App UI 会显示*“This account can’t receive your message because they don’t allow new message requests from everyone”*),但它并不在 API 上暴露这一点。
已存在的会话会覆盖该设置
如果发送方与接收方已经有一条消息会话(例如收件人此前给该账号发过私信),那条已有会话会覆盖 Message requests 设置,自动化私信会作为新消息进入已有会话,而不是作为新请求出现。这也是同一条自动化能触达部分评论者却触达不了其他人的原因,以及为什么一位先给账号发消息的收件人此后就能可靠地收到自动化私信。
如何识别这种情况
- 活动条目显示
status: “sent”,且没有 errorDetails。 - 收件人反馈说没有收到私信(且也不在他们的消息请求文件夹里)。
- 在不同收件人之间呈间歇性——有人收到,有人没有——且与你的配置没有可循规律。
这是一种投递结果,而不是失败状态,因此它永远不会显示为 failed。failed 的行意味着 Instagram 拒绝了该发送,具体原因位于 actionResults[].errorDetails——那是另一种情况(参见错误码)。
你能做什么
没有任何编程手段可以绕过——没有任何 API、权限或发送形态能绕过收件人的 Message requests 设置。你可以做的是:
- 提前设定合理预期:由评论触发的私信只会送达那些 Instagram 设置允许消息请求的人,或已与你的账号有会话的人。
- 如果评论者希望收到后续消息,鼓励他们给你的账号发私信(或打开消息请求)——一条入站消息会永久打开会话。
- 可以考虑对评论进行公开回复,作为触达所有人的备用路径。
评论触发的私信是如何发送的(私信回复)
由评论触发的自动化通过 Instagram 私信回复投递私信,锚定在评论自身上。这正是它能够给你从未私信过的评论者发消息的原因。它的机制——以及相应的限制——值得了解:
- 以评论为锚的 7 天窗口。回复必须在评论产生后的 7 天内发送。超过之后窗口关闭,发送会以
code: 484 失败。 - 每条评论一生仅能回复一次。Instagram 只允许每条评论有一次私信回复。第二次尝试会以
code: 484 失败——Instagram 会通过与”窗口已关闭”相同的共享错误报告”已回复过”,因此需检查 errorDetails 判断具体是哪一种。 - 以消息请求形式到达。即便是被成功送达的私信回复,也会落入收件人的消息请求文件夹,需要接受——除非双方之间已存在会话。
- 投递仍然取决于收件人的设置。私信回复移除了”必须已私信过”的要求,但它并不覆盖收件人的 Message requests 设置——这就是上文描述的限制。
相关链接