本页内容
本页内容
插件指南
语音通话配置
插件配置键、调用所有者、完整配置参考表和会话范围。 语音通话插件指南的一部分。
配置
如果 enabled: true 但所选提供商缺少凭据,Gateway 启动时会记录一条 setup-incomplete 警告,指出缺失的键,并跳过运行时启动。命令、RPC 调用和代理工具在使用时仍会返回精确缺失的配置。
选择呼叫所有者
通过配置一名代理,语音呼叫会自动使用该代理。对于多个代理,将 plugins.entries.voice-call.config.agentId 设置为预期响应和会话所有者。 main 是普通代理 ID,不是多代理舰队的后备。每个号码的路由可能会为呼入呼叫选择不同的座席,但不会替换插件的启动所有者。
如果启动报告语音呼叫没有明确的所有者,请使用 openclaw agents list 列出您的座席,设置现有的 agentId 字段,然后重新运行 openclaw voicecall setup。使用默认的混合重新加载模式,配置更改会自动重新加载插件;请参阅 热重载 。保留现有的旧默认代理选择;新的多代理设置应使用显式所有者。请参见代理配置。
配置参考
plugins.entries.voice-call.config 下未在上面显示的顶层键:
| 键 | 默认值 | 笔记 |
|---|---|---|
enabled |
false |
主控on/off开关。 |
inboundPolicy |
"disabled" |
disabled | allowlist | pairing | open。请参阅 入站呼叫 。 |
allowFrom |
[] |
用于 inboundPolicy: "allowlist" 的 E.164 格式允许列表。 |
callbacks |
已禁用 | 仅接受实时呼叫的最近出站收件人;经典STT/TTS仍适用入站策略。 |
maxDurationSeconds |
300 |
单次通话的硬性时长上限,无论是否已接听都会强制执行。 |
staleCallReaperSeconds |
120 |
请参阅 Stale 调用 reaper。 0 禁用它。 |
silenceTimeoutMs |
800 |
经典流程(非实时)中的语音结束静音检测时长。 |
transcriptTimeoutMs |
180000 |
等待呼叫者转写结果的最长时间,超时后放弃当前轮次。 |
ringTimeoutMs |
30000 |
出站通话的响铃超时时间。 |
maxConcurrentCalls |
1 |
超出此限制的出站通话会被拒绝。 |
outbound.notifyHangupDelaySec |
3 |
通知模式下,TTS 播放完毕后等待自动挂断的秒数。 |
skipSignatureVerification |
false |
仅用于本地测试;切勿在生产环境中启用。 |
store |
未设置 | 覆盖默认的 $OPENCLAW_STATE_DIR/voice-calls 路径(通常为 ~/.openclaw/voice-calls)。 |
agentId |
独家代理 | 用于响应生成和会话存储的代理。使用多个代理显式设置。 |
responseModel |
未设置 | 覆盖经典响应(非实时)使用的默认模型。 |
responseSystemPrompt |
生成 | 经典响应使用的自定义系统提示词。 |
responseTimeoutMs |
30000 |
经典响应生成超时时间(毫秒)。 |
Twilio 默认为其 US1 REST 端点。要处理受支持的非 US 区域中的呼叫,请将 twilio.region 设置为 ie1 或 au1 并使用来自该区域的凭证。请参阅 Twilio 的非 US REST API 指南。
Twilio 语音邮件检测调整
设置 voicemail.detection: "twilio" 以启用答录机检测。这些可选的 voicemail 键可调整 Twilio 对出站呼叫的检测:
| 键 | 默认值 | 允许范围 |
|---|---|---|
machineDetectionSpeechThresholdMs |
6000 |
1000–6000 ms |
machineDetectionSpeechEndThresholdMs |
1200 |
500–5000 ms |
machineDetectionSilenceTimeoutMs |
5000 |
2000–10000 ms |
machineDetectionTimeoutMs |
30000 |
3000–59000 ms,以 1000 的倍数表示 |
语音阈值默认为 Twilio 的最大值六秒,以减少健谈的人类和较长的商务问候语的错误机器结果。 Twilio自己的默认是2400 ms。较高的阈值也会延迟机器检测;它无法可靠地对说话不停顿三十秒的人进行分类。跨代表性问候语和载体进行调整。
其他默认值匹配 Twilio。所有值都是以毫秒为单位的整数;该插件将 machineDetectionTimeoutMs 转换为调用 API 的 MachineDetectionTimeout 的整秒。其他三个值以毫秒为单位传递。允许的范围遵循 Twilio 的 AMD 调整参考 及其 无效检测配置错误 。
提供商暴露和安全说明
- Twilio、Telnyx 和 Plivo 都需要一个可公开访问的 webhook URL。
mock是本地开发提供商(不进行网络调用)。- Telnyx 需要
telnyx.publicKey(或TELNYX_PUBLIC_KEY),除非skipSignatureVerification为 true。 skipSignatureVerification仅用于本地测试。- 在 ngrok 免费套餐下,请将
publicUrl设置为精确的 ngrok URL;始终会强制进行签名验证。 - 当
tunnel.provider="ngrok"和serve.bind是环回(ngrok 本地代理)时,tunnel.allowNgrokFreeTierLoopbackBypass: true信任来自环回请求的转发标头。这重建了用于签名的公共URL;仍然需要有效的 Twilio 签名。 - Ngrok 免费层 URL 可以更改或添加插页式行为;如果
publicUrl漂移,则 Twilio 签名失败。生产:更喜欢稳定的域或 Tailscale 漏斗。 - 当启用该音频模式时,Tailscale 服务和漏斗会自动公开实时或流式 WebSocket 路径。
tailscale.port为tailscale.mode和统一tunnel.provider: "tailscale-serve" | "tailscale-funnel"选择外部 HTTPS 端口。默认为443;当另一个 HTTPS 服务器拥有端口 443 时,请使用8443。Funnel 仅接受443、8443或10000,而 Serve 接受任何有效的 TCP 端口。非默认端口出现在 Webhook 和实时流 URL 中。
流媒体连接上限
streaming.preStartTimeoutMs(默认5000)会关闭从未发送有效start帧的 socket。streaming.maxPendingConnections(默认32)限制未认证、未开始的 socket 总数。streaming.maxPendingConnectionsPerIp(默认4)限制每个源 IP 的未认证、未开始 socket 数。streaming.maxConnections(默认128)限制所有打开的媒体流 socket(待处理 + 活跃)。
旧版配置迁移
语音呼叫接受当前的配置形状。不再包括 2026 年 7 月之前停用的形状的迁移。使用这些替换手动更新旧配置,保留任何现有的当前值:
provider: "log"→provider: "mock"twilio.from→fromNumberstreaming.sttProvider→streaming.providerstreaming.openaiApiKey→streaming.providers.openai.apiKeystreaming.sttModel→streaming.providers.openai.modelstreaming.silenceDurationMs→streaming.providers.openai.silenceDurationMsstreaming.vadThreshold→streaming.providers.openai.vadThresholdrealtime.agentContext.includeSystemPrompt已删除。具有共享上下文解析器的主机始终包含代理上下文指导;realtime.agentContext控制可选的配置身份和配置文件。支持的旧主机保留其可选的有界上下文胶囊。请参阅 座席语音上下文 。
会话范围
默认情况下,Voice Call 使用 sessionScope: "per-phone",因此来自同一来电者的重复通话会保留对话记忆。若每个运营商通话都应以新的上下文开始, 例如接待、预订、IVR,或 Google Meet bridge 流程中同一电话号码可能代表不同会议时,请设置为 sessionScope: "per-call"。
当核心 session.scope 为 "global" 时,设置 sessionScope: "main" 将每个呼叫路由到已配置座席的主会话 agent:<agentId>:main 或 global。自定义核心 session.mainKey 值将被忽略。原始呼叫轮流然后与代理的主会话共享历史记录,因此仅当共享上下文是有意的时才使用此功能。
对于 per-phone 和 per-call,语音呼叫将生成的会话密钥存储在配置的座席命名空间 (agent:<agentId>:voice:*) 下。原始显式集成密钥解析为相同的命名空间:规范化的 agent:<configuredAgentId>:* 密钥保留该所有者并尊重核心 main-session/global-scope 别名;外部或格式错误的 agent:* 输入在配置的代理下被视为不透明密钥; global 和 unknown 仍然是全球哨兵。