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

2026-09-04 · 原文发布日

WhatsApp活动预订客服机器人

面向小型活动商户的n8n流程:通过自建的WAHA服务接收WhatsApp消息,OpenAI代理挂Postgres对话记忆,可调用工具读取Google Sheets里的活动日历、查Instagram帖子、分析图片,并把确认的预订追加写回表格,最后按结构化输出决定回复纯文本还是带说明的图片。系统提示词存在n8n数据表里,可随时改。

原文要点

原模板事实边界是:WAHA服务器把每条WhatsApp消息POST到n8n webhook;流程从n8n数据表加载系统提示词,并校验消息是否发到商户WhatsApp chat ID;客户消息或团队外发消息进入共享上下文;OpenAI代理使用Postgres聊天记忆,工具可读Google Sheets活动日历、查Instagram帖子、经子流程分析图片、把确认预订追加到Google Sheets;结构化输出决定是否回复、回复文本和可选图片URL,最后经WAHA API发文本或带说明图片。Setup要求whatsapp_chat_history表、Event Cal表A:K、Bookings表,以及WAHA URL/API key/session/business chat ID;未提供子流程细节和可导入文件。

这次做成什么

做一个不出真号的“活动咨询到预订落表”练习:用curl模拟WAHA进站,Google Sheets用两张测试表,Instagram与图片分析先关闭或替换为返回固定说明的子流程占位,最终只验证结构化回复路由和Bookings追加。本站不编可导入n8n JSON;WAHA按钮、子工作流ID和表格范围以你的实例核对。

准备什么

  • 一个测试n8n实例,可使用Webhook、OpenAI或mock模型、Postgres、Google Sheets测试凭据
  • 自建或本地WAHA测试服务;没有WAHA时用curl直接POST合成进站JSON,不向真实WhatsApp发消息
  • Google Sheets测试表,含Event Cal工作表A到K列和Bookings工作表;勿用真实客户名单
  • n8n数据表一条Prompt记录;图片分析与Instagram子流程可先删除工具,避免卡在未提供ID

具体怎么做

  1. 模拟WAHA进站并校验归属

    配置入口接收字段:event、session、payload.from、payload.to、payload.body、payload.hasMedia、payload.media.url。第一步只处理event=message,且payload.to等于business_chat_id的练习值,例如8613800000000@c.us;payload.from等于business_chat_id的视为团队外发,只写入上下文不作为客户新需求。测试可用curl POST到webhook,不连接真实手机。

  2. 从数据表取提示词并接记忆

    n8n数据表建字段Prompt,放入本站系统提示词;流程每次读取最新Prompt,便于改人格和规则。Postgres聊天记忆表按导读用whatsapp_chat_history,键用conversation_id=payload.from;练习库只存合成号码。若OpenAI不可用,用mock返回固定JSON,仍保留同一解析路径。

  3. 挂三类工具但先降级

    工具一只读Google Sheets的Event Cal A:K,列固定为date,start,end,title,city,venue,capacity,booked,price_cny,status,notes。工具二查Bookings追加:name,phone,event_date,title,qty,note,created_at,source。Instagram和图片分析子流程因原文未给实现,练习版删除或让子流程返回{"summary":"未启用"},并在提示词中禁止编造帖子内容。

  4. 结构化解析决定回复形态

    代理输出固定JSON:should_reply、reply_text、booking_confirmed、booking_fields、image_url、caption。解析失败或should_reply=false时不发WAHA,只写日志。booking_confirmed=true才追加Bookings,再发文本确认;image_url非空才走WAHA图片+说明,否则只发文本。所有外发先指向WAHA测试会话或dry_run=true。

可直接复制的材料

活动预订助手系统提示词(放n8n数据表Prompt)

可直接粘贴到Prompt字段;价格单位用人民币元,表内有price_cny,不虚构折扣。

你是小型活动商户的WhatsApp客服。只能用Event Cal表A:K回答活动日期、城市、场地、容量、已订、价格;不知道就说不确定并请对方留联系方式。不得查真实Instagram或分析真实图片,除非输入明确给出工具结果;没有工具结果时回答“该功能未启用”。确认预订前必须收齐:姓名或称呼、联系电话占位、活动日期、活动名、人数。输出严格JSON:{"should_reply":true或false,"reply_text":"中文回复","booking_confirmed":false,"booking_fields":{"name":"","phone":"","event_date":"YYYY-MM-DD","title":"","qty":1,"note":""},"image_url":"","caption":""}。booking_confirmed只在用户明确说“确认预订”且字段齐全时设为true。不要用真实个人身份信息;电话用练习占位。

