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
具体怎么做
建Supabase向量表与记忆库
在Supabase启用pgvector,建documents表(建议字段:id、content、metadata含file_name、embedding向量列),并在n8n配Supabase凭据。再准备一个Postgres库供Chat Memory节点使用。表结构细节需对照模板中Vector Store节点的实际配置核对,模板未给出DDL。
建n8n Data Table
在n8n的Data Table功能里新建名为conversations的表,建议列:sender_id、message_text、received_at(具体列名以模板节点读取的字段为准,需在模板中核对)。这是10秒批处理的暂存区,名字必须与模板一致。
配置Messenger webhook
在Meta应用后台把回调URL指向模板webhook节点的URL,填写验证token;订阅messages事件。激活后先用Meta后台的测试功能发验证请求,确认模板能正确回传challenge(模板已处理验证逻辑)。再确认模板会忽略page自己发出的消息,避免机器人回复自己造成循环。
验证10秒消息合并
用测试Messenger账号连续快速发三条消息(见example),间隔不超过3秒,然后停住。预期:conversations表先后出现3行;约10秒后(以最后一条为准)流程继续,三条被合并成一条提示词交给Agent;你只收到一条合并后的回复,而不是三条各自回复。
跑通PDF知识库同步
在"新文件"文件夹上传一份合成PDF(下文artifact),确认Supabase documents表新增若干向量行且metadata含文件名;修改该PDF重新上传到"更新"文件夹,确认旧向量先删后重建、行内容更新;把文件移入Trash文件夹,确认向量被删且Drive文件被删除。删除是不可逆操作,请只用合成文件演练。
配置模型并端到端提问
在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