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

2026-09-01 · 原文发布日

漏接屋顶来电转AI客服并预约

付费模板。Twilio漏接来电触发后先写通话日志,未接听则把来电转给Retell AI;通话中按工具请求查Google Sheets服务范围、读Google Calendar算出五个可约时段、创建检查预约并去重,紧急漏水会发Twilio值班短信,挂断后回填 transcript、录音与结果。

原文要点

原模板为n8n付费模板:Twilio号码的fallback/voice webhook进线后先把通话写入Google Sheets的Call Log页,已接听就结束,未接听则返回TwiML把来电转接到Retell AI号码。通话中Retell按工具名回调工作流:查ServiceAreas页确认服务范围、读Google Calendar忙事件算出未来七天营业时间内的五个一小时空档、创建检查预约并按号码在Leads页近窗口去重;紧急漏水会追加紧急行并经Twilio发值班短信;挂断后回填TranscriptLink、RecordingUrl与结果,并短信通知店主,未成交时还通知办公室经理。

这次做成什么

在自建n8n中复刻一套“漏接来电→AI客服→查覆盖/给时段/预约/紧急升级→回填结果”的链路,并用本站合成的测试数据先把分支跑通,再接真实Twilio与Retell。注意:原模板需购买,本页不是原工作流文件,界面与字段名需在原模板中逐项核对;Twilio与Retell均为付费服务。

准备什么

  • 一个n8n实例(自托管或云版均可)及已购买的原模板访问权限
  • Twilio账号与一个可编程电话号码,Retell账号与一个AI座席号码
  • Google账号,能开通Google Sheets与Google Calendar的OAuth2凭据
  • 一个含Call Log、Leads、ServiceAreas三个标签页的Google表格及一个检查用日历

具体怎么做

  1. 建好Google表格与日历结构

    新建表格并建三个标签页。Call Log列:Timestamp、CallId、Phone、Status;Leads列:Timestamp、Phone、Address、Zip、BookingCompleted、SlotStart、TranscriptLink、RecordingUrl、Outcome;ServiceAreas列:Zip、Region、Covered(TRUE/FALSE)。另在Google Calendar建一个名为Inspections的日历,用于写预约事件和读取忙时。

  2. 配置凭据与Twilio入口

    在n8n凭据页分别创建Twilio(Account SID/Auth Token)、Google Sheets OAuth2、Google Calendar OAuth2三条凭据。把模板中“Twilio Fallback”webhook的生产URL复制出来,到Twilio控制台该号码的Voice设置里填进“A call comes in / fallback”位置,并把模板TwiML节点里的转发号码占位符替换成你的Retell电话号码。

  3. 配置Retell两个回调

    在Retell座席设置里,把工具调用(tool)webhook指向模板的Retell工具webhook地址,把call-ended webhook指向模板的通话结束webhook地址。工具名与分支需逐一对应:检查覆盖、查询空档、创建预约、紧急升级四类;具体工具名以原模板节点为准,不要自行改名。

  4. 用合成测试数据逐分支验证

    先用n8n的测试webhook手动POST下方示例payload:覆盖查询传Zip=94019应返回covered=true;预约请求传一个最近未出现的手机号应新增日历事件并追加Leads行,再重发同号码应返回duplicate;紧急漏水请求应向Leads追加紧急行并触发Twilio短信分支。每个分支用测试执行面板确认走的是预期路径。

  5. 联调挂断回填并上线

    用真实手机打Twilio号码不接听,确认来电被转接到Retell;完成一通对话后挂断,检查Leads对应行的TranscriptLink、RecordingUrl、Outcome被回填,店主收到短信,未成交时办公室经理也收到短信。全部通过后把webhook从测试URL切换到生产URL。

可直接复制的材料

ServiceAreas与Leads测试数据(合成CSV)

本站独立编写的合成测试数据,导入自己的Google表格使用,不含真实个人信息

ServiceAreas.csv:
Zip,Region,Covered
94018,El Granada,TRUE
94019,Half Moon Bay,TRUE
94037,Montara,FALSE

Leads.csv(表头行):
Timestamp,Phone,Address,Zip,BookingCompleted,SlotStart,TranscriptLink,RecordingUrl,Outcome

Retell工具webhook测试payload(合成JSON)

本站虚构的练习输入,字段名需与原模板实际节点核对后再发

{"tool":"check_service_area","call_id":"test-call-001","args":{"zip":"94019","phone":"+15550100001"}}

{"tool":"book_inspection","call_id":"test-call-001","args":{"phone":"+15550100001","address":"100 Test Ave","zip":"94019","slot_start":"2026-09-08T10:00:00-07:00"}}

{"tool":"urgent_leak","call_id":"test-call-001","args":{"phone":"+15550100001","address":"100 Test Ave"}}

空档计算与去重的核对提示词

本站设计的独立练习提示词,用于验证你自己的排期计算节点逻辑,窗口天数与营业时间在模板中可自行调整

你是n8n排期逻辑核对助手。规则:营业时间每天9:00-17:00,时段长度1小时,只查未来7天,跳过与日历忙事件重叠的时段,返回最早5个可用时段,输出JSON数组,元素为{"start":"ISO8601","end":"ISO8601"}。另有去重规则:同一手机号在去重窗口内已存在Leads记录则返回{"status":"duplicate"}。下面给你日历忙事件列表,请按规则算出结果并解释每一步排除原因。忙事件:

输入与输出示例

本站虚构演示,非原模板运行结果

输入

测试POST覆盖查询:{"tool":"check_service_area","args":{"zip":"94037","phone":"+15550100001"}},该ZIP在合成ServiceAreas中Covered为FALSE

对应输出

工具分支返回给Retell的示意响应:{"covered":false,"zip":"94037","message":"该区域暂不在服务范围内"};同时Call Log中test-call-001一行保留进线记录,Leads无新增行

做完检查这些

  • POST zip=94019的覆盖请求返回covered=true,POST zip=94037返回covered=false
  • 首次预约请求在Inspections日历新增1小时事件并在Leads追加一行,同号码在去重窗口内重发返回duplicate
  • 紧急漏水请求触发Twilio短信分支且Leads出现紧急行
  • 挂断webhook后对应Leads行的TranscriptLink、RecordingUrl、Outcome三列被填上

容易卡住的地方

  • 原模板为付费模板,未购买无法看到节点内部配置,本页字段名为据原文描述整理,需在模板中核对
  • TwiML中的转发号码与短信收发号码是占位符,忘记替换会导致转接失败或短信发往示例号码
  • Call Log、Leads、ServiceAreas的列名必须与节点引用完全一致,差一个字母Google Sheets节点就会报错
  • 时区不一致会让五个空档算错,确认日历、n8n实例与业务时间用同一时区

原文与作者资料 ↗

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

原文标题
Route missed roofing calls to a Retell AI agent with Twilio and Google Workspace
原作者
Khadija Naeem
原始发布日期
2026-08-31T16:54:29.066Z
来源
https://n8n.io/workflows/18949