电话挂断,行政工作才刚开始。
![]()
Maya 是一名客户经理。她刚和 Larkspur Freight 的 Priya 通完一通顺利的电话:双方原则上谈妥了价格,Priya 想要一份书面纪要,周二还有一次跟进,Larkspur 的首席营销官应该了解一下企业版方案。
距离下一通电话只剩十五分钟,而 Maya 有四个工具要更新:
- HubSpot:记录通话,把交易推进到谈判阶段。
- Apollo:找到那位首席营销官,加为联系人,放进企业版序列。
- Google Calendar:预约周二。
- Gmail:写一份价格纪要。
她的团队已经有语音助手了。它擅长对话,能总结通话、建议下一步。但它碰不了这四个工具中的任何一个,于是 Maya 只能再手动做一遍。
显而易见的解法是让助手接入这些应用。放到语音场景里,这比听起来难:
- 通话中没有屏幕。如果 HubSpot 的连接过期了,助手没法在 Maya 说话时弹出一个 OAuth 授权页。
- 每个工具都会拖慢回复。每一轮对话,工具的结构定义都要进入模型上下文。在聊天应用里多思考一秒没关系,在语音通话里就是一段尴尬的沉默。
- 语音会被听错。“给 Priya 起草纪要”可能变成“给 Priya 发送纪要”。一个词听错,一封没写完的邮件就发到了潜在客户那里。
- Maya 看不见改了什么。在聊天界面里,她能看着工具调用一条条滚过;在通话中,她只知道助手告诉她的内容。
要做的,是给一位销售代表配一个能处理整份清单的语音助手:用她自己的权限,并且把做过的事告诉她。
一句话,五个动作
用 Maya 的话说,需求是这样的:当我挂断潜在客户的电话,我想把发生的事说出来,然后在我的下一通电话之前,CRM、跟进和触达都已经更新好。
于是通话结束后她只说一句:“记录 Larkspur Freight 的通话,把交易推进到谈判阶段,预约周二跟进,给 Priya 起草价格纪要,把他们的首席营销官加入企业版序列。”
这句话会变成五个动作,每个动作背后都有一个来自连接器文档的工具。其中两个选择是刻意的。
纪要被保存为草稿,而不是直接发送。gmail_create_draft 和 gmail_send_message 都存在,而对语音助手来说,草稿才是正确的默认值。如果有词被听错,它躺在 Maya 的草稿箱里,而不是 Priya 的收件箱里。
助手还会把做过的事读回来:“已记录通话,Larkspur 已推进到谈判阶段,周二十点已预约,纪要已保存为草稿,Dana Okafor 已加入企业版序列。”在语音通话里,这段复述是 Maya 唯一能看到的审计记录。
自己动手要付出什么
这套东西可以自己接。对一个三十名销售代表的团队来说,需要这些:
- 三个 OAuth 应用、四个工具。HubSpot、Apollo 和 Google 各需要一个 OAuth 应用、一套授权流程、作用域、每位代表一份加密令牌存储,以及刷新逻辑。Google Calendar 和 Gmail 可以共用一个 Google 应用,但作用域仍要配对。
- 能在通话中工作的令牌处理。某位代表的 HubSpot 令牌下午两点过期,语音助手两点零五分尝试记录通话就会失败。代码需要在通话前刷新;如果刷新不了,就要大声说出来,并把链接发到通话之外代表能看到的地方。
- 一份小到能“对话”的工具清单。四个连接器合起来暴露数百个工具,仅 HubSpot 的连接器在 Scalekit 目录里就有 457 个,其中 80 个是破坏性的。你得亲手挑出八个,写好它们的结构定义,并在 API 变化时保持同步。
- 防听错的护栏。无论转写结果说了什么,都不能让删除、归档或发送类工具可达。
- 每位代表、每个动作都有记录。当交易阶段变了却没人记得为什么,你需要知道是哪个代表的助手、在什么时候做的、返回了什么。
单拎出来都不难,合在一起就是项目的大头,而且每加一个新应用、一位新代表,它都会变大。语音那部分,反而是最容易的。
用 Scalekit 和 Vapi 搭起来
这个版本把 Scalekit 的 Vapi 语音助手教程从 Google Calendar 扩展到 HubSpot、Apollo 和 Gmail。Vapi 负责语音和对话,Scalekit 坐在助手和应用之间:它持有每位代表的连接,只暴露这个角色需要的工具,并记录每一次调用。
第一步,每位代表一次性连好应用。在 Maya 的第一通电话之前,她连上 HubSpot、Apollo 和 Google,比如从应用里的设置页操作。后端向 Scalekit 查询她在每个连接上的账户,如果尚未激活,就拿到一条授权链接发给她。她的令牌留在 Scalekit 里加密保存并在那里刷新,语音应用和模型都看不到。
第二步,建一个只含这个角色工具的虚拟 MCP 服务器。四个连接器合起来有数百个工具,Maya 的助手只拿八个。这份清单里没有 HubSpot 的 80 个破坏性工具,没有 Apollo 的两个归档类工具,没有 Google Calendar 的六个删除类工具,也没有 Gmail 的八个删除和清空工具,gmail_send_message 同样不在其中。无论转写说了什么,助手都无法删除、归档、移除或发送。八个结构定义而不是数百个,也让每一轮对话都保持简短——有人在等一句口头回复时,这很关键。
第三步,每通电话开始时传入代表的身份。Maya 点“开始通话”,后端检查她的连接,然后在那台服务器上为她签发一个会话令牌。令牌绑定她的标识,所以这通对话里的每次工具调用都以她的权限运行,不会是别人的。会话令牌在这里有效期三十分钟,不可刷新,每通电话换一个新的。如果她的 HubSpot 授权已过期,通话不会悄悄带着故障启动:应用会告诉她该重连哪个应用,并把链接发到她能看到的地方。如果连接在通话中途失效,工具调用会失败,助手的指令要求它大声说明,而不是猜测。
第四步,把 Vapi 助手指向这个服务器。在 Vapi 里给助手加一个 MCP 工具,它接收服务器地址和请求头,请求头可以用变量。然后从浏览器用这位代表的值发起通话。Vapi 在通话开始时发现那八个工具,剩下的交给系统提示词:写任何东西之前,先复述名字、日期和找到的交易,等一个“是”;更新前先用 hubspot_deals_search 找到交易;邮件永远是草稿,不能发送;把联系人加入序列,从指定邮箱发出;如果某个工具说连接需要重新授权,说出是哪个应用并告诉代表重连链接正在路上,不要重试;做完之后,把每一处改动逐行读回来。
第五步,每个动作都记在代表名下。每次工具调用都经过 Scalekit,因此都会连同工具、代表标识、时间和结果被记录。如果下周 Larkspur 的交易阶段看起来不对,你能看到究竟是哪一通电话移动了它、来自谁的助手、HubSpot 返回了什么。失败会标记为连接器错误(HubSpot 限流、被拒绝的作用域)或 API 错误(你的配置问题)。
偏好 LiveKit 的话,Scalekit 的 LiveKit 教程用另一种方式做同样的身份传递:服务器读取已登录用户,把标识放进助手的调度元数据,worker 为它定义的每个工具调用 executeTool。教程指出 @livekit/agents 1.4.11 没有 MCP 工具集,所以那里要靠选择包装哪些工具来限定范围。两套教程都有可克隆的仓库。
什么时候不需要这套东西
如果语音助手只给你自己用,跑在你自己的 HubSpot 和 Google 账户上,可以跳过这层集成:把 API 密钥放进环境变量,手写那八个工具,一个下午就能搞定。
当第二位代表想要自己的权限、当连接在季度中途过期、当有人问是哪个助手移动了交易,它才开始变得重要。到那时,按代表隔离的连接、限定范围的工具清单和逐次通话的日志,就不再是锦上添花。
想用自己的账户试一试,从 Scalekit 的快速开始入手,然后在控制台里添加 HubSpot、Apollo、Google Calendar 和 Gmail 连接。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.