2026-10-15 · 原文发布日
n8n把项目简报变成品牌提案PDF并自动发给客户
通过n8n表单收集客户信息、收件邮箱和自由文本项目简报,Claude把简报抽取成标题、范围、周期、报价等结构化字段,提交ShipPDF按你的品牌模板生成PDF并等待回调;完成后下载文件,经Gmail作为附件发给客户,同时归档Google Drive,失败状态留了分支可自行加告警。适合频繁出提案的自由职业者或小团队。
原文要点
这是n8n.io上的一个免费工作流模板(编号21000):n8n表单收集客户信息、收件邮箱和自由文本项目简报;Anthropic Claude经Information Extractor把简报抽取为标题、范围、周期、报价等结构化字段;提交ShipPDF API按模板生成PDF,并通过n8n的resume webhook等待完成回调;回调后规范化状态和PDF URL,完成则下载PDF,经Gmail作为附件发送给客户,同时上传Google Drive归档;非完成状态进入一个占位步骤,可自行加Slack或邮件告警。需替换ShipPDF的template_id,并让抽取字段与模板的data_schema对齐。
这次做成什么
搭好表单→Claude抽取→ShipPDF生成并等待回调→Gmail发送+Drive归档的完整链路,用一份虚构简报端到端练习,并给失败分支补上告警。
准备什么
- n8n实例及可公网访问的resume webhook地址(ShipPDF回调需要)
- Anthropic API凭据、ShipPDF API key(HTTP Bearer Auth)及已建好的提案模板ID
- Gmail凭据、Google Drive凭据和目标文件夹
- 一份练习用项目简报文本(可用本页材料中的虚构示例)
具体怎么做
发布表单并测试提交
打开模板中的n8n Form节点,确认字段含客户姓名、收件邮箱、项目简报。发布表单后用材料中的虚构简报提交一次,确认触发执行且三个字段都进到后续节点。
配置Claude结构化抽取
填入Anthropic凭据并选择Claude模型。在Information Extractor中把属性定义为你ShipPDF模板data_schema里的字段,例如title、scope、timeline、price,并把材料中的字段schema示例作为参照逐项核对类型。
接通ShipPDF并映射字段
把ShipPDF API key配成HTTP Bearer Auth凭据,把请求里的template_id替换为你的提案模板ID,将抽取出的字段一一映射到模板数据。确认请求中带上了n8n的resume webhook URL作为完成回调地址。
处理回调与分支
执行会停在Wait节点等ShipPDF回调。回调后检查规范化出的状态和PDF URL:为completed时下载PDF;其他状态进入占位分支,在这里加一个Slack或邮件告警节点,把状态和商机简报摘要发给自己。
发送与归档并验收
连接Gmail,把收件人映射到表单邮箱,附件用下载到的PDF二进制;连接Google Drive并设置目标文件夹上传同一文件。用练习简报跑通一次,确认客户邮箱收到带PDF附件的邮件、Drive文件夹出现同名文件。
可直接复制的材料
Information Extractor字段schema示例(本站独立编写)
本站示例字段,必须与你自己ShipPDF模板的data_schema字段名和类型一一对应后再用,未核对的以ShipPDF后台为准。
{
"attributes": [
{"name": "title", "type": "string", "description": "提案标题,不超过30字"},
{"name": "client_name", "type": "string", "description": "客户公司或联系人名称"},
{"name": "scope", "type": "array", "description": "交付范围清单,每项一句话", "items": {"type": "string"}},
{"name": "timeline", "type": "string", "description": "项目周期,如 6周"},
{"name": "price", "type": "number", "description": "含税总价,单位元"},
{"name": "currency", "type": "string", "description": "币种,如 CNY"}
]
}ShipPDF失败分支告警提示词(本站独立编写)
挂在模板预留的失败占位分支上,可接Slack或邮件节点;字段名按你实际规范化后的输出调整。
ShipPDF回调状态不是completed。请把以下信息整理成一条发给我自己的告警消息:
- 表单提交的客户名称:{{ $json.client_name }}
- 收件邮箱:{{ $json.recipient_email }}
- ShipPDF返回状态:{{ $json.status }}
- 简报摘要(前100字):{{ $json.brief }}
输出一段不超过150字的中文告警正文,说明PDF生成未成功、需要人工检查ShipPDF后台。输入与输出示例
本站虚构演示输入与示意输出,非模板实际运行结果;PDF内容取决于你的ShipPDF模板
输入
表单提交:客户名称“杭州云杉设计工作室”,收件邮箱 client@example.com,简报:“我们需要一套品牌官网改版,含首页、作品展示和联系表单三个页面,希望六周内上线,预算大约四万五千元人民币。”对应输出
Claude抽取结果:{"title":"品牌官网改版提案","client_name":"杭州云杉设计工作室","scope":["首页改版","作品展示页","联系表单页"],"timeline":"6周","price":45000,"currency":"CNY"};ShipPDF回调completed后,Gmail向 client@example.com 发出带 proposal.pdf 附件的邮件,Drive目标文件夹新增同名PDF做完检查这些
- 表单提交后能在后续节点看到客户名称、收件邮箱、简报三个字段
- Information Extractor输出的字段名与ShipPDF模板data_schema完全一致,无缺字段报错
- ShipPDF回调completed后Wait节点恢复执行并成功下载PDF
- 客户邮箱收到带PDF附件的邮件,且Google Drive目标文件夹出现同一文件
- 手工构造非completed回调时,失败分支的告警能发出
容易卡住的地方
- template_id不替换或字段映射与data_schema不一致,ShipPDF会拒绝请求或生成空内容PDF
- n8n地址不可公网访问时ShipPDF无法回调,执行会一直卡在Wait节点
- 不处理非completed状态会静默丢失失败单,务必在占位分支加告警
- Gmail附件要用下载节点输出的二进制数据,直接传URL会导致附件为空
- ShipPDF、Anthropic等第三方服务可能按用量另行收费,免费的是n8n模板本身
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Generate branded proposal PDFs from briefs with Claude, ShipPDF and Gmail
- 原作者
- James Haver
- 原始发布日期
- 2026-10-15T10:15:15.274Z
- 来源
- https://n8n.io/workflows/21000