Appearance
在OpenClaw中使用ElevenLabs进行语音合成(TTS)、批量语音转文字(Scribe v2)和流式转录(Scribe v2 Realtime)。设置环境变量 ELEVENLABS_API_KEY 即可开始使用,默认TTS模型为 eleven_multilingual_v2,STT模型为 scribe_v2。流式转录需额外配置 voice-call 或 google-meet 插件的 streaming 块。Discord语音频道使用ElevenLabs流式TTS端点,播放延迟更低。
ElevenLabs TTS和STT配置步骤|在OpenClaw中设置语音合成与转录
OpenClaw使用ElevenLabs服务实现以下三种能力:
| 能力 | OpenClaw 使用场景 | 默认模型 |
|---|---|---|
| 文本转语音 (TTS) | messages.tts / talk | eleven_multilingual_v2 |
| 批量语音转文字 | tools.media.audio | scribe_v2 |
| 流式语音转文字 | Voice Call 流式或 Google Meet realtime.transcriptionProvider | scribe_v2_realtime |
认证设置
在环境变量中设置 ELEVENLABS_API_KEY。为了兼容已有 ElevenLabs 工具,XI_API_KEY 也可作为备用变量名。
bash
export ELEVENLABS_API_KEY="你的 API 密钥"怎么配置文本转语音
在网关配置的 messages.tts 块中启用 ElevenLabs 作为 TTS 提供者:
json5
{
messages: {
tts: {
providers: {
elevenlabs: {
apiKey: "${ELEVENLABS_API_KEY}",
voiceId: "pMsXgVXv3BLzUgSXRplE",
modelId: "eleven_multilingual_v2",
},
},
},
},
}将 modelId 设为 eleven_v3 可以使用 ElevenLabs v3 TTS。OpenClaw 保持 eleven_multilingual_v2 作为已有安装的默认模型。
当 ElevenLabs 被选为 voice.tts / messages.tts 提供者时,Discord 语音频道会使用 ElevenLabs 的流式 TTS 端点。播放从返回的音频流直接开始,无需 OpenClaw 先下载完整音频文件再播放。
latencyTier 参数映射到 ElevenLabs 的 optimize_streaming_latency 查询参数(对支持该参数的模型有效);OpenClaw 会为 eleven_v3 模型省略此参数,因为该模型不接受它。
怎么配置语音转文字
对进入的音频附件和短录音片段,使用 Scribe v2:
json5
{
tools: {
media: {
audio: {
enabled: true,
models: [{ provider: "elevenlabs", model: "scribe_v2" }],
},
},
},
}OpenClaw 将 multipart 音频发送到 ElevenLabs /v1/speech-to-text 端点,附带 model_id: "scribe_v2"。语言提示会映射到 language_code 参数。
怎么配置流式语音转文字
内置的 elevenlabs 插件为 Voice Call 和 Google Meet 智能体模式的流式转录注册了 Scribe v2 Realtime。
| 设置项 | 配置路径 | 默认值 |
|---|---|---|
| API 密钥 | plugins.entries.voice-call.config.streaming.providers.elevenlabs.apiKey | 回退到 ELEVENLABS_API_KEY / XI_API_KEY |
| 模型 | ...elevenlabs.modelId | scribe_v2_realtime |
| 音频格式 | ...elevenlabs.audioFormat | ulaw_8000 |
| 采样率 | ...elevenlabs.sampleRate | 8000 |
| 提交策略 | ...elevenlabs.commitStrategy | vad |
| 语言 | ...elevenlabs.languageCode | (未设置) |
json5
{
plugins: {
entries: {
"voice-call": {
config: {
streaming: {
enabled: true,
provider: "elevenlabs",
providers: {
elevenlabs: {
apiKey: "${ELEVENLABS_API_KEY}",
audioFormat: "ulaw_8000",
commitStrategy: "vad",
languageCode: "en",
},
},
},
},
},
},
},
}Voice Call 从 Twilio 接收 8 kHz G.711 u-law 音频。ElevenLabs 流式提供者默认使用 ulaw_8000,因此电话帧可以直接转发,无需转码。
对于 Google Meet 智能体模式,将 plugins.entries.google-meet.config.realtime.transcriptionProvider 设为 "elevenlabs",并在 plugins.entries.google-meet.config.realtime.providers.elevenlabs 下配置相同的提供者块。
常见问题
配置了 ELEVENLABS_API_KEY 但 ElevenLabs TTS 不生效,怎么排查?
检查环境变量是否在 OpenClaw 进程启动前正确导出。确认 messages.tts 或 voice.tts 配置块中的 providers.elevenlabs 对象存在且 apiKey 引用了环境变量。验证 API 密钥有效:在命令行运行 curl -H "xi-api-key: $ELEVENLABS_API_KEY" "https://api.elevenlabs.io/v1/voices" 应返回 200 和语音列表。
流式转录延迟很高,可以调整吗?
可以。在 streaming.providers.elevenlabs 中设置 latencyTier 参数(对于支持该参数的模型)。注意 eleven_v3 模型不接受该参数,OpenClaw 会自动省略。如果使用 Voice Call,检查 Twilio 侧的媒体流延迟。
ElevenLabs Scribe 能自动检测语言吗?
可以,但需明确设置。在 tools.media.audio.models 配置或流式转录的 languageCode 中留空即可让 ElevenLabs 自动检测。留空 languageCode 会增加转录延迟,且返回的文本语言可能不稳定。