2026-09-09 · 原文发布日
餐饮外烩报价全流程:询价、更新、完工三个webhook串起来
外烩询价、变更和完工各走一个webhook:询价进来校验字段后由OpenAI按预设套餐拟报价邮件,事件存入Postgres并用Gmail发给客户、Telegram通知老板;变更和完工webhook同样先校验并查库,完工时由OpenAI拟最终账单和求评邮件。每天早上8点还有一轮巡检,自动发活动前7天/3天提醒和定金催收,并记录最后催收时间避免重复骚扰,所有往来记入comms_log表。
原文要点
原工作流用三个webhook分别接收外烩询价、事件更新和完工:询价校验字段后由OpenAI按预设套餐拟报价邮件,事件写入Postgres并用Gmail发客户、Telegram通知老板;更新与完工webhook同样先校验并查库,完工时由OpenAI拟最终账单与求评邮件。每天08:00有一轮巡检(也可由sweep-probe webhook手动触发),发送活动前7天/3天提醒和定金催收,并记录最后催收日期避免重复。数据存catering_events与comms_log两表,原文模型名为gpt-5.6-terra。
这次做成什么
在n8n里搭一套外烩(餐饮到会)订单自动化:询价自动报价、变更自动确认、完工自动出账单,外加每日提醒巡检。
准备什么
- n8n实例及Postgres数据库(可建表与读写)
- Gmail OAuth2凭据与对外的运营邮箱地址
- Telegram机器人凭据及老板/运营的通知chat ID
- OpenAI API凭据(原文模型名为gpt-5.6-terra,可用你账号可用模型替代)
- 能向webhook POST数据的询价表单、CRM或手工测试工具
具体怎么做
建两张Postgres表
在Postgres执行下方建表SQL,建catering_events(事件主表,含状态、人数、定金、last_nudged等字段)和comms_log(往来记录表),然后在n8n添加Postgres凭据并确认模板里的查询与表结构一致。
配置四个webhook入口
启用/catering/intake、/catering/update、/catering/done三个业务webhook和可选的/catering/sweep-probe巡检触发器;在n8n激活工作流后复制生产URL,配置到你的询价表单或CRM,先用curl按下方示例POST一条测试询价。
替换通知与邮件凭据
给Gmail节点绑定OAuth2并把模板里的ops@yourcatering.com换成你的运营邮箱;给Telegram节点绑定凭据并把硬编码chatId换成你的真实chat ID(可先用机器人私信自己拿到ID)。
配置AI拟稿与套餐
给OpenAI节点绑定凭据,把套餐内容(菜品、人均价、服务费规则)写进报价提示词,可参考下方材料;完工节点同样配置账单与求评提示词。先手动跑通全流程再打开每日08:00巡检的Schedule Trigger。
可直接复制的材料
建表SQL(本站按原文描述编写)
本站按原文描述独立编写的示例表结构,字段名需与模板实际查询逐一对齐后再用。
CREATE TABLE catering_events (\n id SERIAL PRIMARY KEY,\n client_name TEXT NOT NULL,\n client_email TEXT NOT NULL,\n event_date DATE NOT NULL,\n headcount INT NOT NULL,\n package TEXT,\n status TEXT DEFAULT 'quoted',\n deposit_received BOOLEAN DEFAULT FALSE,\n final_headcount INT,\n total_amount NUMERIC(10,2),\n last_nudged DATE,\n created_at TIMESTAMP DEFAULT NOW()\n);\n\nCREATE TABLE comms_log (\n id SERIAL PRIMARY KEY,\n event_id INT REFERENCES catering_events(id),\n channel TEXT NOT NULL,\n message_type TEXT NOT NULL,\n summary TEXT,\n sent_at TIMESTAMP DEFAULT NOW()\n);OpenAI报价邮件提示词(中文改写版)
本站独立撰写的提示词,套餐价格为本站虚构示例,请替换成你的真实价目;字段引用名以工作流为准。
你是外烩公司的报价专员。根据下面的询价信息和套餐价目,起草一封中文报价邮件。\n\n询价信息:{{ $json }}\n\n套餐价目:\n- 经典自助:每人 ¥168,30人起订,含8菜1汤\n- 商务精品:每人 ¥268,20人起订,含10菜2汤与茶歇\n- 定制宴席:每人 ¥398 起,需电话确认菜单\n服务费:总餐费的10%;市区外交通费另计。\n\n要求:\n1. 语气专业友好,称呼客户姓名;\n2. 推荐最匹配人数和场合的一个套餐,给出总价估算(餐费+服务费);\n3. 写明需付30%定金锁定档期;\n4. 不超过300字,不虚构套餐之外的优惠。输入与输出示例
本站虚构演示,金额按本站示例套餐价计算,非作者运行结果。
输入
POST /catering/intake body: {"client_name":"林珊","client_email":"linshan@example.com","event_date":"2026-10-18","headcount":45,"occasion":"公司周年庆","address":"南山区科技园"}对应输出
catering_events新增一行:id=12, client_name=林珊, event_date=2026-10-18, headcount=45, status=quoted, deposit_received=false;Gmail发出报价邮件(商务精品套餐45人估算:餐费¥12,060+服务费¥1,206≈¥13,266,需付30%定金);Telegram向老板推送“新询价:林珊,10月18日,45人”;comms_log写入channel=gmail, message_type=quote一条记录。做完检查这些
- 用curl向intake发一条缺client_email的请求,运营邮箱和Telegram收到无效载荷告警
- 完整询价提交后,catering_events出现新记录且客户收到报价邮件
- 向update发送deposit received后,该事件deposit_received变为true且客户收到确认
- 完工webhook提交最终人数后,客户收到账单邮件和求评邮件共两封
- 手动触发sweep-probe,距活动7天的订单收到提醒且重复触发不重复催收
容易卡住的地方
- webhook字段名与模板校验不一致会被判为无效载荷,需先核对期望字段
- Telegram的chatId是硬编码的,忘记替换会导致通知发不出去或发错人
- 每日巡检依赖event_date与status字段准确,脏数据会造成误发提醒
- last_nudged防重复逻辑依赖巡检每天正常跑,长时间停用后恢复可能集中补发
- OpenAI、Gmail、Telegram均涉及外部账号配额与授权失效问题
- 原文使用的模型名为gpt-5.6-terra,你的账号若无此模型需改选可用模型
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Manage catering event quotes and countdowns with Postgres, Gmail, OpenAI and Telegram
- 原作者
- Khairul Muhtadin
- 原始发布日期
- 2026-09-09T02:35:41.386Z
- 来源
- https://n8n.io/workflows/19414