语音通话插件
Voice Call Plugin(语音通话插件)为 OpenClaw Agent 提供实时语音对话能力。用户可通过电话或 WebRTC 与 Agent 进行语音交互。
支持的服务商
| 服务商 | 协议 | 特性 |
|---|---|---|
| Twilio | PSTN / SIP | 全球电话网络、录音、IVR |
| Daily.co | WebRTC | 低延迟、浏览器原生支持 |
扩展性
插件架构支持自定义 Provider 适配器,可对接其他 VoIP 服务。
安装
bash
openclaw plugins install @openclaw/voice-call配置
在 openclaw.config.yaml 中配置语音通话插件:
yaml
plugins:
- name: '@openclaw/voice-call'
enabled: true
config:
# 服务商选择
provider: twilio # 或 daily
# Twilio 配置
twilio:
accountSid: 'AC_YOUR_ACCOUNT_SID'
authToken: 'YOUR_AUTH_TOKEN'
phoneNumber: '+1234567890'
# Daily.co 配置
daily:
apiKey: 'YOUR_DAILY_API_KEY'
roomPrefix: 'openclaw-'
# 音频设置
audio:
sampleRate: 16000
channels: 1
codec: 'opus' # opus | pcmu | pcma
vadEnabled: true # Voice Activity Detection(语音活动检测)
silenceTimeout: 3000 # 静默超时(毫秒)
# STT/TTS 配置
stt:
provider: 'whisper' # whisper | google | azure
language: 'zh-CN'
tts:
provider: 'openai' # openai | azure | elevenlabs
voice: 'alloy'凭据安全
不要将 accountSid、authToken 等敏感信息直接写入配置文件。请使用环境变量:
yaml
twilio:
accountSid: ${TWILIO_ACCOUNT_SID}
authToken: ${TWILIO_AUTH_TOKEN}通话流程
发起 (Initiate)
│
▼
连接 (Connect) ← 建立 WebRTC/PSTN 连接
│
▼
流式处理 (Stream) ← 实时语音 → STT → Agent → TTS → 语音
│
▼
结束 (End) ← 挂断或超时流式处理详情
- 用户语音通过 STT(Speech-to-Text,语音转文字)转为文本
- 文本作为消息发送给 Agent
- Agent 回复通过 TTS(Text-to-Speech,文字转语音)转为语音
- 语音流式传输给用户
通话控制功能
保持与恢复
typescript
// Agent 可在对话中使用工具控制通话
await context.tools.call('voice_hold', {
holdMusic: 'default' // 播放等待音乐
})
await context.tools.call('voice_resume')呼叫转接
typescript
await context.tools.call('voice_transfer', {
target: '+1987654321', // 转接目标号码
announce: true // 转接前播放提示
})通话录音
yaml
# 在配置中启用录音
config:
recording:
enabled: true
format: 'wav'
storePath: './recordings'
autoTranscribe: true # 自动生成文字记录Agent 集成
在 AGENTS.md 中启用语音工具:
markdown
## Tools
- voice_hold: allow
- voice_resume: allow
- voice_transfer: ask # 转接需用户确认
- voice_hangup: ask # 挂断需用户确认
## Instructions
当用户请求转接人工客服时,使用 voice_transfer 工具。
通话结束后生成通话摘要。事件监听
typescript
gateway.on('voice:call:start', (event) => {
console.log(`通话开始: ${event.callId}`)
})
gateway.on('voice:call:end', (event) => {
console.log(`通话结束: 时长 ${event.duration}s`)
})🇨🇳 中国用户须知
- 国内语音通话建议使用阿里云语音服务或腾讯云实时音视频(TRTC)
- STT 推荐使用讯飞语音识别或百度语音,中文识别率更高
- TTS 推荐使用讯飞语音合成,支持多种中文音色
- 国内电话号码接入需要完成 ICP 备案和电信增值业务许可
- 配置
stt.language为zh-CN以获得最佳中文识别效果
