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

2026-09-19 · 原文发布日

表单填需求,自动产出品牌PDF提案并存为Gmail草稿

通过n8n表单收集客户公司情况、拟提供服务、报价、工期和品牌色,Gemini按预定义schema生成结构化提案内容,校验章节和条目数后合并进固定版式HTML,调用APITemplate.io转成A4 PDF,再以客户邮箱为收件人创建带附件的Gmail草稿;PDF生成失败则给己方发错误邮件。提示词禁止编造数字,且只建草稿不直接发送,方便人工把关。

原文要点

这是Michael Cedeño发布的免费n8n模板:n8n表单收集客户公司情况、现状、拟提供服务、报价、工期和可选品牌色;Gemini按预定义schema产出结构化提案JSON,校验章节与条目数并对缺失品牌色用回退色,合并进固定版式HTML;再调APITemplate.io(凭据用X-API-KEY请求头)把HTML转A4 PDF;最后以客户邮箱为收件人创建带PDF附件的Gmail草稿,PDF生成失败则给己方机构邮箱发错误邮件。作者说明提示词禁止编造数字,且全程只建草稿不自动发送。

这次做成什么

照着原文搭建思路,在n8n手工复现一条“表单→Gemini结构化提案→HTML→APITemplate.io转PDF→Gmail草稿”的练习流程,并理解两个安全设计:所有数字只能来自表单输入、提案只落到草稿箱由人工发出。模板本身免费,但Gemini与APITemplate.io用量可能计费(作者称后者免费档够试用,实际以服务商页面为准)。

准备什么

  • 可新建工作流并启用表单触发器的n8n实例
  • Google Gemini API密钥(或换成OpenAI/Anthropic等任一聊天模型)
  • APITemplate.io账号及API密钥
  • 拥有创建草稿权限的Gmail账号及OAuth凭据
  • 一个用于接收错误通知的己方机构邮箱地址

具体怎么做

  1. 创建n8n表单收集提案要素

    新建工作流,放Form Trigger节点,字段设为:客户公司名称、联系人邮箱、客户现状描述、拟提供服务清单、报价(金额与币种)、工期(周数)、可选品牌主色。发布后拿到表单URL,供内部同事提交提案请求。

  2. 让Gemini按schema生成提案JSON

    添加AI Agent或Basic LLM Chain节点,模型选Gemini,系统消息粘贴下文artifact中的提示词全文,用户消息把表单各字段原样插入;挂Structured Output Parser,schema包含proposal_title、summary、sections数组(每节含heading与bullets数组)、pricing_table、timeline_note。原文说明可换成其他聊天模型,输出解析器不变,流程其余部分不受影响。

  3. 校验内容并合并进HTML模板

    接Code节点做三件事:校验sections数量在3到6之间、每节bullets为2到5条,不满足就截断或补占位文案;若表单未填品牌色则填入CONFIG中的默认色;把JSON填进一段固定版式HTML字符串(含页眉LOGO区、章节区、报价表、页脚联系方式)。CONFIG块集中写机构名称、邮箱、电话、时区、默认品牌色,便于统一修改。

  4. 调用APITemplate.io生成A4 PDF

    添加HTTP Request节点,POST到APITemplate.io的PDF生成接口,认证方式选Header Auth、头名X-API-KEY、值为你的密钥;请求体传入HTML内容并指定A4纸张。节点上加IF错误分支:响应失败时用Gmail节点给机构邮箱发错误邮件,附上报价单请求ID便于排查后重跑。

  5. 创建Gmail草稿并验收

    成功分支接Gmail节点,操作选创建草稿(不是发送),收件人取表单中的客户邮箱,正文引用提案标题与一到两个亮点,附件挂PDF二进制。激活工作流后用测试表单提交一次,到Gmail草稿箱确认草稿、附件和版式。

可直接复制的材料

提案生成系统提示词(可直接粘贴)

本站依据原文“禁止编造数字”等描述独立编写的提示词,与原模板内部提示词不同;章节数限制可按你的版式调整。

