Install
openclaw skills install @thcjp/call-bridgeopenclaw skills install @thcjp/call-bridge输入: 用户提供并行外呼与通话活动所需的指令和必要参数。 处理: 按照skill规范执行并行外呼与通话活动操作,遵循单一意图原则。### 实时转接(live handoff)
bridge_number加入通话,代理负责引导转接处理: 按照skill规范执行实时转接(live handoff)操作,遵循单一意图原则。 输出: 返回实时转接(live handoff)的执行结果,包含操作状态和输出数据。### 呼入号码配置
处理: 按照skill规范执行呼入号码配置操作,遵循单一意图原则。 输出: 返回呼入号码配置的执行结果,包含操作状态和输出数据。### 个性化语音配置
输入: 用户提供个性化语音配置所需的指令和必要参数。 处理: 按照skill规范执行个性化语音配置操作,遵循单一意图原则。 输出: 返回个性化语音配置的执行结果,包含操作状态和输出数据。### 错误处理
action.url与action.sign_in_url输入: 用户提供错误处理所需的指令和必要参数。 处理: 按照skill规范执行错误处理操作,遵循单一意图原则。### 外呼前侦察
输入: 用户提供外呼前侦察所需的指令和必要参数。 输出: 返回外呼前侦察的执行结果,包含操作状态和输出数据。
解析用户指令,执行核心操作并返回处理结果。
输入: 用户提供操作指令和必要参数。
输出: 返回操作执行的结果。
指令解析与执行操作,处理输入数据并返回结果指令解析与执行相关配置参数进行设置处理输入数据,执行转换操作并输出结果。
输入: 用户提供操作指令和必要参数。
输出: 返回操作执行的结果。
数据处理与转换操作,处理输入数据并返回结果数据处理与转换相关配置参数进行设置本skill还覆盖以下能力场景: 企业级、电话代理平台、支持并行外呼、通话活动管理与个、通话桥接专业版是、一款面向团队与企、在免费版单次外呼、基础上、新增并行外呼、通话活动管理、个性化语音配置与、完整错误处理等高、级能力、核心能力、同时拨打、通电话进行信息比、设置来电应答规则、与转接策略、跨通话保持状态。这些能力在上述核心功能中均有对应处理逻辑。
用户希望对比4家餐厅的价格与可用时段。专业版并行拨打4通外呼,每通通话指令明确"仅收集信息不承诺预订"。4通通话结束后汇总对比,用户选择最优方案后再发起确认预订的通话。
用户需要与银行协商账户问题,涉及身份验证与敏感决策。代理先拨打银行,处理电话菜单与等待,到达人工客服后触发转接,将用户桥接到通话中。用户直接与客服对话,代理退出。
用户拥有一个预留号码,希望所有来电由AI代理先接听。代理收集来电者姓名、事由,判断是否需要转接给用户。常规咨询由代理直接应答,紧急事务转接到用户手机。
代理首次拨打商家时对方要求提供订单号,用户当时未提供。代理记录阻断点与缺失信息,用户补充后代理发起跟进通话,通话指令中包含上一次的转写文本,代理自然衔接"上次提到需要提供订单号,现在订单号是..."。
用户希望代理以"李总的助理"身份外呼,语气专业但不过于正式,遇到付款请求时必须先询问用户。通过个性化配置定义身份、语气与决策边界,所有外呼自动应用。
预计上手时间:约180秒。
# 检查已有配置
cat ~/.config/call-bridge/key.json
curl -X PUT https://api.call-bridge.dev/me/call-preferences \
-H "Content-Type: application/json" \
-H "X-Api-Key: cb_sk_..." \
-d '{
"voice": "jessica",
"personality": "你是李总的助理,语气专业但友善。遇到付款、承诺或敏感决策时,必须先询问用户。不要代替用户做出财务承诺。",
"greeting": "您好,我是李总的助理。"
}'
# 同时拨打3家餐厅比价
for restaurant in "rest1_phone" "rest2_phone" "rest3_phone"; do
curl -X POST https://api.call-bridge.dev/call \
-H "Content-Type: application/json" \
-H "X-Api-Key: cb_sk_..." \
-d "{
\"to\": \"$restaurant\",
\"task\": \"你好,我想了解本周六晚上7点两位用餐的可用时段与套餐价格。仅收集信息,不要预订。请询问:1)是否有包间 2)最低消费 3)是否需要预付定金。请报告完整信息。\"
}" &
done
wait
curl -X POST https://api.call-bridge.dev/call \
-H "Content-Type: application/json" \
-H "X-Api-Key: cb_sk_..." \
-d '{
"to": "+1555bankphone",
"bridge_number": "+1555userphone",
"task": "你好,我需要协助处理账户问题。请帮我转接到人工客服。处理电话菜单时选择'账户问题'。等待时请不要挂断。一旦接通人工客服,请告知对方您正在连接客户,然后将客户桥接到通话中。"
}'
# 查看当前呼入配置
curl -H "X-Api-Key: cb_sk_..." \
https://api.call-bridge.dev/me/call-preferences
# 更新呼入配置
curl -X PUT https://api.call-bridge.dev/me/call-preferences \
-H "Content-Type: application/json" \
-H "X-Api-Key: cb_sk_..." \
-d '{
"voice": "jessica",
"personality": "专业友善的助理",
"greeting": "您好,请问我能帮您什么?",
"inbound": {
"instructions": "接听来电时,先询问对方姓名与来意。常规咨询直接应答。紧急事务请告知对方将转接,然后桥接到用户号码。",
"greeting": "您好,这里是李总办公室。",
"handoff_number": "+1555userphone"
}
}'
# 查看最近的呼入通话
curl -H "X-Api-Key: cb_sk_..." \
"https://api.call-bridge.dev/me/calls?direction=inbound&limit=25"
-Api-Key: 命令参数,用于指定操作选项-H: 命令参数,用于指定操作选项-X: 命令参数,用于指定操作选项-Type: 命令参数,用于指定操作选项-comparison-2024-03: 命令参数,用于指定操作选项结果处理: 执行完成后,查看输出结果确认操作状态。成功时输出包含处理摘要和结果数据;失败时根据错误信息排查问题,参考错误处理章节获取恢复步骤。
-Type: 命令参数,用于指定操作选项-H: 命令参数,用于指定操作选项-X: 命令参数,用于指定操作选项-Api-Key: 命令参数,用于指定操作选项-Api-Key: 命令参数,用于指定操作选项-X: 命令参数,用于指定操作选项-Type: 命令参数,用于指定操作选项-H: 命令参数,用于指定操作选项-Type: 命令参数,用于指定操作选项-Api-Key: 命令参数,用于指定操作选项-H: 命令参数,用于指定操作选项-X: 命令参数,用于指定操作选项-Type: 命令参数,用于指定操作选项-H: 命令参数,用于指定操作选项-Api-Key: 命令参数,用于指定操作选项-X: 命令参数,用于指定操作选项-X: 命令参数,用于指定操作选项-Api-Key: 命令参数,用于指定操作选项-H: 命令参数,用于指定操作选项-Type: 命令参数,用于指定操作选项-Api-Key: 命令参数,用于指定操作选项-Type: 命令参数,用于指定操作选项-H: 命令参数,用于指定操作选项-X: 命令参数,用于指定操作选项-Api-Key: 命令参数,用于指定操作选项-Type: 命令参数,用于指定操作选项-H: 命令参数,用于指定操作选项-X: 命令参数,用于指定操作选项-H: 命令参数,用于指定操作选项-X: 命令参数,用于指定操作选项-Api-Key: 命令参数,用于指定操作选项-Type: 命令参数,用于指定操作选项| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| content | string | 是 | 相关说明 |
| content | string | 否 | 相关说明, 默认: 全部维度 |
| strict_level | string | 否 | 审查严格度, 可选: strict/normal/loose, 默认: normal |
{
"success": true,
"data": {
"overall_grade": "A",
"total_score": 92,
"max_score": 100,
"summary": "处理完成",
"details": [
{
"item": "代码风格",
"status": "pass",
"score": 95,
"comment": "符合规范"
},
{
"item": "安全合规",
"status": "warn",
"score": 80,
"comment": "符合规范"
}
],
"improvements": [
{
"priority": "high",
"suggestion": "建议优化",
"expected_gain": "+5分"
},
{
"priority": "medium",
"suggestion": "建议优化",
"expected_gain": "+3分"
}
]
},
"error": null
}
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 待审查内容为空 | 用户未提供内容 | 提示用户提供待审查的代码 |
| 内容格式不识别 | 传入不支持的内容格式 | 列出支持的格式, 建议转换后重试 |
| 检查项超出范围 | 传入了不存在的检查维度 | 列出可用检查维度, 使用默认全部检查 |
| 审查超时 | 内容过长导致处理超时 | 建议分段审查, 每段不超过5000字 |
| 其他异常 | 内部处理异常 | 检查输入后重试 |
https://api.call-bridge.dev+1格式电话号码| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| Call Bridge API | API | 必需 | 首次外呼自动获取Key |
| curl/HTTP客户端 | 工具 | 必需 | 操作系统内置 |
| 预留号码 | 通信资源 | 可选 | Call Bridge平台购买 |
| LLM API | API | 必需 | 由Agent内置LLM提供 |
呼入功能需要预留号码与对应服务套餐,外呼功能无需额外资源。
~/.config/call-bridge/key.jsonhttps://call-bridge.dev/sign-in?token=<api_key>关联账户600权限,仅所有者可读写| 字段 | 说明 | 适用范围 |
|---|---|---|
voice | 语音音色 | 外呼+呼入 |
personality | 代理风格与行为边界 | 外呼+呼入 |
greeting | 外呼开场白 | 外呼 |
inbound.instructions | 呼入应答指令 | 呼入 |
inbound.greeting | 呼入问候语 | 呼入 |
inbound.handoff_number | 呼入转接号码 | 呼入 |
| 场景 | 是否可并行 | 条件 |
|---|---|---|
| 信息比价(餐厅、供应商) | 可以 | 仅收集信息,不承诺 |
| 预约可用时段查询 | 可以 | 不预订,仅询问 |
| 库存检查 | 可以 | 不下单,仅查询 |
| 预订/购买/取消 | 不可以 | 需用户明确批准 |
| 付款/审批 | 不可以 | 需实时转接 |
| 错误码 | 含义 | 处理方式 |
|---|---|---|
invalid_phone | 电话号码无效 | 要求用户提供有效+1格式号码 |
missing_fields | 缺少必填字段 | 补充to与task字段 |
auth_required | 需要认证 | 获取有效Key或使用返回的认证URL |
invalid_api_key | Key无效 | 替换为有效Key |
quota_exceeded | 配额用尽 | 引导用户查看套餐与余额 |
trial_exhausted | 试用耗尽 | 引导升级套餐 |
plan_required | 需要套餐 | 引导用户购买对应套餐 |
balance_depleted | 余额不足 | 引导用户充值 |
number_pool_exhausted | 号码池耗尽 | 静默重试一次 |
dial_failed | 拨号失败 | 静默重试一次 |
network_error | 网络错误 | 静默重试一次 |
reserved_number_required | 需要预留号码 | 引导用户开通预留号码服务 |
inbound_plan_required | 需要呼入套餐 | 引导用户升级到支持呼入的套餐 |
invalid_preferences | 偏好配置无效 | 修正voice为合法值 |
invalid_profile | 呼入配置无效 | 补充呼入instructions或greeting |
invalid_handoff_number | 转接号码无效 | 提供非本平台的外部可达号码 |
{
"campaign_id": "restaurant-comparison-2024-03",
"calls": [
{
"target": "+1555rest1",
"purpose": "查询周六晚餐价格与可用时段",
"known_facts": "两位用餐,周六晚7点",
"constraints": "仅收集信息不预订",
"result": "有包间,最低消费500,无需定金",
"blocker": null,
"next_action": "等待用户决策"
}
]
}
并行数量建议不超过4通,且仅用于信息收集。每通通话指令必须明确"不承诺"。若被风控,降低并行数或改为串行。
不会。转接后代理退出通话,后续对话为用户与对方的私密沟通。转接前的对话记录在转写文本中。
需要三项:账户关联的API Key、活跃的预留号码、对应的呼入服务套餐。缺少任一项配置会返回reserved_number_required或inbound_plan_required。
先GET /me/call-preferences获取当前外呼配置,然后在PUT请求中保留voice/personality/greeting,将inbound设为null。
将活动状态序列化为JSON存储在本地文件中。每次发起跟进通话时读取状态,将上一次转写文本包含在新的通话指令中。
不能是本平台的预留号码,不能是本平台拥有的号码。必须是外部可达的真实号码。已保存的用户电话号码可作为默认handoff_number。
使用GET /me/calls?direction=inbound&since={ISO时间戳}&limit=25。建议每30分钟轮询一次,时间窗口重叠以避免遗漏,按通话id去重。since按通话结束时间过滤。
新用户获得10次通话与10分钟通话时长的试用额度,以先到者为准。通话达到5秒talk time才算一次有效试用。试用额度用完后需升级套餐。
outcome与任务成功的关系?outcome是电话网络层面的结果(如answered表示接通),不代表任务成功。已接通的通话仍可能未达成用户目标。必须阅读transcript判断。
加载已保存的API Key,生成登录链接:https://call-bridge.dev/sign-in?token=<api_key>。不要为账户关联创建新Key,需先完成至少一次外呼后才有Key可关联。