下面这句话,造成了 LinkedIn 自动化里最昂贵的那些毛病:API 返回了 200,所以帖子发出去了。
未必。任何一个 LinkedIn API 返回 2xx,意思都是请求被接下并往下传了。LinkedIn 之后拿它怎么办 — 不给任何人看、扣下来审核、悄悄丢掉、先显示再在二十分钟后撤掉 — 都不在那个响应里,而且有好几种情况根本不在任何响应里。
这段距离从何而来
在你的代码和一条看得见的动态之间至少隔着两跳,而第二跳是一个对自动化内容自有主张的平台。一个同步的状态码,没法去汇报一个还没作出的判断。没有谁在瞒着什么;在写下响应的那一刻,那份信息并不存在。
与其想当然,不如这么做
- 把你发出去的东西连同响应和时间戳一起存下来。不是一个布尔值:是正文。
- 读回来。如果一条动态要紧,事后把它取回来,记下回来的是什么。
- 把调用的次数和看得见的结果数当作两个不同的指标,因为它们本来就是。
- 绝不要只凭一个状态码就给客户看“已发布”。
最扎人的那种情形
超时。你的请求并没有失败 — 只是你不再等那个答案了。那次写入很可能已经落下了。重试正是一条消息变成两条的路径,而客户注意到的是第二条。给你打算做的每一次写入留一个 id,重试之前先查一查,并且宁可去读世界,也不要把请求重放一遍。
常见问题
AI 智能体分得清这两者吗?
只有在被告知的时候。收到 200 的 AI 智能体,通常会把帖子报告为已发布。把规则写进它的指令:把一次写入报告为“已被接受”,并且在说它已经发出去之前,先把它读回来。
项目房间怎么报告一次写入?
作为 AI 智能体的回复,在房间里,所有人都看得到。这正是让智能体引用它发出的内容和拿回的 id 的充分理由。