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

2026-10-05 · 原文发布日

WhatsApp聚餐AA分账机器人

朋友聚餐AA制的WhatsApp机器人:群里发小票照片,Gemini做OCR提取菜品、税费和总额,大家按“名字:菜品”格式认领后自动按比例分摊税费算出每人应付,OpenRouter生成幽默账单私信给每个人;回复“paid”即核销账单,每晚七点对未付的人发语气和缓到强硬的催款提醒(有同日防刷屏限制),账目全部记在Sheets里。

原文要点

该n8n模板用WAHA(WhatsApp HTTP API)收发消息、Google Gemini做小票OCR、OpenRouter生成幽默账单与催款文案、Google Sheets存Session/Contacts/Bills三张表。流程:WAHA webhook收群消息并先按白名单JID过滤;带图消息下载后经Gemini提取菜品、税费、总额存入Session页并提示群友按「名字:菜品1,菜品2」认领;认领消息匹配最新Session,按关键词对账并按比例分摊税费算出每人金额,OpenRouter生成私信账单经WAHA发给各人并写入Bills页(未付状态);回复paid/done即按号码(失败按名字)找最新未付账单核销;每天19:00扫未付账单,按温和/强硬/暴躁三档语气生成提醒,带同日防刷屏标记lastReminderSent。默认货币IDR/Rp可改。

这次做成什么

搭好「小票拍照→认领→分账私信→paid核销→每晚催款」的完整闭环,并用本站设计的一张三人虚构小票走通OCR→认领→按比例摊税的算账逻辑,验证每人应付金额加总等于含税总额。

准备什么

  • 一台已运行的WAHA实例及其API凭据(能收发WhatsApp消息)
  • Google Gemini(Google PaLM)API凭据
  • OpenRouter API凭据(会按其计费规则产生费用)
  • Google Sheets OAuth凭据及含Session、Contacts、Bills三页的表格
  • 参与测试的WhatsApp账号JID白名单
  • 可公网访问的n8n实例

具体怎么做

  1. 备表与凭据

    建Google Sheet三页:Session页存session_id、群聊JID、OCR的JSON结果、创建时间;Contacts页存名字与WhatsApp号码/JID对应;Bills页按下方材料建表头。n8n里依次添加WAHA API、Gemini、OpenRouter、Google Sheets四个凭据,并把每个Sheets节点的文档ID换成你的表。

  2. 接入消息与白名单

    在WAHA后台把消息事件转发到工作流的WAHA Trigger地址;Trigger后接IF节点,判断发送者JID是否在白名单数组里,不在则直接丢弃。白名单用「628xxx@c.us」这种完整JID格式,先只放你自己的测试号码。

  3. 小票OCR分支

    IF判断消息含媒体:用WAHA的下载接口取图,送Gemini节点(提示词见材料),要求返回严格JSON(items数组含name与price、tax、total)。解析后把整段JSON连同session_id写入Session页,并用WAHA向群里发提示:「请按格式认领:名字:菜品1,菜品2」。

  4. 认领分账分支

    消息匹配「^(.+?):(.+)$」正则(群友可能用中文冒号)时进入:读取最新一条Session的OCR结果和Contacts表,把认领文本按逗号拆成菜品关键词,与items做包含匹配(未匹配到的菜品名要在回复里列出让人重发)。每人小计为其菜品price之和,税费按「个人小计÷全部菜品小计×tax」比例分摊,四舍五入到整数后若与total有差,把差额并给金额最大的人。逐个调OpenRouter生成一句话幽默账单,WAHA私信发送,Bills页写入unpaid记录。

  5. 核销与催款

    消息含paid或done(忽略大小写)时,按发送者JID在Bills页找最新一条unpaid改为paid并回复确认;找不到再按名字兜底。Schedule Trigger设每天19:00:读Bills中unpaid行,若lastReminderSent等于今天则跳过;否则按逾期天数选语气壮(1天温和、3天强硬、7天以上暴躁),OpenRouter生成文案、WAHA发出、回写lastReminderSent为今天日期。

可直接复制的材料

Gemini小票OCR提示词

本站独立编写;若改用人民币,把整数规则改为「以分为单位」。