你是销售提案撰写助手。根据用户提供的表单信息,输出一份中文业务提案的结构化JSON。
硬性规则:
1. 提案中出现的每一个价格、百分比、日期和工期数字,必须逐字来自用户表单输入,绝对禁止编造、推算或四舍五入任何数字;
2. 如果表单中某项信息缺失,对应字段写null,不要虚构;
3. 语气专业、面向客户决策人,每节条目为2到5条短句,每条不超过40字。
输出仅为此JSON,不要输出任何其他文字:
{"proposal_title":"提案标题,含客户公司名","summary":"100字以内的合作概述","sections":[{"heading":"章节标题","bullets":["要点1","要点2"]}],"pricing_table":[{"item":"服务项","price":"表单报价原文"}],"timeline_note":"工期说明,引用表单工期原文","call_to_action":"一句约见或回复邀请"}
sections数量为3到6节,建议结构:客户现状理解、服务方案、交付与工期、报价、为什么选择我们。

HTML构建Code节点中的CONFIG块示例

本站独立编写的示例配置,机构名称、邮箱、电话均为虚构占位,必须替换为你自己的信息后再启用。

const CONFIG = {
  agencyName: "杭州云启数字营销工作室",
  agencyEmail: "hello@yunqi-demo.example.com",
  agencyPhone: "+86-571-0000-0000",
  timezone: "Asia/Shanghai",
  defaultPrimaryColor: "#1F4E79",
  defaultAccentColor: "#F2A93B",
  minSections: 3,
  maxSections: 6,
  minBullets: 2,
  maxBullets: 5
};
// 用法:brandColor = formBrandColor || CONFIG.defaultPrimaryColor;
// sections数组长度超出[maxSections]时截断,不足[minSections]时合并相邻小节。

表单测试数据(虚构)

本站虚构练习输入,公司与邮箱均为编造;在n8n表单预览中逐字段填入即可触发全流程。

{
  "company_name": "苏州澄光家具有限公司",
  "client_email": "li.wei@chengguang-demo.example.com",
  "situation": "线下门店客流稳定但官网三年未改版,移动端下单流失明显",
  "services": "官网响应式改版、产品3D展示页、季度SEO维护",
  "pricing": "总价人民币68000元,分三期支付",
  "timeline": "8周交付,含2周验收缓冲",
  "brand_color": "#2E5E4E"
}

输入与输出示例

本站虚构演示,未实际运行该工作流;真实PDF版式取决于你编写的HTML模板。

输入

提交上述表单测试数据:苏州澄光家具有限公司,官网改版加SEO维护,总价人民币68000元分三期,8周交付,品牌色#2E5E4E。

对应输出

Gmail草稿箱出现一封新草稿:收件人li.wei@chengguang-demo.example.com,主题“苏州澄光家具有限公司官网改版提案”,正文提到“8周交付含2周验收缓冲”与总价68000元分三期,附件为A4竖版PDF,页眉与章节标题使用#2E5E4E品牌色,报价表中的金额与表单填写完全一致;草稿保持未发送状态等待人工检查。

做完检查这些

  • 用测试表单提交后,Gmail草稿箱出现以客户邮箱为收件人、带PDF附件的草稿,且未自动发送
  • PDF中所有价格、日期、工期数字与表单输入逐字一致,没有出现表单之外的数字
  • 不填品牌色提交时,PDF使用CONFIG中的默认色而不是报错或留空
  • 把APITemplate.io密钥改错提交一次,机构邮箱收到错误通知邮件且流程不产生草稿

容易卡住的地方

  • X-API-KEY必须配成HTTP Header Auth凭据,放查询参数里会被APITemplate.io拒绝
  • Gmail凭据若只授了发送权限而没有创建草稿权限,最后一步会失败
  • 表单字段改名后提示词里的插入变量必须同步改,否则模型收到空字段会在对应位置写null
  • 作者称APITemplate.io免费档够试用,但用量超额或Gemini调用仍可能计费,以各服务商页面为准
  • HTML里引用外部字体或图片若需联网加载,PDF渲染环境可能取不到,建议内联关键样式

原文与作者资料 ↗

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

原文标题
Generate branded PDF sales proposals with Gemini, APITemplate.io and Gmail
原作者
Michael Cedeño
原始发布日期
2026-09-18T17:51:33.360Z
来源
https://n8n.io/workflows/19725