Event Cal测试表A:K(CSV)

导入Google Sheets练习表;范围用Event Cal!A:K,不要覆盖真实营业表。

date,start,end,title,city,venue,capacity,booked,price_cny,status,notes
2026-09-12,14:00,17:00,亲子烘焙体验,上海,静安示例空间,20,7,199,open,含材料
2026-09-13,19:00,21:00,小型爵士夜,上海,徐汇示例livehouse,80,76,260,almost_full,站席
2026-09-20,10:00,12:00,摄影外拍入门,杭州,西湖示例集合点,15,15,99,closed,已满员

WAHA进站合成JSON与Bookings追加行

号码和姓名全虚构;真正WAHA字段名以你的WAHA版本返回为准。

{"event":"message","session":"practice","payload":{"from":"8613900001111@c.us","to":"8613800000000@c.us","body":"你好,9月12日亲子烘焙还有位吗?两大一小想确认预订,联系人林练习,电话占位13900001111。","hasMedia":false,"media":{"url":""}}}
追加到Bookings:林练习,13900001111,2026-09-12,亲子烘焙体验,3,两大一小,2026-09-04T11:00:00+08:00,whatsapp_practice

流程配置占位

本站示例配置;不要把localhost当生产WAHA,密钥只进n8n凭据,不写进节点参数截图。

WAHA_BASE=http://localhost:3000;WAHA_API_KEY=仅放n8n凭据;WAHA_SESSION=practice;BUSINESS_CHAT_ID=8613800000000@c.us;GOOGLE_SHEET_ID=替换为测试表ID;EVENT_RANGE=Event Cal!A:K;BOOKINGS_SHEET=Bookings;MEMORY_TABLE=whatsapp_chat_history;PROMPT_TABLE=assistant_prompt_practice;ENABLE_INSTAGRAM=false;ENABLE_IMAGE=false;DRY_RUN=true

输入与输出示例

本站虚构演示,未向WhatsApp/WAHA/OpenAI/Google发送;剩余13由capacity20-booked7算出,仅用于字段对应。

输入

客户合成消息:8613900001111@c.us 发给商户8613800000000@c.us,内容“9月12日亲子烘焙还有位吗?两大一小想确认预订,联系人林练习,电话占位13900001111。”

对应输出

代理示意JSON:{"should_reply":true,"reply_text":"有的,2026-09-12 14:00亲子烘焙体验剩余13位,单价199元;已为林练习登记3人占位,如需改期回复改期。","booking_confirmed":true,"booking_fields":{"name":"林练习","phone":"13900001111","event_date":"2026-09-12","title":"亲子烘焙体验","qty":3,"note":"两大一小"},"image_url":"","caption":""};Bookings追加对应一行,Event Cal的booked仍由原表读取,不在AI内直接改。

做完检查这些

  • payload.to不等于BUSINESS_CHAT_ID或event不是message时,不加载Prompt、不调用模型、不外发
  • Event Cal只读A:K; status=closed或booked大于等于capacity时,不得把booking_confirmed设为true
  • 确认预订缺姓名、活动日期、活动名或人数之一,必须回复追问且Bookings不新增行
  • image_url为空时只能走文本回复;caption不能替代reply_text造成重复发送
  • 解析到should_reply=false时只写日志,WAHA请求数和Google追加数都必须为0

容易卡住的地方

  • WAHA不同版本payload字段可能不同,先用一条合成消息打印全payload再映射,别按本站键名硬上生产
  • Postgres记忆表名若与现有库冲突,会在多商户场景串话;练习库也建议加practice前缀
  • Instagram和图片分析子流程原文只要求填ID或移除,未给输入输出契约,不能假装已具备能力
  • Google Sheets并发追加可能重复,确认前用conversation_id加活动日期做去重或人工复核

原文与作者资料 ↗

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

原文标题
Handle WhatsApp event bookings with OpenAI and Google Sheets
原作者
isaWOW
原始发布日期
2026-09-04T04:15:34.124Z
来源
https://n8n.io/workflows/19178