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

2026-09-03 · 原文发布日

Vapi外呼AI电话并把结果写进Google Sheets

这套流程手动启动一次外呼任务,从输入或测试值取得客户号码,向Vapi API发起POST请求,用你的assistant ID和phone number ID拨出AI语音电话;通话结束后Vapi把结果回调到n8n的webhook,流程把时间、客户号码、助手名、状态、结束原因、成本、最后一句和通话ID追加到Google Sheets的Call Log。搭建需Vapi账号、回调地址配置和Sheets授权。

原文要点

Rahul Joshi发布的免费n8n模板,用于Vapi外呼AI电话并记录结果。流程手动启动,从输入数据或备用测试值取得客户号码;向Vapi API发POST请求,用你的assistant ID和phone number ID拨出AI语音电话;通话结束后Vapi把结果回调到n8n的生产webhook;流程把通话元数据追加到Google Sheets的Call Log表,字段包括时间戳、客户号码、助手名、行业、状态、结束原因、成本、最后一句消息和Vapi通话ID。搭建需Vapi账号,把API密钥、assistant ID、phone number ID填进HTTP请求节点,在Vapi后台把助手/服务器webhook指向该流程的生产URL,连接Google Sheets OAuth2并替换表ID与Call Log标签页。

这次做成什么

搭一条"手动发起Vapi外呼→通话结束回调→写入Google Sheets通话日志"的完整链路,并用一条合成数据先打通Sheets写入再上线。

准备什么

  • Vapi账号,已创建assistant并购买或绑定phone number,拿到API key
  • n8n实例,生产webhook需公网可达(可用隧道)
  • Google账号,已建好含Call Log标签页的表格并能配置OAuth2凭据
  • 一个允许拨打的测试电话号码,注意真实外呼按Vapi计费

具体怎么做

  1. 手动触发并准备号码

    在n8n新建工作流,用Manual Trigger接一个Set节点,字段customerPhone从{{$json.phone}}取值,备用值填你的测试号(原模板占位为YOUR_TEST_PHONE_NUMBER)。注意号码格式带国家码,如+8613900000000。

  2. 配置Vapi外呼请求

    加HTTP Request节点,方法POST,URL填Vapi外呼端点,Header加Authorization: Bearer 你的API key,Body用JSON:assistantId填你的助手ID,phoneNumberId填你的号码ID,customer对象里number引用上一步的customerPhone。先在测试模式手动执行一次,确认返回包含call id。

  3. 接回调webhook

    加Webhook节点,方法POST,复制其生产URL。到Vapi后台的assistant或server设置里,把通话结果(end-of-call报告)回调地址填成这个URL。注意测试URL和生产URL不同,正式上线前必须切到生产URL并激活工作流。

  4. 写入Google Sheets

    加Google Sheets节点选Append操作,凭据用OAuth2,文档选你的表格,标签页选Call Log。按下方字段映射把回调数据写入各列,手动执行一次,用合成回调数据测试整行是否正确落表。

可直接复制的材料

Call Log字段映射表

本站按原文列举的九个字段整理的映射方案;回调体具体嵌套路径以你收到的实际Vapi end-of-call payload为准,需对照调整

timestamp       -> {{$json.message.call.startedAt}}
customerNumber  -> {{$json.message.call.customer.number}}
assistantName   -> {{$json.message.call.assistant.name}}
industry        -> 自定义静态值,如"家装销售"
status          -> {{$json.message.call.status}}
endReason       -> {{$json.message.call.endedReason}}
cost            -> {{$json.message.call.cost}}
lastMessage     -> {{$json.message.artifact.messages[-1:].message}}
callId          -> {{$json.message.call.id}}

合成回调测试数据

本站虚构的end-of-call回调体,结构与金额均为示例,用于打通Sheets写入,不代表Vapi真实payload

{
  "message": {
    "type": "end-of-call-report",
    "call": {
      "id": "call_test_9f3a2b",
      "startedAt": "2026-09-10T08:30:00Z",
      "status": "ended",
      "endedReason": "assistant-ended-call",
      "cost": 0.18,
      "customer": { "number": "+8613900000000" },
      "assistant": { "name": "回访助手A" }
    },
    "artifact": {
      "messages": [
        { "role": "assistant", "message": "您好,想回访一下安装体验。" },
        { "role": "user", "message": "挺好的,谢谢。" },
        { "role": "assistant", "message": "感谢反馈,祝您生活愉快,再见。" }
      ]
    }
  }
}

输入与输出示例

本站虚构演示,未实际调用Vapi或Google Sheets,金额为示例参考值

输入

手动执行工作流,输入号码+8613900000000,回调阶段粘贴上面的合成end-of-call数据,industry列填"家装销售"

对应输出

Call Log表追加一行:2026-09-10T08:30:00Z | +8613900000000 | 回访助手A | 家装销售 | ended | assistant-ended-call | 0.18 | 感谢反馈,祝您生活愉快,再见。 | call_test_9f3a2b

做完检查这些

  • 手动执行后Vapi请求返回中包含call id,说明assistantId和phoneNumberID有效
  • 粘贴合成回调数据执行webhook分支后,Call Log新增一行且九个字段全部非空且对应正确
  • 切换生产URL并激活工作流后,用受控测试号码打一通电话并挂断,Call Log中应自动出现该通话记录(回调时延以实际为准,不作时限承诺)
  • 号码格式错误或缺少国家码时,Vapi请求返回错误,不会写入无效日志行

容易卡住的地方

  • 真实外呼按Vapi及号码服务商计费,成本字段只是记录,测试前先确认账户余额
  • 测试webhook URL只在监听时有效,忘记切生产URL并激活是回调不到的最常见原因
  • 回调体嵌套路径可能随Vapi版本变化,字段映射要先对照真实payload核对
  • 拨打陌生号码受各地法规约束,练习只用自己控制的测试号码

原文与作者资料 ↗

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

原文标题
Place real estate AI outbound calls with Vapi and log results to Google Sheets
原作者
Rahul Joshi
原始发布日期
2026-09-03T12:19:51.573Z
来源
https://n8n.io/workflows/19121