你是收银小票OCR助手。识别这张小票照片,只返回一个JSON对象,不要任何其他文字:{"items":[{"name":"菜品名","price":整数}],"tax":整数,"total":整数}
规则:price、tax、total均为最小货币单位的整数(印尼盾无小数,直接填整数);折扣并入对应菜品价格;若小票有服务费也并入tax;看不清的字段填null;total必须等于所有price之和加tax,不等则以票面印刷的实付总额为准。

催款文案提示词(三档语气)

本站独立编写;{level}等占位由工作流注入,currency默认Rp可按需改。

你在帮一群朋友的AA分账机器人写催款私信。输入:{name}欠{amount} {currency},账单来自{date}的聚餐,已逾期{days}天,语气档位为{level}。
level=gentle:像朋友随口提醒,轻松幽默,不带压力;
level=firm:明确请对方今天付款,语气直接但礼貌;
level=savage:夸张吐槽风格,可开玩笑但不侮辱、不涉及外貌家人。
输出一条不超过60字的中文私信正文,必须包含金额,只输出正文。

Bills页表头与测试行CSV

本站合成数据;三行amount合计150000与示例小票含税总额一致,whatsapp为虚构JID需替换。

bill_id,session_id,name,whatsapp,items,subtotal,tax_share,amount,status,created_at,lastReminderSent
BILL-001,SES-20261005-01,Andi,6281110001@c.us,"Nasi Goreng;Es Teh",45000,5000,50000,unpaid,2026-10-05,
BILL-002,SES-20261005-01,Sinta,6281110002@c.us,"Mie Ayam;Es Jeruk",38000,4222,42222,unpaid,2026-10-05,
BILL-003,SES-20261005-01,Bima,6281110003@c.us,"Ayam Geprek;Kopi",52000,5778,57778,unpaid,2026-10-05,

输入与输出示例

本站虚构演示,非实际运行结果;分摊尾差处理策略为本站设计,可改为抹零或随机承担。

输入

群里发一张虚构小票:Nasi Goreng 40000、Mie Ayam 33000、Ayam Geprek 47000、Es Teh 5000、Es Jeruk 5000、Kopi 5000,tax 15000,total 150000;随后三条认领消息「Andi:Nasi Goreng,Es Teh」「Sinta:Mie Ayam,Es Jeruk」「Bima:Ayam Geprek,Kopi」,再发「paid」。

对应输出

OCR提取6个菜品小计135000、税15000、总额150000。分摊:Andi小计45000摊税5000应付50000;Sinta小计38000摊税4222应付42222;Bima小计52000摊税5778应付57778;三人合计150000与票面一致。Bills页写入三行unpaid并各收到一条幽默账单私信;Andi回复paid后其BILL-001状态改为paid,当晚19:00扫描只给Sinta和Bima生成gentle档提醒并回写lastReminderSent。

做完检查这些

  • 三人应付金额之和精确等于小票total,分毫不差
  • 故意发一条不含在白名单号码的测试消息,工作流无任何后续动作
  • 认领消息里写小票上没有的菜名时,回复会指出未匹配项且不写Bills
  • 同一账单同一天触发两次催款逻辑,第二次被lastReminderSent拦下
  • 回复paid后Bills页仅最新一条该号码的unpaid变为paid,历史已付行不受影响

容易卡住的地方

  • WAHA是非官方WhatsApp接口,账号有被封风险,务必用测试号,不要拿主力号跑机器人
  • JID格式必须是「号码@c.us」,只填纯数字会导致白名单和私信都匹配失败
  • 菜品关键词匹配对缩写敏感(如小票写NASI GORENG SPESIAL而群友认领Nasi Goreng),需在匹配节点做大小写归一,漏匹配时不要静默丢弃
  • OpenRouter按调用计费,每餐至少两次生成(账单加提醒),高频群会有可观费用
  • 每晚19:00的Schedule Trigger用的是n8n实例时区,印尼跨三个时区,部署前要确认

原文与作者资料 ↗

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

原文标题
Split and track WhatsApp restaurant bills with WAHA, Gemini and Sheets
原作者
Fahmi Fahreza
原始发布日期
2026-10-05T11:07:49.891Z
来源
https://n8n.io/workflows/20449