Install
openclaw skills install @thcjp/call-bridge-freeopenclaw skills install @thcjp/call-bridge-free一款让AI代理拨打美国电话的桥接工具,通过语音AI代理完成拨号、对话与结果返回的全流程。
在许多业务场景中,需要通过电话渠道获取信息或完成事务(如预约、咨询、投诉)。手动拨打电话耗时且效率低下,尤其是需要等待人工接听或处理电话菜单时。本工具通过语音AI代理代为拨打,用户只需提供通话目标与相关信息,代理完成通话后返回结构化结果。
免费版聚焦于单次外呼与基础通话指令构建能力,适合个人开发者验证AI电话代理的可行性。
接口地址:https://api.call-bridge.dev
POST /call接口发起一通美国电话输入: 用户提供单次外呼所需的指令和必要参数。 处理: 解析单次外呼的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回单次外呼的响应数据,包含状态码、结果和日志。
输入: 用户提供通话指令构建所需的指令和必要参数。 处理: 解析通话指令构建的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回通话指令构建的响应数据,包含状态码、结果和日志。
GET /call/{call_id}轮询状态,建议每3秒一次lifecycle = "finalized"表示通话结束outcome(网络结果)、transcript(转写)、recording_url(录音)输入: 用户提供状态轮询所需的指令和必要参数。 处理: 解析状态轮询的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回状态轮询的响应数据,包含状态码、结果和日志。
~/.config/call-bridge/key.json输入: 用户提供API Key管理所需的指令和必要参数。 处理: 解析API Key管理的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回API Key管理的响应数据,包含状态码、结果和日志。
~/.config/call-bridge/key.json输入: 用户提供持久化状态所需的指令和必要参数。 处理: 解析持久化状态的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回持久化状态的响应数据,包含状态码、结果和日志。 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:代理拨打美国电话、的桥接工具、支持单次外呼、任务指令构建与通、话状态轮询、通话桥接免费版是、一款面向独立开发、电话代理工具、通过语音、完成通话后返回转、通话结果与录音链、并将结果结构化返、Use、when、需要代码生成、编程辅助、调试测试、开发部署时使用、不适用于无明确技、术栈的模糊需求、适用于独立开发者、企业团队和自动化、工作流场景等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持。
用户希望了解某商家的营业时间、价格或服务范围,但不想自己打电话。提供商家电话与咨询问题清单,AI代理代为拨打并返回答案。
用户需要预约餐厅或挂号,提供相关信息(时间、人数、姓名等),AI代理代为完成预约流程。
用户希望对比多个商家的报价,AI代理分别拨打各商家电话,收集价格信息后汇总对比。
预计上手时间:约120秒。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| input | string | 是 | 通话桥接免费版处理的输入数据或指令 |
| options | object | 否 | 附加配置选项,如模式选择、格式偏好等 |
| callback_url | string | 否 | 异步处理完成后的回调通知URL |
# 检查是否已有API Key
cat ~/.config/call-bridge/key.json 2>/dev/null || echo "首次使用,将在首次外呼时自动获取Key"
通话指令是代理的"作战简报",应包含:
{
"to": "+15551234567",
"task": "你好,我是为张先生预约的助手。请帮我预约本周六晚上7点两位用餐,姓名是张先生,电话是15559876543。如果周六满座,请询问下一个可用时间。请确认预约成功后告知预约号。"
}
curl -X POST https://api.call-bridge.dev/call \
-H "Content-Type: application/json" \
-H "X-Api-Key: cb_sk_..." \
-d '{
"to": "+15551234567",
"task": "你好,我是为张先生预约的助手。请帮我预约本周六晚上7点两位用餐..."
}'
响应示例:
{
"call_id": "ba645d75-...",
"status": "queued",
"api_key": "cb_sk_..."
}
若响应中包含api_key,立即保存到~/.config/call-bridge/key.json。
# 每3秒轮询一次
curl -H "X-Api-Key: cb_sk_..." \
https://api.call-bridge.dev/call/ba645d75-...
轮询直到lifecycle变为finalized:
{
"call_id": "ba645d75-...",
"lifecycle": "finalized",
"outcome": "answered",
"talk_seconds": 145,
"transcript": "代理:你好,我想预约本周六晚上7点两位用餐...",
"recording_url": "https://..."
}
通话结束后:
outcome确认网络层面的结果transcript了解通话内容{
"api_key": "cb_sk_...",
"user_phone_number": "+15559876543"
}
| 指令要素 | 说明 | 是否必需 |
|---|---|---|
| 身份说明 | 代理为谁拨打、如何自我介绍 | 是 |
| 通话目标 | 希望通过通话达成什么 | 是 |
| 已知事实 | 所有相关的参考信息 | 是 |
| 问题清单 | 需要询问的具体问题 | 是 |
| 备选方案 | 目标无法达成时的替代选择 | 否 |
| 边界条件 | 不应承诺或透露的内容 | 否 |
| 语音信箱处理 | 无人接听或语音信箱的处理方式 | 否 |
| 结果报告 | 需要返回哪些信息 | 是 |
| 选项 | 说明 | 可选值 |
|---|---|---|
voice | 语音音色 | jessica(默认,女)、sarah(女)、chris(男)、eric(男) |
greeting | 开场白 | 简短的开场语 |
| 状态 | 说明 |
|---|---|
queued | 已排队,等待拨号 |
dialing | 正在拨号 |
answered | 已接通 |
finalized | 通话结束 |
+1开头的完整格式~/.config/call-bridge/key.json,设置适当文件权限outcome是网络层面的结果,不代表任务成功transcript判断用户目标是否达成美国电话号码必须使用+1开头的11位格式,如+15551234567。检查号码是否完整、是否包含非数字字符。
外呼请求必须包含to(目标号码)和task(通话指令)两个字段。确保两者都已提供且非空。
API Key错误或已失效。检查~/.config/call-bridge/key.json中的Key是否正确,或重新获取Key。
免费试用额度已用完。新用户可获得10次通话与10分钟通话时长的试用额度。通话达到5秒 talk time才算一次有效试用。
curl -X POST -H "X-Api-Key: cb_sk_..." \
https://api.call-bridge.dev/call/{call_id}/hangup
免费版仅支持单次外呼。如需并行拨打多个电话进行信息比价,请使用专业版。
本免费体验版限制以下高级功能:
解锁全部功能请使用专业版:call-bridge-pro
https://api.call-bridge.dev+1格式电话号码| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| Call Bridge API | API | 必需 | 首次外呼自动获取Key |
| curl/HTTP客户端 | 工具 | 必需 | 操作系统内置 |
| LLM API | API | 必需 | 由Agent内置LLM提供 |
~/.config/call-bridge/key.json600权限,仅所有者可读写| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 配置错误 | 参数缺失或格式错误 | 检查依赖说明中的配置要求 |
| 运行时错误 | 运行环境不满足 | 确认运行环境符合依赖说明 |
| 网络错误 | 连接超时或不可达 | 执行ping命令测试网络连通性,检查防火墙和代理设置连接后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令,参考国内替代方案 |
{
"success": true,
"data": {
"result": "通话桥接免费版处理结果",
"execution_time": "0.5s",
"metadata": {
"version": "1.0",
"processor": "call bridge"
}
},
"execution_log": ["解析输入参数", "执行核心处理", "格式化输出结果"],
"error": null
}