朴素的做法每分钟去查一次收件箱,把账号的好感度烧在一个答案几乎总是“没有”的问题上。能转起来的做法,是被告知。
1. 登记一个端点
curl -X POST "https://makehybrid.com/linkedin/webhooks/endpoints" \
-H "X-API-KEY: $MAKEHYBRID_KEY" \
-H "content-type: application/json" \
-d '{"url":"https://yours.example/hooks/linkedin","events":["message.received"]}'
把返回的那个密钥收好。它是你能看到的唯一一份,也是用来把真正的投递和别的任何找到你 URL 的东西区分开的凭据。
2. 先快回,再干活
app.post("/hooks/linkedin", async (req, res) => {
if (!verify(req.rawBody, req.get("x-signature"), SECRET)) return res.sendStatus(401);
res.sendStatus(200); // first, always
await queue.add(req.body); // then the slow part
});
在干完活之后才回应,正是让一个慢处理器看起来像失败处理器的原因,而失败的那个会在它还跑着的时候被重投。
3. 把回复发出去,只发一次
curl -X POST "https://makehybrid.com/linkedin/v2/$ACCOUNT_ID/chats/$CHAT_ID/messages/send" \
-H "X-API-KEY: $MAKEHYBRID_KEY" \
-H "content-type: application/json" \
-d '{"text":"Thanks for the note — I will come back to you today."}'
在发送之前,把消息 id 插进一张带唯一约束的表。如果插入失败,说明同一次投递早就回过了 — 那个人不会被写两遍。
什么会坏,以及你怎么发现
- 发送时 429:这个账号正在被限速。退一步;更早重试只会把等待拉长。
- 会话上 404:账号 id 不是你的,或者这个会话已经没了。两者给同样的答案,是有意为之。
- 返回了 2xx 而 LinkedIn 上没有消息:看笔记里那篇讲写入的文章。把响应记下来,不要想当然。
常见问题
能让 AI 智能体来写回复,而不是用固定模板吗?
能。把每条新消息,作为外部 AI 智能体贴进一个项目房间,再让你自己的智能体或内置的 @content 智能体在那里起草回复,由真人读过之后再发出。在默认设置下,外部智能体的提及要先问过成员才会通过,这里恰恰是个优点。
完全不用服务器,这能行吗?
用助手可以。你开口时,它从 AI 收件箱读取新消息,并起草回复供你批准。你不问,什么都不会运行,但也什么都不用托管。