2026-09-10 · 原文发布日
Tally表单询盘进Salesforce并自动首次跟进
新Tally表单提交触发后,先校验表单ID和字段映射、规范邮箱电话和授权标记,再在Salesforce建自定义对象记录做幂等占位防重复处理;按邮箱匹配已有Lead或Contact,找不到就新建Lead。对方授权且电话有效时,OpenAI生成一段内部销售简报存进询盘记录,再通过Sent发送已审核的首次跟进短信模板,发送结果与最终状态写回Salesforce,结果不明确时转人工复核。
原文要点
原模板事实:Tally新提交触发;先核对期望form ID与映射问题ID,规范化email、phone、consent并生成询盘快照;在Salesforce自定义对象Tally_Inquiry__c用Submission_Key__c原子占位,重放或已完成即停止;按邮箱找Lead/Contact,找不到新建Lead;只有consent为同意且电话有效时,才用OpenAI生成内部销售简报写回Inquiry__c,再用Sent按幂等键发送已审核首次跟进模板,参数示例first_name;结果写回Result__c/Status__c,不明确则人工复核。需建Submission_Key__c、Status__c、Inquiry__c、Result__c、Lead__c、Contact__c等字段。
这次做成什么
做一个隔离沙盒练习:用合成Tally提交走完“校验→幂等占位→匹配或建Lead→合规才发短信→写回状态”的链路;OpenAI只生成内部简报,不替你编造外发话术;未获得原工作流文件,以下为本站可照做方案,界面字段以你的n8n/模板核对为准。
准备什么
- n8n实例,具备Tally Trigger或Webhook、Salesforce、OpenAI、HTTP Request/Sent节点凭据
- Salesforce沙盒账号与可建自定义对象权限,绝不先在生产环境测试
- Tally测试表单,字段含姓名、邮箱、电话、consent是否同意,问题ID可复制
- OpenAI API凭据,仅生成内部简报;可能产生平台费用
- Sent账号与已审核模板,沙盒/正式模式与原模板设置保持一致
- 一条不会误发真实客户的测试手机号,优先用Sent沙盒或虚拟号
具体怎么做
建Salesforce对象与映射常量
在Salesforce沙盒建自定义对象Tally_Inquiry__c,按原文列出的字段建Submission_Key__c、Status__c、Inquiry__c、Result__c、Lead__c、Contact__c;Submission_Key__c设外部ID/唯一,Status__c给PICKLIST:RECEIVED,PROCESSING,SENT,SKIPPED,MANUAL_REVIEW,COMPLETED。n8n里放Set节点“Form Mapping and Settings”,写formId、questionIds、consentYes、consentNo、sentTemplate、sandbox:true。
接收提交并规范化快照
用Tally Trigger或测试Webhook接收提交;第一分支IF比较payload.form_id是否等于映射formId,不等直接丢弃并记日志。Code节点输出snapshot:email转小写去空格;phone只保留数字并按本地区号规则校验长度,示例不假定真实国家码;consent映射成布尔;first_name缺失用“朋友”。submission_key用formId+response_id拼接,作为幂等键。
原子占位防重复
Salesforce节点用Upsert,匹配字段选Submission_Key__c,记录只写Status__c=PROCESSING与原始快照到Inquiry__c;若返回已存在且Status__c为COMPLETED/SENT,则Stop。随后用SOQL按email查Lead再查Contact;命中一个就把对应Id写入Tally_Inquiry__c的Lead__c或Contact__c;都没命中则Create Lead,字段LastName=first_name或“Tally询盘”,Email=snapshot.email,再把新Id写回。
合规简报、发送与回写
只有当consent=true且phoneValid=true才进入OpenAI,用下方提示词生成不超过120字内部简报,Update Inquiry__c;再调用Sent节点/HTTP Request,模板名取sentTemplate,参数只传first_name,idempotency_key=submission_key,sandbox与设置一致。成功则Result__c写provider返回id、Status__c=SENT再置COMPLETED;无授权或电话无效Status__c=SKIPPED;Salesforce或Sent返回冲突、多匹配、模板参数缺失时Status__c=MANUAL_REVIEW并抛错通知负责人。
可直接复制的材料
表单映射与设置JSON
本站练习配置;formId、问题ID、同意文案、模板名必须替换为你的Tally/Sent实际值;邮箱为虚构。
{
"formId": "tly_demo_inquiry_001",
"questionIds": {
"firstName": "q_first_name",
"email": "q_email",
"phone": "q_phone",
"message": "q_message",
"consent": "q_consent"
},
"consentYes": "Yes, I agree",
"consentNo": "No",
"sentTemplate": "approved_first_follow_up_demo",
"sandbox": true,
"manualReviewEmail": "sales-ops-demo@example.com"
}OpenAI内部销售简报提示词
本站编写;只用于内部简报写回Salesforce,不是发给客户的短信;模型与字段名需在你的节点核对。
你是销售运营助理,只生成给内部CRM看的简短事实简报,不写对外营销文案,不承诺价格,不编造需求。输入是JSON:{first_name,email_domain,phone_valid,consent,message,matched_record_type}。输出必须是纯文本一段,不超过120个中文字符,格式:来源=Tally;意图=...; urgency=低/中/高; 建议下一步=...; 注意=如consent为false则写“勿主动联系”。若message为空,输出:来源=Tally;意图=未填写; urgency=低; 建议下一步=仅记录; 注意=信息不足。合成Tally Webhook测试数据
合成数据,不含真实个人信息;号码为示例占位,联调请改用Sent沙盒/虚拟号。
{
"form_id": "tly_demo_inquiry_001",
"response_id": "resp_20260910_0007",
"answers": {
"q_first_name": "林晓",
"q_email": " LIN.XIAO@Example.COM ",
"q_phone": "+86 138-0000-0000",
"q_message": "想了解团队版报价和试用期",
"q_consent": "Yes, I agree"
},
"submitted_at": "2026-09-10T08:30:00Z"
}输入与输出示例
本站虚构演示,未调用OpenAI/Sent/Salesforce;Id格式仅为示意,真实长度与前缀以你的沙盒为准。
输入
使用上方合成Tally Webhook;Salesforce无lin.xiao@example.com的Lead/Contact;Submission_Key__c=tly_demo_inquiry_001:resp_20260910_0007尚不存在;sentTemplate处于sandbox。对应输出
规范化后email=lin.xiao@example.com,phoneValid=true,consent=true;Upsert新建Tally_Inquiry__c且Status__c=PROCESSING;搜索无匹配后Create Lead得到00Q3f000001DemoAA;OpenAI简报类似“来源=Tally;意图=团队版报价与试用;urgency=中;建议下一步=沙盒发送首联并预约;注意=已获授权”;Sent沙盒返回provider_id=sent_demo_9182,Result__c=sent_demo_9182,Status__c=COMPLETED,Lead__c=00Q3f000001DemoAA。做完检查这些
- 错误form_id或缺失q_email/q_consent时在第一分支停止,不创建Salesforce记录
- 同一response_id重放第二次,Upsert命中Submission_Key__c且已有SENT/COMPLETED时直接停止,不重复发短信
- email大小写与空格被规范化后,能匹配已有Lead或Contact并写回对应 lookup 字段
- consent=false或phoneValid=false时不进入OpenAI与Sent,Status__c=SKIPPED且Inquiry__c保留原始快照
- Sent沙盒返回成功才写COMPLETED;模板缺first_name或返回多匹配时进入MANUAL_REVIEW并通知
容易卡住的地方
- 必须先在Salesforce沙盒建好原文所列字段并给n8n用户创建/更新权限,否则占位与回写会失败
- Submission_Key__c要设为唯一/外部ID,否则Upsert无法达到原子占位效果
- consent的Yes/No文案因表单语言不同而变化,映射值要与Tally选项逐字一致
- Sent模板需已审核且参数名匹配;sandbox/live行为要与Set节点sandbox一致,避免误发真实号码
- SOQL字段名、对象名、节点按钮以你的环境为准;本站不提供可导入n8n JSON,不伪造API路径
- 电话有效性只做长度/数字练习规则,不宣称识别真实运营商或国家码
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Capture and follow up on Tally inquiries with Salesforce, Sent, and OpenAI
- 原作者
- Amar
- 原始发布日期
- 2026-09-10T05:42:44.951Z
- 来源
- https://n8n.io/workflows/19433