2026-09-28 · 原文发布日
n8n模板:从询价邮件到报价PDF全自动流转
这个n8n工作流监听匹配的Gmail询价邮件,用OpenAI提取客户与项目信息(含PDF附件文本),在Google Sheets生成带编号的报价草稿行;草稿被标记为FREIGEGEBEN(已批准)后自动校验字段、计算金额日期、生成德语报价正文,创建Google Docs并导出PDF存到Drive、回写链接,再经Gmail发给客户并更新状态。若邮件含工程量清单,还会生成供应商询价草稿,批准后发给批发商;批发商回复的报价被结构化提取并存表,同一询价凑够两家以上时用OpenAI对比并给出最优推荐。
原文要点
该n8n工作流每分钟监听匹配的Gmail询价邮件,用OpenAI(gpt-5-mini)提取客户与项目信息并读取PDF附件文本,在Google Sheets生成带报价编号的草稿行。草稿被标记为FREIGEGEBEN后触发校验、计算金额日期、用OpenAI生成德语报价正文,创建Google Docs并导出PDF存Drive、回写链接,经Gmail发送给客户并把状态改为VERSENDET。若邮件含工程量清单(Leistungsverzeichnis),会在Haendleranfragen标签页生成供应商询价草稿,批准后发给批发商;批发商回复被结构化提取存入Haendlerangebote,同一询价凑够两份以上时用OpenAI对比并在Haendlervergleiche写入最优推荐。需要Gmail、Sheets(含触发器)、Drive的OAuth2凭据和OpenAI凭据。
这次做成什么
在不动用真实客户邮箱的前提下,用一封合成询价邮件走通核心链路:OpenAI提取→Google Sheets草稿行→手动改状态为FREIGEGEBEN→生成报价文档并回写。供应商对比部分用合成数据在表格中演练。此为本站设计的练习路径,原模板具体的节点参数、触发器搜索式与文档模板需在原模板中核对。
准备什么
- n8n实例及Gmail、Google Sheets、Google Drive的OAuth2凭据
- OpenAI API Key,并确认账号可用gpt-5-mini模型
- 一个Google Sheets文件,含报价表及Haendleranfragen、Haendlerangebote、Haendlervergleiche四个标签页
- 一个测试用Gmail账号和Drive目标文件夹,绝不用真实客户数据
具体怎么做
建表与列结构
在报价标签页建列:Angebotsnummer、Kunde、Email、Projekt、Positionen、Nettobetrag、MwSt、Gesamtbetrag、Status、PdfLink。另三个标签页按下方配置建列。状态枚举固定为ENTWURF、FREIGEGEBEN、VERSENDET,后续触发靠精确匹配。
配置Gmail触发与提取
添加Gmail Trigger,轮询间隔1分钟,Search填如 subject:Anfrage 的过滤式,下载附件打开。接OpenAI节点,用下方提取提示词,要求返回客户名、邮箱、项目、明细行与是否含Leistungsverzeichnis的JSON。
写入报价草稿行
接Google Sheets节点(Append),把OpenAI输出映射到各列:Angebotsnummer用表达式生成如 AN-{{$now.format('yyyy')}}-{{$json.rowIndex+1001}};Nettobetrag由明细行数量乘单价求和;Status固定写ENTWURF。
批准分支
添加Google Sheets Trigger(行更新,每分钟),接IF节点判断Status等于FREIGEGEBEN。通过后接Code节点校验必填字段(Kunde、Email、Gesamtbetrag非空),计算19%增值税与总额、报价有效期(今天+30天)。
生成报价文档与PDF
接OpenAI节点用德语报价正文提示词生成文本;接Google Docs节点在目标文件夹新建文档写入正文,再用Drive节点Export为PDF存同一文件夹,把分享链接写回报价行PdfLink列,Status改VERSENDET。
供应商对比演练
在Haendlerangebote手工粘贴两条合成批发商报价(见下方数据),接一个OpenAI节点用对比提示词,把输出写入Haendlervergleiche:推荐供应商、理由、节省金额。原模板此步由批发商回复邮件触发,本练习用手动执行代替。
可直接复制的材料
询价邮件信息提取提示词
本站独立编写,字段名沿用原模板德语风格;附件文本需先在n8n中用PDF提取节点读成文本再拼入。
你是报价助理。从下面的询价邮件(可能附PDF文本)中提取信息,只输出JSON:{"kunde":"公司或姓名","email":"","projekt":"项目简述","positionen":[{"beschreibung":"","menge":数字,"einheit":"","einzelpreis":数字}],"hatLeistungsverzeichnis":true或false}。价格未提及时einzelpreis填0。邮件内容:
{{ $json.emailText }}供应商报价对比提示词
本站独立编写,对比维度为本站设定,原模板的具体比较口径请核对。
你是采购分析师。以下是同一询价的多家批发商报价JSON数组。比较维度:总价、交货天数、付款条件、质保。只输出JSON:{"empfehlung":"供应商名","begruendung":"","ersparnis":相对最贵报价节省的金额,"tabelle":[{"anbieter":"","gesamtpreis":数字,"lieferzeit":数字,"zahlungsbedingung":""}]}。输入:
{{ $json.angebote }}Sheets标签页与列配置
列名为本站设计的练习结构,与原模板列名可能不同,接入原模板时以模板实际列为准。
报价表:Angebotsnummer|Kunde|Email|Projekt|Positionen(JSON)|Nettobetrag|MwSt|Gesamtbetrag|Status|PdfLink
Haendleranfragen:AnfrageNr|Angebotsnummer|Haendler|Email|Artikel|Menge|Status(ENTWURF/FREIGEGEBEN/VERSENDET)
Haendlerangebote:AngebotNr|AnfrageNr|Anbieter|Gesamtpreis|LieferzeitTage|Zahlungsbedingung
Haendlervergleiche:VergleichNr|AnfrageNr|Empfehlung|Begruendung|Ersparnis合成测试邮件与批发商报价
全部为合成数据,邮箱为保留示例域名,请勿向真实地址发送。
测试邮件:Betreff: Anfrage Gartenzaun\nSehr geehrte Damen und Herren, wir benoetigen fuer ein Bauprojekt in Leipzig 120 lfm Stabmattenzaun inkl. Montage. Bitte um Angebot. Muster GmbH, anfrage@muster-example.de
批发商报价A:{"anbieter":"ZaunHandel Nord","gesamtpreis":8400,"lieferzeit":14,"zahlungsbedingung":"14 Tage netto"}
批发商报价B:{"anbieter":"Metall Gross Sued","gesamtpreis":7950,"lieferzeit":21,"zahlungsbedingung":"2% Skonto 10 Tage"}输入与输出示例
本站虚构演示,未实际运行工作流,金额按120×68与19%增值税推算。
输入
上方测试邮件经Gmail Trigger进入,OpenAI提取返回kunde="Muster GmbH", positionen=[{"beschreibung":"Stabmattenzaun inkl. Montage","menge":120,"einheit":"lfm","einzelpreis":68}], hatLeistungsverzeichnis=true对应输出
报价行:Angebotsnummer=AN-2026-1001, Nettobetrag=8160.00, MwSt=1550.40, Gesamtbetrag=9710.40, Status=ENTWURF;改为FREIGEGEBEN后生成Docs/PDF并回写PdfLink,Status=VERSENDET;供应商对比输出{"empfehlung":"Metall Gross Sued","ersparnis":450,"begruendung":"总价最低且支持Skonto,交货期多7天可接受"}做完检查这些
- Gmail Trigger只命中匹配搜索式的测试邮件,其他邮件不产生新行
- OpenAI提取输出能通过JSON解析且positionen为数组,einzelpreis为数字
- Status不是FREIGEGEBEN时工作流不生成任何文档,改为FREIGEGEBEN后10分钟内出现Docs文件
- PdfLink回写后状态变为VERSENDET,且同一行不会被重复发送
- Haendlerangebote中同一AnfrageNr满两条记录后,Haendlervergleiche才写入推荐行
容易卡住的地方
- 原模板模型名写的是gpt-5-mini,需确认你的OpenAI账号实际可用,否则OpenAI节点报错
- FREIGEGEBEN等状态词必须逐字符一致,多余空格或大小写差异会导致IF分支不命中
- PDF附件需先用n8n的PDF读取节点转成文本再拼进提示词,直接传二进制给OpenAI会失败
- Google Sheets Trigger按分钟轮询,状态变更不是即时生效,测试时不要立刻判定失败
- 原模板面向德语流程,金额、日期与报价正文均为德语口径,中文业务需自行改写提示词与字段
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Create and send quote PDFs with OpenAI, Gmail and Google Sheets
- 原作者
- FLOW AI Automation
- 原始发布日期
- 2026-09-28T07:40:38.302Z
- 来源
- https://n8n.io/workflows/20028