chore(i18n): refresh zh-CN translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-26 05:17:30 +00:00
parent bbb1bf65b8
commit 9576fac075

View File

@ -3,18 +3,19 @@ read_when:
- 为回复启用文本转语音
- 配置 TTS 提供商、回退链或角色
- 使用 /tts 命令或指令
summary: 用于外发回复的文本转语音——提供商、角色、斜杠命令,以及按渠道区分的输出
sidebarTitle: Text to speech (TTS)
summary: 用于外发回复的文本转语音——提供商、角色、斜杠命令,以及按渠道划分的输出
title: 文本转语音
x-i18n:
generated_at: "2026-04-26T05:12:12Z"
generated_at: "2026-04-26T05:15:03Z"
model: gpt-5.4
provider: openai
source_hash: 6ac6e57ca49252cb4b500936600ec29c12011fbec0f61d928b8fb1c38b662bc1
source_hash: 501d719feaea7d72726b8eaa19f0b0942ccf68f82065912a59b50351ea4ffbb7
source_path: tools/tts.md
workflow: 15
---
OpenClaw 可以将外发回复转换为音频,支持 **13 个语音提供商**,并可在 Feishu、Matrix、Telegram 和 WhatsApp 上发送原生语音消息,在其他所有地方发送音频附件,以及为电话和 Talk 提供 PCM/Ulaw 流。
OpenClaw 可以将外发回复转换为音频,覆盖 **13 个语音提供商**,并在 Feishu、Matrix、Telegram 和 WhatsApp 上发送原生语音消息,在其他所有地方发送音频附件,以及为电话和 Talk 提供 PCM/Ulaw 流。
## 快速开始
@ -23,7 +24,7 @@ OpenClaw 可以将外发回复转换为音频,支持 **13 个语音提供商**
OpenAI 和 ElevenLabs 是最可靠的托管选项。Microsoft 和 Local CLI 无需 API 密钥即可使用。完整列表请参见[提供商矩阵](#supported-providers)。
</Step>
<Step title="设置 API 密钥">
导出你的提供商所需的环境变量(例如 `OPENAI_API_KEY`、`ELEVENLABS_API_KEY`。Microsoft 和 Local CLI 不需要密钥。
为你的提供商导出对应的环境变量(例如 `OPENAI_API_KEY`、`ELEVENLABS_API_KEY`。Microsoft 和 Local CLI 不需要密钥。
</Step>
<Step title="在配置中启用">
设置 `messages.tts.auto: "always"``messages.tts.provider`
@ -46,37 +47,37 @@ OpenClaw 可以将外发回复转换为音频,支持 **13 个语音提供商**
</Steps>
<Note>
Auto-TTS 默认**关闭**。当未设置 `messages.tts.provider`OpenClaw 会按注册表自动选择顺序选取第一个已配置的提供商。
默认情况下,自动 TTS **关闭**。当未设置 `messages.tts.provider`OpenClaw 会按注册表自动选择顺序选取第一个已配置的提供商。
</Note>
## 支持的提供商
| 提供商 | 认证 | 说明 |
| ----------------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| **Azure Speech** | `AZURE_SPEECH_KEY` + `AZURE_SPEECH_REGION`(也支持 `AZURE_SPEECH_API_KEY`、`SPEECH_KEY`、`SPEECH_REGION` | 原生 Ogg/Opus 语音消息输出和电话支持。 |
| **ElevenLabs** | `ELEVENLABS_API_KEY``XI_API_KEY` | 支持声音克隆、多语言,并可通过 `seed` 实现确定性输出。 |
| **Google Gemini** | `GEMINI_API_KEY``GOOGLE_API_KEY` | Gemini API TTS通过 `promptTemplate: "audio-profile-v1"` 感知角色。 |
| **Gradium** | `GRADIUM_API_KEY` | 支持语音消息和电话输出。 |
| **Inworld** | `INWORLD_API_KEY` | 流式 TTS API。支持原生 Opus 语音消息和 PCM 电话。 |
| **Azure Speech** | `AZURE_SPEECH_KEY` + `AZURE_SPEECH_REGION`(也支持 `AZURE_SPEECH_API_KEY`、`SPEECH_KEY`、`SPEECH_REGION` | 原生 Ogg/Opus 语音便笺输出和电话支持。 |
| **ElevenLabs** | `ELEVENLABS_API_KEY``XI_API_KEY` | 音克隆、多语言,并可通过 `seed` 实现确定性输出。 |
| **Google Gemini** | `GEMINI_API_KEY``GOOGLE_API_KEY` | Gemini API TTS通过 `promptTemplate: "audio-profile-v1"` 感知角色。 |
| **Gradium** | `GRADIUM_API_KEY` | 语音便笺和电话输出。 |
| **Inworld** | `INWORLD_API_KEY` | 流式 TTS API。原生 Opus 语音便笺和 PCM 电话支持。 |
| **Local CLI** | 无 | 运行已配置的本地 TTS 命令。 |
| **Microsoft** | 无 | 通过 `node-edge-tts` 使用公开的 Edge 神经网络 TTS。尽力而为 SLA。 |
| **Microsoft** | 无 | 通过 `node-edge-tts` 使用公开的 Edge 神经网络 TTS。尽力而为不提供 SLA。 |
| **MiniMax** | `MINIMAX_API_KEY`(或 Token Plan`MINIMAX_OAUTH_TOKEN`、`MINIMAX_CODE_PLAN_KEY`、`MINIMAX_CODING_API_KEY` | T2A v2 API。默认使用 `speech-2.8-hd`。 |
| **OpenAI** | `OPENAI_API_KEY` | 也用于自动摘要;支持角色 `instructions`。 |
| **OpenRouter** | `OPENROUTER_API_KEY`(可复用 `models.providers.openrouter.apiKey` | 默认模型为 `hexgrad/kokoro-82m`。 |
| **Volcengine** | `VOLCENGINE_TTS_API_KEY``BYTEPLUS_SEED_SPEECH_API_KEY`(旧版 AppID/token`VOLCENGINE_TTS_APPID`/`_TOKEN` | BytePlus Seed Speech HTTP API。 |
| **Vydra** | `VYDRA_API_KEY` | 共享的图像、视频和语音提供商。 |
| **xAI** | `XAI_API_KEY` | xAI 批量 TTS。**不**支持原生 Opus 语音消息。 |
| **Xiaomi MiMo** | `XIAOMI_API_KEY` | 通过 Xiaomi chat completions 提供 MiMo TTS。 |
| **xAI** | `XAI_API_KEY` | xAI 批量 TTS。**不**支持原生 Opus 语音便笺。 |
| **Xiaomi MiMo** | `XIAOMI_API_KEY` | 通过 Xiaomi 聊天补全实现的 MiMo TTS。 |
如果配置了多个提供商,将优先使用所选提供商,其他提供商作为回退选项。自动摘要使用 `summaryModel`(或 `agents.defaults.model.primary`),因此如果你保持摘要启用状态,对应提供商也必须完成认证。
如果配置了多个提供商,会优先使用所选提供商,其余提供商作为回退选项。自动摘要使用 `summaryModel`(或 `agents.defaults.model.primary`),因此如果你保持摘要启用状态,提供商也必须完成认证。
<Warning>
内置的 **Microsoft** 提供商通过 `node-edge-tts` 使用 Microsoft Edge 的在线神经网络 TTS 服务。它是一个公开的 Web 服务,没有公开的 SLA 或配额——请将其视为尽力而为服务。旧版提供商 id `edge` 会被规范化为 `microsoft`,并且 `openclaw doctor --fix` 会重写已持久化的配置;新配置应始终使用 `microsoft`
内置的 **Microsoft** 提供商通过 `node-edge-tts` 使用 Microsoft Edge 的在线神经网络 TTS 服务。这是一个公开的网络服务,没有公开发布的 SLA 或配额——请将其视为尽力而为。旧版提供商 id `edge` 会被标准化为 `microsoft`,而 `openclaw doctor --fix` 会重写持久化配置;新配置应始终使用 `microsoft`
</Warning>
## 配置
TTS 配置位于 `~/.openclaw/openclaw.json` `messages.tts` 下。选择一个预设并调整对应的提供商块:
TTS 配置位于 `~/.openclaw/openclaw.json``messages.tts` 下。选择一个预设并调整对应的提供商配置块:
<Tabs>
<Tab title="Azure Speech">
@ -133,7 +134,7 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
model: "gemini-3.1-flash-tts-preview",
voiceName: "Kore",
// 可选的自然语言风格提示:
// audioProfile: "以平静、播客主持人的语气说话。",
// audioProfile: "Speak in a calm, podcast-host tone.",
// speakerName: "Alex",
},
},
@ -356,7 +357,7 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
### 按智能体覆盖语音设置
当某个智能体需要使用不同的提供商、声音、模型、角色或 Auto-TTS 模式时,请使用 `agents.list[].tts`。该智能体块会在 `messages.tts` 之上执行深度合并,因此提供商凭证可以保留在全局提供商配置中:
当某个智能体需要使用不同的提供商、语音、模型、角色或自动 TTS 模式时,请使用 `agents.list[].tts`。智能体配置块会在 `messages.tts` 之上进行深度合并,因此提供商凭证可以保留在全局提供商配置中:
```json5
{
@ -384,7 +385,7 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
}
```
要固定某个智能体生效的角色,请在提供商配置旁设置 `agents.list[].tts.persona`——它只会覆盖该智能体的全局 `messages.tts.persona`
要固定某个智能体的专属角色,请在提供商配置旁设置 `agents.list[].tts.persona`——它只会覆盖该智能体的全局 `messages.tts.persona`
自动回复、`/tts audio`、`/tts status` 以及 `tts` 智能体工具的优先级顺序如下:
@ -395,9 +396,9 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
## 角色
**persona** 是一种稳定的语音身份,可在不同提供商之间以确定性方式应用。它可以偏好某个提供商、定义与提供商无关的提示意图,并携带与提供商相关的声音、模型、提示模板、种子和语音设置绑定。
**persona** 是一种稳定的语音身份,可在不同提供商之间以确定性方式应用。它可以优先指定某个提供商、定义与提供商无关的提示意图并携带与提供商相关的语音、模型、提示模板、seed 和语音设置绑定。
### 最小角色
### 最小角色配置
```json5
{
@ -407,7 +408,7 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
persona: "narrator",
personas: {
narrator: {
label: "旁白",
label: "旁白",
provider: "elevenlabs",
providers: {
elevenlabs: { voiceId: "EXAVITQu4vr4xnSDxMaL", modelId: "eleven_multilingual_v2" },
@ -419,7 +420,7 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
}
```
### 完整角色(提供商无关提示)
### 完整角色配置(提供商无关提示)
```json5
{
@ -430,17 +431,17 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
personas: {
alfred: {
label: "Alfred",
description: "冷幽默而温暖的英式管家旁白。",
description: "冷而温暖的英式管家旁白。",
provider: "google",
fallbackPolicy: "preserve-persona",
prompt: {
profile: "一位才华横溢的英国管家。冷幽默、机智、温暖、迷人、情感丰富,绝不平庸。",
scene: "安静的深夜书房。为受信任的操作员进行近距离收音的旁白。",
sampleContext: "说话者正在以简洁、自信且带有冷幽默的温暖语气,回答一个私密的技术请求。",
style: "精致、克制、略带玩味。",
profile: "一位才华横溢的英式管家。冷幽默、机智、温暖、迷人、情感丰富,绝不平淡。",
scene: "安静的深夜书房。为一位可信赖的操作员进行近距离收音旁白。",
sampleContext: "说话者正在以简洁、自信且带有冷幽默的温暖语气,回应一项私密的技术请求。",
style: "精致、克制、略带戏谑。",
accent: "英式英语。",
pacing: "节奏从容,带有短的戏剧性停顿。",
constraints: ["不要把配置值读出来。", "不要解释这个角色。"],
pacing: "节奏从容,带有短的戏剧性停顿。",
constraints: ["不要朗读配置值。", "不要解释这个角色。"],
},
providers: {
google: {
@ -471,16 +472,16 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
### 角色解析
当前生效的角色会按确定性顺序选择:
当前激活的角色会按确定性方式选择:
1. `/tts persona <id>` 本地偏好(如果已设置)。
1. `/tts persona <id>` 本地偏好设置(如果已设置)。
2. `messages.tts.persona`(如果已设置)。
3. 角色。
3. 不使用角色。
提供商选择遵循“显式优先”顺序
提供商选择按“显式优先”运行
1. 直接覆盖项CLI、Gateway 网关、Talk、允许的 TTS 指令)。
2. `/tts provider <id>` 本地偏好。
2. `/tts provider <id>` 本地偏好设置
3. 当前角色的 `provider`
4. `messages.tts.provider`
5. 注册表自动选择。
@ -490,50 +491,50 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
1. `messages.tts.providers.<id>`
2. `messages.tts.personas.<persona>.providers.<id>`
3. 受信任的请求覆盖项
4. 允许的模型发出 TTS 指令覆盖项
4. 允许的模型发出 TTS 指令覆盖项
### 提供商如何使用角色提示
角色提示字段(`profile`、`scene`、`sampleContext`、`style`、`accent`、`pacing`、`constraints`)是**提供商无关**。每个提供商自行决定如何使用它们:
角色提示字段(`profile`、`scene`、`sampleContext`、`style`、`accent`、`pacing`、`constraints`)是**提供商无关**。每个提供商自行决定如何使用它们:
<AccordionGroup>
<Accordion title="Google Gemini">
只有当生效的 Google 提供商配置设置了 `promptTemplate: "audio-profile-v1"``personaPrompt` 时,才会将角色提示字段包装进 Gemini TTS 提示结构中。较旧的 `audioProfile``speakerName` 字段仍会作为 Google 特定的提示文本前置添加。像 `[whispers]``[laughs]` 这样的内联音频标签,如果出现在 `[[tts:text]]`中,会被保留在 Gemini 转录文本里OpenClaw 不会生成这些标签。
当生效的 Google 提供商配置设置了 `promptTemplate: "audio-profile-v1"``personaPrompt` 时,才会将角色提示字段包装进 Gemini TTS 提示结构中。较旧的 `audioProfile``speakerName` 字段仍会作为 Google 专用提示文本预置追加。像 `[whispers]``[laughs]` 这样的内联音频标签,如果出现在 `[[tts:text]]`内,也会保留在 Gemini 转录文本中OpenClaw 不会生成这些标签。
</Accordion>
<Accordion title="OpenAI">
只有在未显式配置 OpenAI `instructions` 时,才会将角色提示字段映射到请求的 `instructions` 字段。显式的 `instructions` 始终优先。
仅当未显式配置 OpenAI `instructions` 时,才会将角色提示字段映射到请求的 `instructions` 字段。显式的 `instructions` 始终优先。
</Accordion>
<Accordion title="其他提供商">
仅使用 `personas.<id>.providers.<provider>` 下与提供商相关的角色绑定。除非该提供商实现了自己的角色提示映射,否则角色提示字段会被忽略。
仅使用 `personas.<id>.providers.<provider>` 下与提供商相关的角色绑定。除非该提供商自行实现了角色提示映射,否则角色提示字段会被忽略。
</Accordion>
</AccordionGroup>
### 回退策略
当某个角色对正在尝试的提供商**没有绑定**时,`fallbackPolicy` 用于控制行为:
当某个角色对当前尝试的提供商**没有绑定**时,`fallbackPolicy` 控制行为:
| 策略 | 行为 |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `preserve-persona` | **默认。** 提供商无关提示字段仍然可用;提供商可以使用它们,也可以忽略它们。 |
| `provider-defaults` | 在该次尝试的提示准备阶段中省略角色;提供商使用其中性默认值,同时继续回退到其他提供商。 |
| `fail` | 跳过该提供商尝试,并标记 `reasonCode: "not_configured"``personaBinding: "missing"`。仍会继续尝试回退提供商。 |
| `preserve-persona` | **默认。** 提供商无关提示字段仍然可用;提供商可以使用它们,也可以忽略它们。 |
| `provider-defaults` | 该次尝试在准备提示时会省略角色;提供商使用其中性默认值,同时继续回退到其他提供商。 |
| `fail` | 跳过该提供商尝试,并附带 `reasonCode: "not_configured"``personaBinding: "missing"`。仍会继续尝试回退提供商。 |
只有当**每一个**已尝试的提供商都被跳过或失败时,整个 TTS 请求才会失败。
只有当**所有**尝试的提供商都被跳过或失败时,整个 TTS 请求才会失败。
## 模型驱动指令
## 模型驱动指令
默认情况下,助手**可以**发出 `[[tts:...]]` 指令,以便为单次回复覆盖语音、模型或速度;此外还支持可选的 `[[tts:text]]...[[/tts:text]]` 块,用于仅在音频中出现的表现性提示:
默认情况下,助手**可以**发出 `[[tts:...]]` 指令,以覆盖单次回复的语音、模型或语速,并可额外附带一个 `[[tts:text]]...[[/tts:text]]` 块,用于仅出现在音频中的表现性提示:
```text
给你。
[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](笑) 再把首歌读一遍。[[/tts:text]]
[[tts:text]](笑) 再把首歌读一遍。[[/tts:text]]
```
`messages.tts.auto``"tagged"` 时,**必须使用指令**才能触发音频。即使指令被拆分到相邻的多个块中,流式分块传输在渠道看到文本之前也会从可见文本中移除这些指令
`messages.tts.auto``"tagged"` 时,**必须使用指令**才能触发音频。分块流式传输会在渠道看到文本之前,从可见文本中去除这些指令,即使它们被拆分到相邻块中也是如此
除非设置 `modelOverrides.allowProvider: true`,否则 `provider=...` 会被忽略。当回复声明 `provider=...` 时,该指令中的其他键只会由该提供商解析;不支持的键会被剥离,并作为 TTS 指令警告报告。
除非设置 `modelOverrides.allowProvider: true`,否则 `provider=...` 会被忽略。当某条回复声明 `provider=...` 时,该指令中的其他键只会由该提供商解析;不支持的键会被剥离,并作为 TTS 指令警告报告。
**可用的指令键:**
@ -543,7 +544,7 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
- `stability`、`similarityBoost`、`style`、`speed`、`useSpeakerBoost`
- `vol` / `volume`MiniMax 音量010
- `pitch`MiniMax 整数音高12 到 12小数值会被截断
- `emotion`Volcengine 情标签)
- `emotion`Volcengine 情标签)
- `applyTextNormalization``auto|on|off`
- `languageCode`ISO 639-1
- `seed`
@ -562,7 +563,7 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
## 斜杠命令
只有一个命令 `/tts`。在 Discord 上,由于 `/tts` 是 Discord 的内置命令OpenClaw 还会注册 `/voice`——但文本形式的 `/tts ...` 仍然可用。
使用单一命令 `/tts`。在 Discord 上OpenClaw 还会注册 `/voice`,因为 `/tts` 是 Discord 的内置命令——文本形式的 `/tts ...` 仍然可用。
```text
/tts off | on | status
@ -576,50 +577,50 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
```
<Note>
这些命令要求发送者授权(适用 allowlist/owner 规则),并且必须启用 `commands.text` 或原生命令注册。
命令要已授权的发送者(适用 allowlist/owner 规则),并且必须启用 `commands.text` 或原生命令注册。
</Note>
行为说明:
- `/tts on` 会将本地 TTS 偏好写为 `always``/tts off` 会将其写为 `off`
- `/tts chat on|off|default` 会为当前聊天写入一个作用于当前会话范围的 Auto-TTS 覆盖项。
- `/tts persona <id>` 会写入本地角色偏好;`/tts persona off` 会清除此偏好
- `/tts latest` 会从当前会话转录中读取最近一条助手回复,并将其作为音频发送一次。它只会在会话条目上存储该回复的哈希,以抑制重复发送语音。
- `/tts audio` 会生成一次性的音频回复(**不会**开启 TTS)。
- `limit``summary` 存储在**本地偏好**中,而不是主配置里
- `/tts status` 包含最近一次尝试的回退诊断信息——`Fallback: <primary> -> <used>`、`Attempts: ...`,以及每次尝试的详细信息(`provider:outcome(reasonCode) latency`)。
- 当启用 TTS 时,`/status` 会显示当前生效的 TTS 模式,以及已配置的提供商、模型、语音和已清理的自定义端点元数据。
- `/tts chat on|off|default` 会为当前聊天写入一个会话范围的自动 TTS 覆盖项。
- `/tts persona <id>` 会写入本地角色偏好;`/tts persona off` 会清除
- `/tts latest` 会从当前会话转录中读取最新的助手回复,并将其作为音频发送一次。它只会在会话条目中存储该回复的哈希值,以防止重复发送语音。
- `/tts audio` 会生成一次性的音频回复(**不会**切换 TTS 为开启)。
- `limit``summary` 存储在**本地偏好设置**中,而不是主配置中
- `/tts status` 包含最近一次尝试的回退诊断——`Fallback: <primary> -> <used>`、`Attempts: ...`,以及每次尝试的详细信息(`provider:outcome(reasonCode) latency`)。
- 当启用 TTS 时,`/status` 会显示当前激活的 TTS 模式,以及已配置的提供商、模型、语音和已脱敏的自定义端点元数据。
## 按用户偏好
## 按用户划分的偏好设置
斜杠命令会将本地覆盖项写入 `prefsPath`。默认路径是 `~/.openclaw/settings/tts.json`;你可以通过 `OPENCLAW_TTS_PREFS` 环境变量或 `messages.tts.prefsPath` 进行覆盖
斜杠命令会将本地覆盖项写入 `prefsPath`。默认值为 `~/.openclaw/settings/tts.json`;你可以使用 `OPENCLAW_TTS_PREFS` 环境变量或 `messages.tts.prefsPath` 来覆盖它
| 存储字段 | 作用 |
| ------------ | -------------------------------------------- |
| `auto` | 本地 Auto-TTS 覆盖项(`always`、`off`,等等 |
| `auto` | 本地自动 TTS 覆盖项(`always`、`off`、…… |
| `provider` | 本地主提供商覆盖项 |
| `persona` | 本地角色覆盖项 |
| `maxLength` | 摘要阈值(默认 `1500` 个字符) |
| `summarize` | 摘要开关(默认 `true` |
这些字段会覆盖该主机上来自 `messages.tts` 加上当前激活的 `agents.list[].tts` 块的生效配置。
这些设置会覆盖该主机上来自 `messages.tts` 加上当前激活的 `agents.list[].tts` 配置块的生效配置。
## Auto-TTS 行为
## 自动 TTS 行为
当启用 `messages.tts.auto`OpenClaw 会:
- 如果回复已包含媒体或 `MEDIA:` 指令,则跳过 TTS。
- 跳过非常短的回复(少于 10 个字符)。
- 当启用摘要时,使用 `summaryModel`(或 `agents.defaults.model.primary`对较长回复进行摘要
- 如果回复已包含媒体内容`MEDIA:` 指令,则跳过 TTS。
- 跳过短的回复(少于 10 个字符)。
- 当启用摘要时,对长回复进行摘要,使用 `summaryModel`(或 `agents.defaults.model.primary`)。
- 将生成的音频附加到回复中。
- 在 `mode: "final"` 下,对于流式传输的最终回复,也会在文本流完成后发送仅含音频的 TTS生成的媒体会经过与普通回复附件相同的渠道媒体规范化处理。
- 在 `mode: "final"` 下,对于流式传输的最终回复,也会在文本流完成后发送纯音频 TTS生成的媒体会像普通回复附件一样经过相同的渠道媒体标准化处理。
如果回复超`maxLength` 且摘要已关闭(或摘要模型没有 API 密钥),则会跳过音频,仅发送普通文本回复。
如果回复超`maxLength` 且摘要关闭(或摘要模型没有 API 密钥),则会跳过音频,只发送普通文本回复。
```text
回复 -> 启用 TTS
否 -> 发送文本
是 -> 有媒体 / MEDIA: / 短?
是 -> 有媒体 / MEDIA: / 短?
是 -> 发送文本
否 -> 长度 > 限制?
否 -> TTS -> 附加音频
@ -628,44 +629,44 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
是 -> 摘要 -> TTS -> 附加音频
```
## 按渠道分的输出格式
## 按渠道分的输出格式
| 目标 | 格式 |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Feishu / Matrix / Telegram / WhatsApp | 语音消息回复优先使用 **Opus**ElevenLabs 的 `opus_48000_64`OpenAI 的 `opus`。48 kHz / 64 kbps 在清晰度和体积之间取得平衡。 |
| 其他渠道 | 使用 **MP3**ElevenLabs `mp3_44100_128`OpenAI 的 `mp3`。44.1 kHz / 128 kbps 是语音的默认值。 |
| Talk / 电话 | 使用提供商原生 **PCM**Inworld 为 22050 HzGoogle 为 24 kHz或使用 Gradium 的 `ulaw_8000` 用于电话。 |
| Feishu / Matrix / Telegram / WhatsApp | 语音便笺回复优先使用 **Opus**ElevenLabs 为 `opus_48000_64`OpenAI 为 `opus`。48 kHz / 64 kbps 可在清晰度和体积之间取得平衡。 |
| 其他渠道 | 使用 **MP3**ElevenLabs `mp3_44100_128`OpenAI 为 `mp3`。44.1 kHz / 128 kbps 是语音的默认值。 |
| Talk / 电话 | 使用提供商原生 **PCM**Inworld 为 22050 HzGoogle 为 24 kHz或使用来自 Gradium 的 `ulaw_8000` 以适配电话。 |
各提供商说明:
- **Feishu / WhatsApp 转码:** 当语音消息回复以 MP3/WebM/WAV/M4A 形式落地时,渠道插件会使用 `ffmpeg` 将其转码为 48 kHz Ogg/Opus。WhatsApp 通过 Baileys 发送,并设置 `ptt: true``audio/ogg; codecs=opus`。如果转换失败Feishu 会回退为附加原始文件WhatsApp 则会发送失败,而不是发布不兼容的 PTT 负载。
- **MiniMax / Xiaomi MiMo** 默认输出 MP3MiniMax `speech-2.8-hd` 为 32 kHz对于语音消息目标,会通过 `ffmpeg` 转码为 48 kHz Opus。
- **Local CLI** 使用已配置的 `outputFormat`。语音消息目标会转换为 Ogg/Opus电话输出则转换为原始 16 kHz 单声道 PCM。
- **Google Gemini** 返回原始 24 kHz PCM。OpenClaw 会将其封装为 WAV 用于附件,对语音消息目标转码为 48 kHz Opus并为 Talk/电话直接返回 PCM。
- **Inworld** MP3 附件、原生 `OGG_OPUS` 语音消息,以及用于 Talk/电话的原始 `PCM` 22050 Hz。
- **xAI** 默认使用 MP3`responseFormat` 可以 `mp3|wav|pcm|mulaw|alaw`。使用 xAI 的批处理 REST 端点——**不**使用流式 WebSocket TTS。不支持原生 Opus 语音消息格式。
- **Microsoft** 使用 `microsoft.outputFormat`(默认 `audio-24khz-48kbitrate-mono-mp3`。Telegram `sendVoice` 接受 OGG/MP3/M4A如果你需要有保障的 Opus 语音消息,请使用 OpenAI 或 ElevenLabs。如果配置的 Microsoft 格式失败OpenClaw 会使用 MP3 重试
- **Feishu / WhatsApp 转码:** 当语音便笺回复以 MP3/WebM/WAV/M4A 形式到达时,渠道插件会使用 `ffmpeg` 将其转码为 48 kHz 的 Ogg/Opus。WhatsApp 通过 Baileys 发送,并使用 `ptt: true``audio/ogg; codecs=opus`。如果转换失败Feishu 会回退为附加原始文件WhatsApp 发送失败,而不是发布不兼容的 PTT 负载。
- **MiniMax / Xiaomi MiMo** 默认输出 MP3MiniMax `speech-2.8-hd` 为 32 kHz对于语音便笺目标,会通过 `ffmpeg` 转码为 48 kHz Opus。
- **Local CLI** 使用已配置的 `outputFormat`。语音便笺目标会转换为 Ogg/Opus电话输出会转换为原始 16 kHz 单声道 PCM。
- **Google Gemini** 返回原始 24 kHz PCM。OpenClaw 会将其封装为 WAV 用于附件,对语音便笺目标转码为 48 kHz Opus并为 Talk/电话直接返回 PCM。
- **Inworld** MP3 附件,原生 `OGG_OPUS` 语音便笺Talk/电话使用原始 `PCM` 22050 Hz。
- **xAI** 默认使用 MP3`responseFormat` 可以 `mp3|wav|pcm|mulaw|alaw`。使用 xAI 的批处理 REST 端点——**不**使用流式 WebSocket TTS。不支持原生 Opus 语音便笺格式。
- **Microsoft** 使用 `microsoft.outputFormat`(默认 `audio-24khz-48kbitrate-mono-mp3`。Telegram `sendVoice` 接受 OGG/MP3/M4A如果你需要保证 Opus 语音消息,请使用 OpenAI/ElevenLabs。如果配置的 Microsoft 格式失败OpenClaw 会重试 MP3
OpenAI 和 ElevenLabs 的输出格式会按上表所列方式针对不同渠道固定
OpenAI 和 ElevenLabs 的输出格式会按上表所列,针对不同渠道固定设置
## 字段参考
<AccordionGroup>
<Accordion title="顶层 messages.tts.*">
<ParamField path="auto" type='"off" | "always" | "inbound" | "tagged"'>
Auto-TTS 模式。`inbound` 仅在收到入站语音消息后发送音频;`tagged` 仅在回复包含 `[[tts:...]]` 指令或 `[[tts:text]]` 块时发送音频。
自动 TTS 模式。`inbound` 仅在收到入站语音消息后发送音频;`tagged` 仅在回复包含 `[[tts:...]]` 指令或 `[[tts:text]]` 块时发送音频。
</ParamField>
<ParamField path="enabled" type="boolean" deprecated>
旧版开关。`openclaw doctor --fix` 会将其迁移 `auto`
旧版开关。`openclaw doctor --fix` 会将其迁移 `auto`
</ParamField>
<ParamField path="mode" type='"final" | "all"' default="final">
`"all"` 除最终回复外,包括工具/块回复。
`"all"` 除最终回复外,包括工具/块回复。
</ParamField>
<ParamField path="provider" type="string">
语音提供商 id。未设置时OpenClaw 会按注册表自动选择顺序使用第一个已配置的提供商。旧版 `provider: "edge"` 会由 `openclaw doctor --fix` 重写为 `"microsoft"`
</ParamField>
<ParamField path="persona" type="string">
来自 `personas` 的当前生效角色 id。会规范化为小写。
来自 `personas` 的当前激活角色 id。会被标准化为小写。
</ParamField>
<ParamField path="personas.<id>" type="object">
稳定的语音身份。字段包括:`label`、`description`、`provider`、`fallbackPolicy`、`prompt`、`providers.<provider>`。参见[角色](#personas)。
@ -677,16 +678,16 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
允许模型发出 TTS 指令。`enabled` 默认为 `true``allowProvider` 默认为 `false`
</ParamField>
<ParamField path="providers.<id>" type="object">
由提供商拥有、以语音提供商 id 为键的设置。旧版直接块(`messages.tts.openai`、`.elevenlabs`、`.microsoft`、`.edge`)会由 `openclaw doctor --fix` 重写;提交时只保留 `messages.tts.providers.<id>`
由提供商拥有的设置,以语音提供商 id 为键。旧版直接配置块(`messages.tts.openai`、`.elevenlabs`、`.microsoft`、`.edge`)会被 `openclaw doctor --fix` 重写;提交时只保留 `messages.tts.providers.<id>`
</ParamField>
<ParamField path="maxTextLength" type="number">
TTS 输入字符数的硬上限。超时,`/tts audio` 会失败。
TTS 输入字符数的硬上限。超时,`/tts audio` 会失败。
</ParamField>
<ParamField path="timeoutMs" type="number">
请求超时时间(毫秒)
请求超时时间,单位为毫秒
</ParamField>
<ParamField path="prefsPath" type="string">
覆盖本地偏好 JSON 路径(提供商/限制/摘要)。默认值为 `~/.openclaw/settings/tts.json`
覆盖本地偏好设置 JSON 路径(提供商/限制/摘要)。默认值为 `~/.openclaw/settings/tts.json`
</ParamField>
</Accordion>
@ -697,7 +698,7 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
<ParamField path="voice" type="string">Azure 语音 ShortName。默认值为 `en-US-JennyNeural`</ParamField>
<ParamField path="lang" type="string">SSML 语言代码。默认值为 `en-US`</ParamField>
<ParamField path="outputFormat" type="string">标准音频的 Azure `X-Microsoft-OutputFormat`。默认值为 `audio-24khz-48kbitrate-mono-mp3`</ParamField>
<ParamField path="voiceNoteOutputFormat" type="string">语音消息输出的 Azure `X-Microsoft-OutputFormat`。默认值为 `ogg-24khz-16bit-mono-opus`</ParamField>
<ParamField path="voiceNoteOutputFormat" type="string">语音便笺输出的 Azure `X-Microsoft-OutputFormat`。默认值为 `ogg-24khz-16bit-mono-opus`</ParamField>
</Accordion>
<Accordion title="ElevenLabs">
@ -705,22 +706,22 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
<ParamField path="model" type="string">模型 id例如 `eleven_multilingual_v2`、`eleven_v3`)。</ParamField>
<ParamField path="voiceId" type="string">ElevenLabs 语音 id。</ParamField>
<ParamField path="voiceSettings" type="object">
`stability`、`similarityBoost`、`style`各自`0..1`)、`useSpeakerBoost``true|false`)、`speed``0.5..2.0``1.0` = 正常)。
`stability`、`similarityBoost`、`style``0..1`)、`useSpeakerBoost``true|false`)、`speed``0.5..2.0``1.0` = 正常)。
</ParamField>
<ParamField path="applyTextNormalization" type='"auto" | "on" | "off"'>文本规范化模式。</ParamField>
<ParamField path="languageCode" type="string">2 字母 ISO 639-1 代码(例如 `en`、`de`)。</ParamField>
<ParamField path="seed" type="number">整数 `0..4294967295`,用于尽力实现确定性。</ParamField>
<ParamField path="applyTextNormalization" type='"auto" | "on" | "off"'>文本标准化模式。</ParamField>
<ParamField path="languageCode" type="string">2 ISO 639-1 代码(例如 `en`、`de`)。</ParamField>
<ParamField path="seed" type="number">整数 `0..4294967295`,用于尽力实现确定性输出</ParamField>
<ParamField path="baseUrl" type="string">覆盖 ElevenLabs API 基础 URL。</ParamField>
</Accordion>
<Accordion title="Google Gemini">
<ParamField path="apiKey" type="string">回退到 `GEMINI_API_KEY` / `GOOGLE_API_KEY`。如果省略TTS 可以在环境变量回退之前复用 `models.providers.google.apiKey`</ParamField>
<ParamField path="apiKey" type="string">回退到 `GEMINI_API_KEY` / `GOOGLE_API_KEY`。如果省略TTS 可以在回退到环境变量前复用 `models.providers.google.apiKey`</ParamField>
<ParamField path="model" type="string">Gemini TTS 模型。默认值为 `gemini-3.1-flash-tts-preview`</ParamField>
<ParamField path="voiceName" type="string">Gemini 预语音名称。默认值为 `Kore`。别名:`voice`。</ParamField>
<ParamField path="audioProfile" type="string">会在朗读文本前附加的自然语言风格提示。</ParamField>
<ParamField path="speakerName" type="string">可选说话人标签;当你的提示使用具名说话人时,会在朗读文本前附加。</ParamField>
<ParamField path="promptTemplate" type='"audio-profile-v1"'>设置为 `audio-profile-v1` 后,会将当前生效角色的提示字段包装到确定性的 Gemini TTS 提示结构中</ParamField>
<ParamField path="personaPrompt" type="string">Google 特定的附加角色提示文本,会追加到模板的 Director's Notes 后面</ParamField>
<ParamField path="voiceName" type="string">Gemini 预构建语音名称。默认值为 `Kore`。别名:`voice`。</ParamField>
<ParamField path="audioProfile" type="string">在朗读文本前预置追加的自然语言风格提示。</ParamField>
<ParamField path="speakerName" type="string">可选的说话者标签;当你的提示使用命名说话者时,会在朗读文本前预置追加。</ParamField>
<ParamField path="promptTemplate" type='"audio-profile-v1"'>设置为 `audio-profile-v1` 时,会将当前激活角色的提示字段包装为确定性的 Gemini TTS 提示结构</ParamField>
<ParamField path="personaPrompt" type="string">追加到模板 Director's Notes 中的 Google 专用额外角色提示文本</ParamField>
<ParamField path="baseUrl" type="string">仅接受 `https://generativelanguage.googleapis.com`</ParamField>
</Accordion>
@ -733,7 +734,7 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
<Accordion title="Inworld">
<ParamField path="apiKey" type="string">环境变量:`INWORLD_API_KEY`。</ParamField>
<ParamField path="baseUrl" type="string">默认值为 `https://api.inworld.ai`</ParamField>
<ParamField path="modelId" type="string">默认值为 `inworld-tts-1.5-max`另有`inworld-tts-1.5-mini`、`inworld-tts-1-max`、`inworld-tts-1`。</ParamField>
<ParamField path="modelId" type="string">默认值为 `inworld-tts-1.5-max`还支持`inworld-tts-1.5-mini`、`inworld-tts-1-max`、`inworld-tts-1`。</ParamField>
<ParamField path="voiceId" type="string">默认值为 `Sarah`</ParamField>
<ParamField path="temperature" type="number">采样温度 `0..2`</ParamField>
</Accordion>
@ -742,25 +743,25 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
<ParamField path="command" type="string">用于 CLI TTS 的本地可执行文件或命令字符串。</ParamField>
<ParamField path="args" type="string[]">命令参数。支持 `{{Text}}`、`{{OutputPath}}`、`{{OutputDir}}`、`{{OutputBase}}` 占位符。</ParamField>
<ParamField path="outputFormat" type='"mp3" | "opus" | "wav"'>预期的 CLI 输出格式。音频附件默认值为 `mp3`</ParamField>
<ParamField path="timeoutMs" type="number">命令超时时间(毫秒)。默认值为 `120000`</ParamField>
<ParamField path="timeoutMs" type="number">命令超时时间,单位为毫秒。默认值为 `120000`</ParamField>
<ParamField path="cwd" type="string">可选的命令工作目录。</ParamField>
<ParamField path="env" type="Record<string, string>">命令可选环境变量覆盖。</ParamField>
<ParamField path="env" type="Record<string, string>">命令可选环境变量覆盖</ParamField>
</Accordion>
<Accordion title="Microsoft无 API 密钥)">
<ParamField path="enabled" type="boolean" default="true">允许使用 Microsoft 语音。</ParamField>
<ParamField path="voice" type="string">Microsoft 神经语音名称(例如 `en-US-MichelleNeural`)。</ParamField>
<ParamField path="voice" type="string">Microsoft 神经网络语音名称(例如 `en-US-MichelleNeural`)。</ParamField>
<ParamField path="lang" type="string">语言代码(例如 `en-US`)。</ParamField>
<ParamField path="outputFormat" type="string">Microsoft 输出格式。默认值为 `audio-24khz-48kbitrate-mono-mp3`。并非所有格式都受内置的 Edge 后端传输支持。</ParamField>
<ParamField path="rate / pitch / volume" type="string">百分比字符串(例如 `+10%`、`-5%`)。</ParamField>
<ParamField path="saveSubtitles" type="boolean">在音频文件旁写入 JSON 字幕。</ParamField>
<ParamField path="proxy" type="string">用于 Microsoft 语音请求的代理 URL。</ParamField>
<ParamField path="timeoutMs" type="number">请求超时覆盖(毫秒)。</ParamField>
<ParamField path="edge.*" type="object" deprecated>旧版别名。运行 `openclaw doctor --fix`,将持久化配置重写到 `providers.microsoft`</ParamField>
<ParamField path="proxy" type="string">Microsoft 语音请求的代理 URL。</ParamField>
<ParamField path="timeoutMs" type="number">请求超时覆盖(毫秒)。</ParamField>
<ParamField path="edge.*" type="object" deprecated>旧版别名。运行 `openclaw doctor --fix` 可将持久化配置重写为 `providers.microsoft`</ParamField>
</Accordion>
<Accordion title="MiniMax">
<ParamField path="apiKey" type="string">回退到 `MINIMAX_API_KEY`。Token Plan 认证可通过 `MINIMAX_OAUTH_TOKEN`、`MINIMAX_CODE_PLAN_KEY` 或 `MINIMAX_CODING_API_KEY`</ParamField>
<ParamField path="apiKey" type="string">回退到 `MINIMAX_API_KEY`。Token Plan 认证可通过 `MINIMAX_OAUTH_TOKEN`、`MINIMAX_CODE_PLAN_KEY` 或 `MINIMAX_CODING_API_KEY` 完成</ParamField>
<ParamField path="baseUrl" type="string">默认值为 `https://api.minimax.io`。环境变量:`MINIMAX_API_HOST`。</ParamField>
<ParamField path="model" type="string">默认值为 `speech-2.8-hd`。环境变量:`MINIMAX_TTS_MODEL`。</ParamField>
<ParamField path="voiceId" type="string">默认值为 `English_expressive_narrator`。环境变量:`MINIMAX_TTS_VOICE_ID`。</ParamField>
@ -773,30 +774,30 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
<ParamField path="apiKey" type="string">回退到 `OPENAI_API_KEY`</ParamField>
<ParamField path="model" type="string">OpenAI TTS 模型 id例如 `gpt-4o-mini-tts`)。</ParamField>
<ParamField path="voice" type="string">语音名称(例如 `alloy`、`cedar`)。</ParamField>
<ParamField path="instructions" type="string">显式 OpenAI `instructions` 字段。设置后,角色提示字段**不会**自动映射。</ParamField>
<ParamField path="instructions" type="string">显式 OpenAI `instructions` 字段。设置后,角色提示字段**不会**自动映射。</ParamField>
<ParamField path="baseUrl" type="string">
覆盖 OpenAI TTS 端点。解析顺序:配置 → `OPENAI_TTS_BASE_URL``https://api.openai.com/v1`。非默认值会被视为 OpenAI 兼容的 TTS 端点,因此接受自定义模型和语音名
覆盖 OpenAI TTS 端点。解析顺序:配置 → `OPENAI_TTS_BASE_URL``https://api.openai.com/v1`。非默认值会被视为 OpenAI 兼容的 TTS 端点,因此接受自定义模型和语音名。
</ParamField>
</Accordion>
<Accordion title="OpenRouter">
<ParamField path="apiKey" type="string">环境变量:`OPENROUTER_API_KEY`。可复用 `models.providers.openrouter.apiKey`</ParamField>
<ParamField path="baseUrl" type="string">默认值为 `https://openrouter.ai/api/v1`。旧版 `https://openrouter.ai/v1` 会被规范化。</ParamField>
<ParamField path="baseUrl" type="string">默认值为 `https://openrouter.ai/api/v1`。旧版 `https://openrouter.ai/v1` 会被标准化。</ParamField>
<ParamField path="model" type="string">默认值为 `hexgrad/kokoro-82m`。别名:`modelId`。</ParamField>
<ParamField path="voice" type="string">默认值为 `af_alloy`。别名:`voiceId`。</ParamField>
<ParamField path="responseFormat" type='"mp3" | "pcm"'>默认值为 `mp3`</ParamField>
<ParamField path="speed" type="number">提供商原生速覆盖。</ParamField>
<ParamField path="speed" type="number">提供商原生速覆盖</ParamField>
</Accordion>
<Accordion title="VolcengineBytePlus Seed Speech">
<ParamField path="apiKey" type="string">环境变量:`VOLCENGINE_TTS_API_KEY` 或 `BYTEPLUS_SEED_SPEECH_API_KEY`</ParamField>
<ParamField path="resourceId" type="string">默认值为 `seed-tts-1.0`。环境变量:`VOLCENGINE_TTS_RESOURCE_ID`。如果你的项目具有 TTS 2.0 权限,请使用 `seed-tts-2.0`</ParamField>
<ParamField path="resourceId" type="string">默认值为 `seed-tts-1.0`。环境变量:`VOLCENGINE_TTS_RESOURCE_ID`。当你的项目拥有 TTS 2.0 权限时,请使用 `seed-tts-2.0`</ParamField>
<ParamField path="appKey" type="string">App key 请求头。默认值为 `aGjiRDfUWi`。环境变量:`VOLCENGINE_TTS_APP_KEY`。</ParamField>
<ParamField path="baseUrl" type="string">覆盖 Seed Speech TTS HTTP 端点。环境变量:`VOLCENGINE_TTS_BASE_URL`。</ParamField>
<ParamField path="voice" type="string">语音类型。默认值为 `en_female_anna_mars_bigtts`。环境变量:`VOLCENGINE_TTS_VOICE`。</ParamField>
<ParamField path="speedRatio" type="number">提供商原生速度比率</ParamField>
<ParamField path="emotion" type="string">提供商原生情标签。</ParamField>
<ParamField path="appId / token / cluster" type="string" deprecated>旧版 Volcengine Speech Console 字段。环境变量:`VOLCENGINE_TTS_APPID`、`VOLCENGINE_TTS_TOKEN`、`VOLCENGINE_TTS_CLUSTER`(默认 `volcano_tts`)。</ParamField>
<ParamField path="speedRatio" type="number">提供商原生语速比例</ParamField>
<ParamField path="emotion" type="string">提供商原生情标签。</ParamField>
<ParamField path="appId / token / cluster" type="string" deprecated>旧版 Volcengine Speech Console 字段。环境变量:`VOLCENGINE_TTS_APPID`、`VOLCENGINE_TTS_TOKEN`、`VOLCENGINE_TTS_CLUSTER`(默认值为 `volcano_tts`)。</ParamField>
</Accordion>
<Accordion title="xAI">
@ -805,7 +806,7 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
<ParamField path="voiceId" type="string">默认值为 `eve`。可用实时语音:`ara`、`eve`、`leo`、`rex`、`sal`、`una`。</ParamField>
<ParamField path="language" type="string">BCP-47 语言代码或 `auto`。默认值为 `en`</ParamField>
<ParamField path="responseFormat" type='"mp3" | "wav" | "pcm" | "mulaw" | "alaw"'>默认值为 `mp3`</ParamField>
<ParamField path="speed" type="number">提供商原生速覆盖。</ParamField>
<ParamField path="speed" type="number">提供商原生速覆盖</ParamField>
</Accordion>
<Accordion title="Xiaomi MiMo">
@ -814,17 +815,17 @@ TTS 配置位于 `~/.openclaw/openclaw.json` 中的 `messages.tts` 下。选择
<ParamField path="model" type="string">默认值为 `mimo-v2.5-tts`。环境变量:`XIAOMI_TTS_MODEL`。也支持 `mimo-v2-tts`</ParamField>
<ParamField path="voice" type="string">默认值为 `mimo_default`。环境变量:`XIAOMI_TTS_VOICE`。</ParamField>
<ParamField path="format" type='"mp3" | "wav"'>默认值为 `mp3`。环境变量:`XIAOMI_TTS_FORMAT`。</ParamField>
<ParamField path="style" type="string">可选的自然语言风格指令,作为用户消息发送;不会被朗读出来</ParamField>
<ParamField path="style" type="string">可选的自然语言风格指令,作为用户消息发送;不会被朗读。</ParamField>
</Accordion>
</AccordionGroup>
## 智能体工具
`tts` 工具会将文本转换为语音,并返回一个用于回复投递的音频附件。在 Feishu、Matrix、Telegram 和 WhatsApp 上,音频会作为语音消息而不是文件附件投递。当 `ffmpeg` 可用时Feishu 和 WhatsApp 在此路径上可以对非 Opus 的 TTS 输出进行转码。
`tts` 工具会将文本转换为语音,并返回一个音频附件用于回复投递。在 Feishu、Matrix、Telegram 和 WhatsApp 上,音频会作为语音消息投递,而不是文件附件。当 `ffmpeg` 可用时Feishu 和 WhatsApp 在此路径上可以对非 Opus 的 TTS 输出进行转码。
WhatsApp 通过 Baileys 将音频作为 PTT 语音便签发送(`audio` 且 `ptt: true`),并将可见文本与 PTT 音频**分开发送**,因为客户端对语音便签字幕的渲染并不一致。
WhatsApp 通过 Baileys 将音频作为 PTT 语音便笺发送(`audio` 且带有 `ptt: true`),并将可见文本与 PTT 音频**分开发送**,因为客户端对语音便笺上的说明文字渲染并不一致。
该工具接受可选的 `channel``timeoutMs` 字段;`timeoutMs` 是次调用的提供商请求超时时间,单位为毫秒。
该工具接受可选的 `channel``timeoutMs` 字段;`timeoutMs` 是次调用的提供商请求超时时间,单位为毫秒。
## Gateway 网关 RPC
@ -844,13 +845,13 @@ WhatsApp 通过 Baileys 将音频作为 PTT 语音便签发送(`audio` 且 `pt
- [OpenAI Audio API 参考](https://platform.openai.com/docs/api-reference/audio)
- [Azure Speech REST 文本转语音](https://learn.microsoft.com/azure/ai-services/speech-service/rest-text-to-speech)
- [Azure Speech provider](/zh-CN/providers/azure-speech)
- [ElevenLabs 文本转语音](https://elevenlabs.io/docs/api-reference/text-to-speech)
- [ElevenLabs 认证](https://elevenlabs.io/docs/api-reference/authentication)
- [ElevenLabs Text to Speech](https://elevenlabs.io/docs/api-reference/text-to-speech)
- [ElevenLabs Authentication](https://elevenlabs.io/docs/api-reference/authentication)
- [Gradium](/zh-CN/providers/gradium)
- [Inworld TTS API](https://docs.inworld.ai/tts/tts)
- [MiniMax T2A v2 API](https://platform.minimaxi.com/document/T2A%20V2)
- [Volcengine TTS HTTP API](/zh-CN/providers/volcengine#text-to-speech)
- [Xiaomi MiMo 语音合成](/zh-CN/providers/xiaomi#text-to-speech)
- [Xiaomi MiMo speech synthesis](/zh-CN/providers/xiaomi#text-to-speech)
- [node-edge-tts](https://github.com/SchneeHertz/node-edge-tts)
- [Microsoft Speech 输出格式](https://learn.microsoft.com/azure/ai-services/speech-service/rest-text-to-speech#audio-outputs)
- [xAI 文本转语音](https://docs.x.ai/developers/rest-api-reference/inference/voice#text-to-speech-rest)