2026-10-13 · 原文发布日
自动跟进未成交报价:邮件加短信三触达
这条n8n流程每天上午10点扫描Google Sheets中的未成交报价,按第2天邮件、第7天短信、第14天最后短信的节奏挑出到期对象,先通过HTTP调用CRM确认报价仍有效,再让OpenAI按你的业务口吻生成跟进文案,首触经Gmail、后续经Twilio短信发出,每次触达和已关闭报价分别记入Touches和ClosedLog表,避免对已成单客户重复打扰。
原文要点
原工作流由AI Automation Playbook发布在n8n模板库(免费模板):每天上午10点定时运行,读取Google Sheets的Quotes标签页,按发送日期与触达次数挑出到期的未成交且未退订报价(第2天邮件、第7天短信、第14天最后短信);先HTTP调用CRM/报价系统确认报价仍为open,再用OpenAI按业务口吻生成跟进文案;首触经Gmail、后续经Twilio短信发出;每次触达写入Touches表,发现已关闭的报价记入ClosedLog表。需配置的占位包括CONFIG中的业务名、Twilio发送号码、目标表格ID,以及CRM查询端点URL(含鉴权)。前置条件为OpenAI密钥、Google账号、Twilio账号含号码、可HTTP查询的CRM。原说明还给出自定义方向:改触达节奏、改系统提示词口吻、加第四次触达或末次优惠。
这次做成什么
在自有n8n中重建这条报价跟进流程:定时扫描→CRM状态复核→AI文案→分渠道发送→双表记账。先用三行合成报价数据跑通分支逻辑,确认只对到期且仍为open的报价发消息。
准备什么
- 一个可定时运行的n8n实例(自托管或云)
- Google账号,可建Sheet并完成Sheets与Gmail的OAuth2授权
- OpenAI API密钥
- Twilio账号及一个可发短信的发送号码(先用试用号与已验证收件号)
- 一个可通过HTTP查询报价状态的CRM或报价工具端点;没有时可用Mock端点代替
具体怎么做
建表
建一个Google Sheet,三个标签页。Quotes列:quote_id、sent_date、touch_count、status、opted_out、email、phone、amount、customer_name;Touches列:quote_id、touch_no、channel、sent_at、message;ClosedLog列:quote_id、closed_at、detected_via。把表ID写入工作流CONFIG。
定时与筛选
Schedule Trigger设为每天10:00。Google Sheets节点读Quotes全表,后接Code节点计算每条报价的到期情况:touch_count=0且sent_date距今≥2天→邮件;=1且≥7天→短信;=2且≥14天→最后短信;status≠open或opted_out=true一律跳过。输出待处理数组。
CRM复核分支
对每条待处理报价,HTTP Request节点GET你的CRM端点(如https://crm.example.com/api/quotes/{{quote_id}},鉴权按CRM要求配Header或Token)。IF节点判断返回status:closed→写入ClosedLog并把Quotes中status改为closed,不发消息;open→继续;接口超时或404→本次跳过该条并留待人工核查,不写入Touches、不增加touch_count,避免把失败请求记为已触达。
AI生成文案
OpenAI节点用材料中的提示词,按触达次数生成对应文案:第一次生成邮件主题+正文,第二、三次生成160字符内短信。把业务名、报价金额、报价ID作为变量传入,保持口吻一致。
发送与记账
touch_count=0走Gmail节点发邮件;其余走Twilio节点发短信(From为CONFIG中的Twilio号码,To为Quotes的phone)。发送成功后Google Sheets节点向Touches追加一行,并把Quotes中该报价touch_count加1、更新last_touch_date。
可直接复制的材料
跟进文案生成提示词
本站独立编写的示例提示词,业务名、口吻与规则可按需改;原模板提示词需以你导入后的实际节点为准。
你是【业务名】的销售助理,为未成交报价写跟进文案。规则:
- touch_no=1:写邮件,含主题行与正文,正文不超过120词,询问报价是否有疑问,附一句可约15分钟电话
- touch_no=2:写短信,不超过160字符,友好提醒报价仍有效
- touch_no=3:写最后一条短信,不超过160字符,说明报价即将到期,给客户一个明确回复期限,语气不施压
- 使用客户名字与报价编号,金额以人民币元呈现
- 不使用夸张促销词,不承诺折扣
输入:{"customer_name":"王女士","quote_id":"Q-2026-0188","amount_cny":12800,"touch_no":2,"business_name":"恒信暖通"}
只输出文案本身,邮件格式为“主题:...”加正文,短信直接输出文本。Quotes合成测试数据(CSV)
本站虚构的合成数据,日期相对2026-10-13设计:第一行到期首触邮件、第二行到期短信、第三行应被CRM复核拦下、第四行退订跳过。手机号为空号段示例,勿真发。
quote_id,customer_name,sent_date,touch_count,status,opted_out,email,phone,amount_cny
Q-2026-0188,王女士,2026-10-11,0,open,false,wang@example.com,+8613800000001,12800
Q-2026-0175,李先生,2026-10-04,1,open,false,li@example.com,+8613800000002,8600
Q-2026-0160,张经理,2026-09-28,2,closed,false,zhang@example.com,+8613800000003,21500
Q-2026-0195,陈小姐,2026-10-12,0,open,true,chen@example.com,+8613800000004,5400工作流CONFIG示例
本站示例配置结构,对应原模板的CONFIG占位;twilio_from_number为Twilio文档保留的示例号段,需替换为真实号码。
{
"business_name": "恒信暖通",
"google_sheet_id": "1DemoSheetIdReplaceMe",
"twilio_from_number": "+15005550006",
"crm_status_endpoint": "https://crm.example.com/api/quotes/",
"touch_schedule_days": [2, 7, 14],
"daily_run_hour": 10
}输入与输出示例
本站虚构演示,未实际运行;Twilio试用号只能发给已验证号码。
输入
2026-10-13上午10点定时触发,Quotes表为上面CSV四行合成数据,CRM端点对Q-2026-0160返回closed、其余返回open对应输出
处理结果:Q-2026-0188走Gmail发出首触邮件,Touches追加{quote_id:Q-2026-0188,touch_no:1,channel:email}且touch_count→1;Q-2026-0175走Twilio发短信,touch_count→2;Q-2026-0160被写入ClosedLog{quote_id:Q-2026-0160,detected_via:crm_recheck}且不发任何消息;Q-2026-0195因opted_out=true直接跳过。本批共2次触达、1条关闭记录、1条跳过。做完检查这些
- 四行测试数据各走预期分支:邮件、短信、关闭登记、退订跳过,无一行走错渠道
- 同一报价当天重复触发流程不会重复发送(sent_date+touch_count判定幂等)
- CRM端点返回非open状态时不发消息且ClosedLog有对应记录
- Touches中每行的message与OpenAI输出一致,Quotes的touch_count与Touches行数吻合
- 短信文案长度不超过160字符,超出时提示词或节点需截断处理
容易卡住的地方
- CRM端点URL与鉴权是占位配置,未改成真实地址时HTTP节点全线报错,建议先用Mock端点联调
- sent_date列格式必须统一为YYYY-MM-DD,否则日期差计算出错导致整批漏发或错发
- Twilio试用账号只能向已验证号码发短信,未验证号码会返回错误但流程可能仍记账,需把发送失败也纳入IF分支
- opted_out判定若只查Quotes而不查CRM最新状态,客户退订信息不同步会造成骚扰投诉
- 定时时区取决于n8n实例设置,容器默认UTC时上午10点会对应到错误当地时间
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Recover abandoned quotes with GPT-4o mini, Gmail, Twilio and Google Sheets
- 原作者
- AI Automation Playbook
- 原始发布日期
- 2026-10-13T06:32:32.003Z
- 来源
- https://n8n.io/workflows/20850