工作原理
- 使用架构定义工具(工具接受哪些参数)
- 提供
endpoint配置(ThunderPhone 在哪里调用您的 API)——或者省略该配置,以便通过您的组织 webhook 接收工具调用 - 通话期间,AI 会根据对话决定何时使用工具
- ThunderPhone 使用工具参数调用您的端点
- 您的 API 响应会反馈给 AI,以继续对话
工具架构
每个工具都遵循以下结构:函数定义
端点配置
endpoint 配置不会发送给 AI 模型——它仅供 ThunderPhone 用于执行工具调用。两种调用路径
您的服务器收到哪种请求取决于工具是否具有endpoint:
两种路径都是阻塞式的——AI 会在句子说到一半时等待
结果——超时时间为 20 秒。请确保处理程序快速响应。可以混合使用:
对于组织具有 webhook URL 的通话,具有
endpoint 的工具会
被直接调用,其余工具则回退到 webhook。
直接端点调用
当 AI 调用具有endpoint 的工具时,ThunderPhone 会向您的 URL 发送请求:
请求头
endpoint.headers 的自定义请求头,以及两个带有 ThunderPhone 命名空间的请求头:
X-ThunderPhone-Signature—— 使用您的组织 webhook 密钥作为密钥,对精确的请求正文 字节进行 HMAC-SHA256 计算所得的签名X-ThunderPhone-Call-ID—— 当前通话 ID
endpoint.headers 覆盖它,否则会设置 Content-Type: application/json
——自定义 Content-Type 优先。
请求正文
对于POST / PUT / PATCH,正文仅包含工具参数(无包装对象),并以规范方式序列化(键排序、紧凑分隔符):
GET / DELETE,参数会作为查询参数发送,
正文为空——此时会基于空字节字符串计算签名。请参阅
验证 webhook 签名。
响应
返回包含工具结果的 JSON 响应:{"data": "<text>"};
超时和连接失败会作为错误报告给 AI,因此智能体可以致歉并继续,而不会停滞。
Webhook 模式分发
不带endpoint 的工具会作为已签名的 telephony.tool(电话通话)或 web.tool
(网页通话)请求,分发到您组织的旧版 webhook URL。与执行后发送到 webhook 端点的
审计通知不同,此请求就是执行本身——您的 HTTP 响应即为工具结果。
web.tool 使用 origin_domain 替代 from_number /
to_number。请以 JSON 形式返回工具结果——响应约定与直接端点调用相同。与其他所有 webhook 一样,请求会使用组织 webhook 密钥对原始正文进行签名。
已订阅的 webhook 端点还会在每个工具执行后额外收到一条非阻塞的
telephony.tool / web.tool 通知(无论通过哪种路径执行),其中包含工具的响应——适用于审计跟踪。请参阅
事件目录。签名验证
直接工具调用的签名方式与 webhook 相同:- 对精确的请求正文字节计算 HMAC-SHA256(规范化 JSON —— 键已排序,无额外空白字符)
- 使用您组织的 webhook 密钥作为密钥
GET/DELETE工具对空字节字符串签名
示例:完整预约流程
以下是一组用于完整预约系统的工具:最佳实践
编写清晰的描述
编写清晰的描述
description 字段可帮助 AI 理解何时使用该工具。请具体说明其功能及适用场景。妥善处理错误
妥善处理错误
返回 AI 能够理解的错误消息:
{"error": "No slots available for that date"},而非通用的 500 错误。保持响应简洁
保持响应简洁
仅返回 AI 继续对话所需的信息。大型负载会降低响应速度。
合理使用必填字段
合理使用必填字段
仅在确有必要时才将字段标记为
required。AI 会在调用工具前向用户询问必填信息。相关内容
应用连接
由平台管理的 HubSpot、Salesforce、Slack、Google
Calendar、Google Sheets 和 Cal.com 工具,无需端点。
MCP 服务器
连接 MCP 服务器,让智能体调用其工具。
API 连接
可附加到智能体的可复用 REST 集成。
验证 Webhook 签名
用于 Webhook 和工具调用的验证辅助工具。