大家好,

我玩 n8n 有一阵子了。我想要一个 Facebook 主页的机器人,能替我回复客户的预订咨询,还能顺手收集线索,不用我盯着收件箱。下面说说它怎么跑起来的,希望能帮到有需要的人。

流程(共 9 个节点):

1. Webhook(GET + POST) 一个 Webhook 节点,同时开启 GET 和 POST 两种方法。Facebook 会用 GET 请求一次来校验 Webhook,之后每当有人给你的主页发消息,就用 POST 请求推送过来。

2. GET 分支:校验 If 节点检查 hub.verify_token 是否与我的密钥一致 → Respond to Webhook 返回 hub.challenge。Facebook 要接受这个 URL,只需要这些。

3. POST 分支:真正的机器人

  • AI Agent 从 body.entry[0].messaging[0].message.text 读取消息
  • OpenAI Chat Model(gpt-4o-mini,便宜且速度足够快,适合聊天场景)
  • Simple Memory,会话键设为发送者的 ID,这样每个客户都有各自的对话历史。没有这一项,机器人在两条消息之间就会忘掉之前的一切。
  • 系统提示词让它扮演预约助手,回答保持简短,并在有人想预约时询问姓名、日期和邮箱。

4. 发送回复
HTTP Request 会带上页面访问令牌、发送者 ID 和 AI 的输出,向 graph.facebook.com/v21.0/me/messages 发起 POST 请求。

5. 线索收集
同时,agent 的输出会进入一个 Filter 节点,只放行包含邮箱(正则匹配)的消息 → 再由一个 Code 节点提取出邮箱、发送者 ID、消息内容和时间戳 → Google Sheets 往「potential leads」表里新增一行。

这样客户能立刻收到回复,我也能拿到一份名单,列出所有留下邮箱的人。

我踩过的坑:

  • 如果你不快速回一个 200,Facebook 会重发同一条消息。在 POST 分支上加一个 Respond to Webhook 节点。
  • 送达和已读事件没有文本,会让 agent 报错中断。先加一个 If 节点,检查 message.text 是否存在。
  • 只有管理员和测试人员能收到回复,因为应用还处于 Development 模式。要正式公开上线,需要通过 pages_messaging 的 App Review。
  • 把 AI 输出包进 HTTP body 里的 JSON.stringify(),否则回复中的引号和换行会破坏 JSON。

成本: n8n 自托管(免费),加上按我的用量每天几美分的 OpenAI 调用费。

想要工作流 JSON 的话,我很乐意分享。接下来我在考虑把它接到 Google Calendar 上,让它能自己预约。欢迎提想法和改进建议!