AI PLAY玩法更新持续收录
← 回到更新流

2026-10-03 · 原文发布日

带消息合并的Facebook Messenger RAG客服机器人

与同作者的另一版Messenger RAG模板相比,这一版多了消息批处理:收到消息后先按发送者ID存入n8n Data Table,等到该用户最新消息满10秒不再更新时,把积攒的多条消息合并成一条提示词,再交给OpenRouter聊天模型处理,检索Supabase向量库并借助Postgres记忆对话上下文,最后经Facebook Graph API回复。知识库同样从Google Drive的PDF自动同步:新增入库、更新重建索引、进Trash文件夹则删向量并删文件。

原文要点

该免费模板由MADIAD发布:接收Facebook Messenger webhook(含验证challenge),忽略主页自己发出的消息;把每条消息按发送者ID存入名为conversations的n8n Data Table,轮询直到该用户最新消息满10秒未更新,再把积攒的消息合并成一条提示词;交给由OpenRouter聊天模型驱动的AI Agent,以Supabase向量库检索为工具、Postgres做对话记忆,经Facebook Graph API回复。知识库侧:Google Drive指定文件夹新增PDF时提取文本、切块、用OpenAI嵌入写入Supabase documents表;PDF更新时先按文件名删旧向量再重建;文件进Trash文件夹时删向量并删Drive文件。

这次做成什么

搭好"Messenger消息合并→RAG回答→回复用户"与"Drive PDF增改删→向量库同步"两条链路,并用一条合成PDF和连续三条测试消息验证10秒合并窗口确实生效。

准备什么

  • 一个Facebook主页和Meta开发者应用,已配置Messenger webhook并具备发消息权限
  • Supabase项目(启用pgvector)及API凭据
  • OpenAI API key(嵌入)与OpenRouter API key(聊天模型)
  • 一个Postgres数据库实例用于聊天记忆
  • Google Drive账号(OAuth)及三个用途的文件夹ID:新文件、更新、Trash

具体怎么做

  1. 建Supabase向量表与记忆库

    在Supabase启用pgvector,建documents表(建议字段:id、content、metadata含file_name、embedding向量列),并在n8n配Supabase凭据。再准备一个Postgres库供Chat Memory节点使用。表结构细节需对照模板中Vector Store节点的实际配置核对,模板未给出DDL。

  2. 建n8n Data Table

    在n8n的Data Table功能里新建名为conversations的表,建议列:sender_id、message_text、received_at(具体列名以模板节点读取的字段为准,需在模板中核对)。这是10秒批处理的暂存区,名字必须与模板一致。

  3. 配置Messenger webhook

    在Meta应用后台把回调URL指向模板webhook节点的URL,填写验证token;订阅messages事件。激活后先用Meta后台的测试功能发验证请求,确认模板能正确回传challenge(模板已处理验证逻辑)。再确认模板会忽略page自己发出的消息,避免机器人回复自己造成循环。

  4. 验证10秒消息合并

    用测试Messenger账号连续快速发三条消息(见example),间隔不超过3秒,然后停住。预期:conversations表先后出现3行;约10秒后(以最后一条为准)流程继续,三条被合并成一条提示词交给Agent;你只收到一条合并后的回复,而不是三条各自回复。

  5. 跑通PDF知识库同步

    在"新文件"文件夹上传一份合成PDF(下文artifact),确认Supabase documents表新增若干向量行且metadata含文件名;修改该PDF重新上传到"更新"文件夹,确认旧向量先删后重建、行内容更新;把文件移入Trash文件夹,确认向量被删且Drive文件被删除。删除是不可逆操作,请只用合成文件演练。

  6. 配置模型并端到端提问

    在Agent节点配OpenRouter凭据并选择你已开通的聊天模型,嵌入节点配OpenAI凭据。向主页发一条与PDF内容相关的问题,确认回复引用了PDF中的信息,且Postgres记忆里能看到该会话记录。

可直接复制的材料

合成知识库PDF内容(保存为menu-faq.txt后转PDF)

本站虚构内容,仅用于验证RAG检索;请按同样方式换成你的真实业务文档。

示例咖啡馆常见问题
营业时间:周一至周五 8:00-20:00,周末 9:00-21:00。
会员政策:消费满200元可办理会员卡,享9折。
外带规则:外带杯免费,自带杯减2元。
退换:饮品出品后30分钟内可凭小票重做。

Agent系统提示词(本站撰写版)

模板未公开Agent提示词,此为按其行为描述独立撰写,可粘贴进Agent节点系统消息。

你是示例咖啡馆的Facebook Messenger客服。规则:
1) 用户消息可能是10秒内多条合并而成,先整体理解再一次性回答所有问题。
2) 优先使用检索工具查知识库;知识库没有的信息直接说"这个我需要跟店里确认",不要编造。
3) 借助对话记忆保持上下文,用户说"那""还有"时结合上文理解。
4) 回复控制在120字以内,口语化,不用Markdown。
5) 不索取密码、支付信息等敏感内容。

消息合并测试脚本

本站设计的验证用例,对应模板"最新消息满10秒不再更新才合并处理"的逻辑。

T+0秒  发送:"你们周末几点开门"
T+2秒  发送:"会员怎么办"
T+4秒  发送:"自带杯有优惠吗"
然后停止发送,等待约10-12秒
预期:收到一条合并回复,同时覆盖三个问题

输入与输出示例

本站虚构示意,回复文案为示例,非模板实际输出;实际措辞取决于所选OpenRouter模型。

输入

按测试脚本连发三条:"你们周末几点开门""会员怎么办""自带杯有优惠吗"

对应输出

约10秒后收到一条合并回复,例如:"周末9点到21点营业~消费满200元就能办会员卡,全场9折;自带杯每杯减2元,欢迎带杯来!" conversations表中三条记录被合并处理后清空或标记已处理,Postgres记忆中新增该sender_id的一轮对话。若只发一条就停,10秒后同样会收到回复(单条也走合并流程)。

做完检查这些

  • Meta后台webhook验证挑战能被正确回传,订阅状态为已启用
  • 连发三条消息后只收到一条回复,且回复覆盖全部三个问题
  • 主页自己发出的消息不会触发新的执行(无自回复循环)
  • 上传新PDF后Supabase出现对应向量行,metadata含文件名
  • PDF更新后旧向量被删除,检索结果反映新内容;移入Trash后向量与文件均被删除

容易卡住的地方

  • Data Table名称必须为conversations且列名与模板一致,否则批处理读写失败
  • 10秒等待意味着回复有至少10秒延迟,不适合追求即时回包的场景
  • Trash触发器会真实删除Drive文件,演练只用合成文件,切勿指向业务文件夹
  • 忽略主页自身消息的逻辑若失效,机器人回复会再次触发webhook形成循环
  • OpenRouter模型、OpenAI嵌入、Supabase、Postgres任一凭据失效都会让Agent无响应,需逐个节点排查
  • webhook验证token必须与Meta后台填的一致,否则订阅无法激活

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Run a RAG Messenger chatbot with Facebook, Google Drive, Supabase, OpenAI and OpenRouter
原作者
MADIAD
原始发布日期
2026-10-02T16:53:43.768Z
来源
https://n8n.io/workflows/20349