2026-09-16 · 原文发布日
分包商报价邮件自动比对、追报价与定标
免费n8n模板给工程采购用:监听Gmail里匹配条件的报价邮件,下载附件PDF抽文本(读不了就回信要求文字版PDF),让OpenAI把报价匹配到n8n Data Tables里开标的包件,抽取各清单项的范围覆盖,算出缺项并套用补贴金额得到“拉平总价”,版本化存表;范围不清会自动回信让分包商确认。每天早上还会更新逾期包件、催未报价的分包商、按拉平总价排序并让OpenAI起草定标建议,经估价师邮件批准后发中标意向和落选通知。
原文要点
这是n8n官网免费的工程采购工作流模板。它监听Gmail中匹配报价条件的邮件并下载附件,从PDF抽文本(读不出就回信要文字版PDF),用OpenAI把报价匹配到n8n Data Tables里开标的包件,逐清单项抽取范围覆盖,算缺项并按补贴金额(plug)算出拉平总价,版本化写入bid_quotes表;范围不清会自动回信让分包商澄清。每天早7点更新逾期包件为closing、催未报价者、对结标包件按拉平总价排序并让OpenAI起草定标建议,经估价师邮件批准后发中标意向和落选通知。设置要求scope_checklist用Item=allowance格式,还需先跑一次手动setup触发器建表。
这次做成什么
在本地n8n中导入该免费模板,用虚构的分包商报价邮件跑通“收报价→抽范围→算拉平总价→回信确认”这一段核心链路,并验证每日扫标的分支逻辑;定标建议环节先只到“起草待批准”为止。
准备什么
- 可自建的n8n实例(需含Data Tables功能,建议较新版本)
- 一个用于测试的Gmail账号及其OAuth2凭据(收发分离测试,勿用真实客户邮箱)
- OpenAI API Key(调用会产生费用,需自行控制额度)
- 从n8n官网模板页/workflows/19637导入模板,本站不提供可导入JSON
具体怎么做
导入模板并初始化数据表
在n8n画布中通过模板页导入该工作流,先手动执行作者内置的setup触发器一次,让它自动创建bid_packages和bid_quotes两张Data Tables;建好后打开表确认列结构(包件名、状态、scope_checklist、报价版本等)与本练习字段对应。
填入虚构开标包件
在bid_packages表插入一条测试包件:名称“机电安装分包”,status填open,scope_checklist严格按“桥架敷设=4000; 防火封堵=3500; 垃圾清运=2000”格式填写,等号后为缺项补贴金额(美元),截止日期填三天后。
配置两处设置节点与凭据
按作者说明更新两个settings步骤:公司名、估价师联系邮箱、复核收件箱、最低匹配置信度、默认plug金额、截止前催报天数;然后给Gmail节点绑定OAuth2、给两个OpenAI节点绑定API Key,注意读邮件与发邮件是同一组Gmail凭据。
发送测试报价邮件
用另一个邮箱向测试Gmail发送主题为“报价-机电安装分包”的邮件,附一份可提取文字的PDF(用下方artifact中的报价文本生成),触发器匹配到后观察执行流:PDF抽文本→OpenAI匹配包件并逐项判断范围→算拉平总价→写入bid_quotes→回信。
核对分支与手动验证每日扫标
若报价缺项,检查回信是否要求分包商确认缺项范围;再手动执行每日7点的定时分支,确认逾期包件状态改为closing、有报价的包件按拉平总价排序并生成待估价师批准的定标建议草稿,批准邮件不回就不发中标/落选通知。
可直接复制的材料
bid_packages测试行(范围清单配置)
本站独立编写的测试配置;金额为本站设定的练习参考值,替换为你的真实包件与补贴标准。
package_name: 机电安装分包
status: open
due_date: 2026-10-01
scope_checklist: 桥架敷设=4000; 防火封堵=3500; 垃圾清运=2000
invited_subs: sub-a@example.test, sub-b@example.test报价抽取与范围核对提示词(可粘贴给OpenAI节点参考改写)
本站独立撰写,用于替代或对照模板内agent提示词;实际模板内提示词需在导入后核对。
你是工程采购估价助手。已知开标包件的范围清单如下,格式为“清单项=缺项补贴金额”:
桥架敷设=4000; 防火封堵=3500; 垃圾清运=2000
请阅读下面分包商报价邮件正文与附件文本,输出严格JSON,不要多余文字:
{"package_matched":true或false,"confidence":0到1,"quoted_total":数字,"items":[{"item":"清单项","covered":true或false,"note":"依据原文短句"}],"exclusions":["报价中声明排除的内容"]}
判定规则:报价明确包含或列出该项则covered为true;声明排除或只字未提则为false。报价邮件全文:
{{邮件与附件文本}}测试报价PDF正文(生成文字版PDF用)
本站虚构测试数据,请另存为文字版PDF作附件;勿含真实公司信息。
致 示例建设公司 估价部:
我方就机电安装分包报价如下:
总报价:182,000 美元
报价范围:桥架敷设、电缆穿线及设备安装调试均包含在内。
除外条款:本报价不含防火封堵;现场建筑垃圾清运由总包负责。
报价有效期:30天。
分包商:示例机电工程有限公司输入与输出示例
本站虚构演示,非模板实际运行结果;补贴金额为本站练习设定。
输入
测试包件“机电安装分包”(清单:桥架敷设=4000; 防火封堵=3500; 垃圾清运=2000)收到报价邮件:总价182,000美元,明确排除防火封堵,垃圾清运只字未提。对应输出
抽取结果JSON:quoted_total=182000,items中桥架敷设covered=true、防火封堵covered=false(注明“除外条款声明不含”)、垃圾清运covered=false(注明“未提及”);缺项补贴3500+2000=5500,拉平总价leveled_total=187500;系统自动回信请分包商确认垃圾清运是否包含,随后该报价以revision形式写入bid_quotes表。做完检查这些
- bid_quotes表中新行的leveled_total等于报价总价加上所有covered=false项的补贴之和(182000+5500=187500)
- 缺项或范围存疑时,Gmail里能找到系统发出的澄清回信,而不是直接确认完成
- 手动跑每日分支后,逾期包件status变为closing,未报价的被邀请分包商收到催报邮件
- 定标建议草稿发出后,在估价师回复批准前不会产生中标意向或落选通知
容易卡住的地方
- scope_checklist必须严格用“项=金额; 项=金额”格式,缺等号或全角符号会导致解析失败
- 扫描版图片PDF抽不出文本,只会触发回信索要文字版,不会进入比对
- 最低匹配置信度设太高会把正常报价判为不匹配包件而被跳过
- OpenAI调用与Gmail发送均真实生效,测试务必用隔离邮箱,避免给真实分包商发信
- 模板免费但OpenAI API按用量另收费,每日扫标会放大调用次数
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Level subcontractor bids and manage awards with Gmail, OpenAI, and Data Tables
- 原作者
- Jeffy Thomas
- 原始发布日期
- 2026-09-15T19:32:10.024Z
- 来源
- https://n8n.io/workflows/19637