テキスト読み上げ(TTS)
OpenClawは、ElevenLabs、Microsoft、MiniMax、またはOpenAIを使って送信する返信を音声に変換できます。 これは、OpenClawが音声を送信できる場所ならどこでも機能します。対応サービス
- ElevenLabs(プライマリまたはフォールバックのプロバイダー)
- Microsoft(プライマリまたはフォールバックのプロバイダー。現在の同梱実装では
node-edge-ttsを使用) - MiniMax(プライマリまたはフォールバックのプロバイダー。T2A v2 APIを使用)
- OpenAI(プライマリまたはフォールバックのプロバイダー。要約にも使用)
Microsoft speechに関する注意
同梱のMicrosoft speechプロバイダーは現在、node-edge-tts ライブラリを介して
Microsoft EdgeのオンラインニューラルTTSサービスを使用しています。これはホスト型サービスであり
(ローカルではありません)、Microsoftのエンドポイントを使用し、APIキーは不要です。
node-edge-tts は音声設定オプションと出力形式を公開していますが、
すべてのオプションがサービスでサポートされているわけではありません。edge を使用する
従来の設定およびディレクティブ入力も引き続き機能し、microsoft に正規化されます。
この経路は公開Webサービスであり、公開されたSLAやクォータがないため、
ベストエフォートとして扱ってください。保証された制限やサポートが必要な場合は、OpenAI
またはElevenLabsを使用してください。
オプションのキー
OpenAI、ElevenLabs、またはMiniMaxを使いたい場合:ELEVENLABS_API_KEY(またはXI_API_KEY)MINIMAX_API_KEYOPENAI_API_KEY
summaryModel(または agents.defaults.model.primary)が使用されるため、
要約を有効にする場合は、そのプロバイダーも認証されている必要があります。
サービスリンク
- OpenAI Text-to-Speech guide
- OpenAI Audio API reference
- ElevenLabs Text to Speech
- ElevenLabs Authentication
- MiniMax T2A v2 API
- node-edge-tts
- Microsoft Speech output formats
デフォルトで有効ですか?
いいえ。自動TTSはデフォルトで オフ です。設定でmessages.tts.auto を使って有効にするか、ローカルで /tts on を使って有効にします。
messages.tts.provider が未設定の場合、OpenClawはレジストリの自動選択順で
最初に設定されたspeechプロバイダーを選びます。
設定
TTS設定はopenclaw.json の messages.tts 配下にあります。
完全なスキーマは Gateway configuration にあります。
最小構成(有効化 + プロバイダー)
OpenAIをプライマリ、ElevenLabsをフォールバックにする場合
Microsoftをプライマリにする場合(APIキー不要)
MiniMaxをプライマリにする場合
Microsoft speechを無効にする
カスタム制限 + prefsパス
受信した音声メッセージの後だけ音声で返信する
長い返信の自動要約を無効にする
フィールドに関する注意
auto: 自動TTSモード(off、always、inbound、tagged)。inboundは、受信した音声メッセージの後にのみ音声を送信します。taggedは、返信に[[tts]]タグが含まれている場合にのみ音声を送信します。
enabled: 従来のトグル(doctorがこれをautoに移行します)。mode:"final"(デフォルト)または"all"(ツール/ブロック返信を含む)。provider:"elevenlabs"、"microsoft"、"minimax"、"openai"などのspeechプロバイダーID(フォールバックは自動)。providerが 未設定 の場合、OpenClawはレジストリの自動選択順で最初に設定されたspeechプロバイダーを使用します。- 従来の
provider: "edge"も引き続き機能し、microsoftに正規化されます。 summaryModel: 自動要約用のオプションの低コストモデル。デフォルトはagents.defaults.model.primary。provider/modelまたは設定済みのモデルエイリアスを受け付けます。
modelOverrides: モデルがTTSディレクティブを出力できるようにします(デフォルトでオン)。allowProviderのデフォルトはfalse(プロバイダー切り替えはオプトイン)。
providers.<id>: speechプロバイダーIDをキーにした、プロバイダー所有の設定。- 従来の直接プロバイダーブロック(
messages.tts.openai、messages.tts.elevenlabs、messages.tts.microsoft、messages.tts.edge)は、読み込み時にmessages.tts.providers.<id>に自動移行されます。 maxTextLength: TTS入力のハード上限(文字数)。超過すると/tts audioは失敗します。timeoutMs: リクエストタイムアウト(ms)。prefsPath: ローカル設定JSONパス(provider/limit/summary)を上書きします。apiKeyの値は環境変数(ELEVENLABS_API_KEY/XI_API_KEY、MINIMAX_API_KEY、OPENAI_API_KEY)にフォールバックします。providers.elevenlabs.baseUrl: ElevenLabs APIのベースURLを上書きします。providers.openai.baseUrl: OpenAI TTSエンドポイントを上書きします。- 解決順:
messages.tts.providers.openai.baseUrl->OPENAI_TTS_BASE_URL->https://api.openai.com/v1 - デフォルト以外の値はOpenAI互換のTTSエンドポイントとして扱われるため、カスタムのモデル名と音声名を使用できます。
- 解決順:
providers.elevenlabs.voiceSettings:stability、similarityBoost、style:0..1useSpeakerBoost:true|falsespeed:0.5..2.0(1.0 = 通常)
providers.elevenlabs.applyTextNormalization:auto|on|offproviders.elevenlabs.languageCode: 2文字のISO 639-1(例:en、de)providers.elevenlabs.seed: 整数0..4294967295(ベストエフォートの決定性)providers.minimax.baseUrl: MiniMax APIのベースURLを上書きします(デフォルトhttps://api.minimax.io、環境変数:MINIMAX_API_HOST)。providers.minimax.model: TTSモデル(デフォルトspeech-2.8-hd、環境変数:MINIMAX_TTS_MODEL)。providers.minimax.voiceId: 音声識別子(デフォルトEnglish_expressive_narrator、環境変数:MINIMAX_TTS_VOICE_ID)。providers.minimax.speed: 再生速度0.5..2.0(デフォルト 1.0)。providers.minimax.vol: 音量(0, 10](デフォルト 1.0。0より大きい必要があります)。providers.minimax.pitch: ピッチシフト-12..12(デフォルト 0)。providers.microsoft.enabled: Microsoft speechの使用を許可します(デフォルトtrue。APIキー不要)。providers.microsoft.voice: Microsoftニューラル音声名(例:en-US-MichelleNeural)。providers.microsoft.lang: 言語コード(例:en-US)。providers.microsoft.outputFormat: Microsoftの出力形式(例:audio-24khz-48kbitrate-mono-mp3)。- 有効な値はMicrosoft Speech output formatsを参照してください。同梱のEdgeベース転送では、すべての形式がサポートされるわけではありません。
providers.microsoft.rate/providers.microsoft.pitch/providers.microsoft.volume: パーセント文字列(例:+10%、-5%)。providers.microsoft.saveSubtitles: 音声ファイルと一緒にJSON字幕を書き込みます。providers.microsoft.proxy: Microsoft speechリクエスト用のプロキシURL。providers.microsoft.timeoutMs: リクエストタイムアウトの上書き(ms)。edge.*: 同じMicrosoft設定の従来エイリアス。
モデル駆動の上書き(デフォルトでオン)
デフォルトでは、モデルは単一の返信に対してTTSディレクティブを出力 できます 。messages.tts.auto が tagged の場合、音声をトリガーするにはこれらのディレクティブが必要です。
有効時、モデルは [[tts:...]] ディレクティブを出力して、単一の返信に対する音声を
上書きできます。さらに、笑い声や歌唱キューなど、
音声にのみ含めるべき表現タグを指定するためのオプションの [[tts:text]]...[[/tts:text]] ブロックも使えます。
provider=... ディレクティブは、modelOverrides.allowProvider: true でない限り無視されます。
返信ペイロードの例:
provider(登録済みspeechプロバイダーID。たとえばopenai、elevenlabs、minimax、microsoft。allowProvider: trueが必要)voice(OpenAI voice)またはvoiceId(ElevenLabs / MiniMax)model(OpenAI TTSモデル、ElevenLabsモデルID、またはMiniMaxモデル)stability、similarityBoost、style、speed、useSpeakerBoostvol/volume(MiniMax volume、0-10)pitch(MiniMax pitch、-12から12)applyTextNormalization(auto|on|off)languageCode(ISO 639-1)seed
ユーザーごとの設定
スラッシュコマンドはローカル上書きをprefsPath に書き込みます(デフォルト:
~/.openclaw/settings/tts.json。OPENCLAW_TTS_PREFS または
messages.tts.prefsPath で上書き可能)。
保存されるフィールド:
enabledprovidermaxLength(要約しきい値。デフォルト1500文字)summarize(デフォルトtrue)
messages.tts.* を上書きします。
出力形式(固定)
- Feishu / Matrix / Telegram / WhatsApp: Opus音声メッセージ(ElevenLabsでは
opus_48000_64、OpenAIではopus)。- 48kHz / 64kbps は音声メッセージに適したバランスです。
- その他のチャネル: MP3(ElevenLabsでは
mp3_44100_128、OpenAIではmp3)。- 44.1kHz / 128kbps は音声明瞭度に対するデフォルトのバランスです。
- MiniMax: MP3(
speech-2.8-hdモデル、32kHzサンプルレート)。音声ノート形式はネイティブサポートされません。Opus音声メッセージを確実に使いたい場合はOpenAIまたはElevenLabsを使用してください。 - Microsoft:
microsoft.outputFormatを使用します(デフォルトaudio-24khz-48kbitrate-mono-mp3)。- 同梱の転送は
outputFormatを受け付けますが、すべての形式がサービスから利用できるわけではありません。 - 出力形式の値はMicrosoft Speech output formatsに従います(Ogg/WebM Opusを含む)。
- Telegramの
sendVoiceはOGG/MP3/M4Aを受け付けます。Opus音声メッセージを確実に使いたい場合はOpenAI/ElevenLabsを使用してください。 - 設定されたMicrosoft出力形式が失敗した場合、OpenClawはMP3で再試行します。
- 同梱の転送は
自動TTSの動作
有効時、OpenClawは次のように動作します:- 返信にすでにメディアまたは
MEDIA:ディレクティブが含まれている場合はTTSをスキップします。 - 非常に短い返信(10文字未満)ではTTSをスキップします。
- 長い返信は、有効な場合、
agents.defaults.model.primary(またはsummaryModel)を使って要約します。 - 生成された音声を返信に添付します。
maxLength を超えていて、要約がオフである場合(または
要約モデル用のAPIキーがない場合)、
音声はスキップされ、通常のテキスト返信が送信されます。
フロー図
スラッシュコマンドの使い方
コマンドは1つだけです:/tts。
有効化の詳細は Slash commands を参照してください。
Discordに関する注意: /tts は組み込みのDiscordコマンドのため、OpenClawは
そこでネイティブコマンドとして /voice を登録します。テキストの /tts ... は引き続き使えます。
- コマンドには認可された送信者が必要です(許可リスト/オーナールールは引き続き適用されます)。
commands.textまたはネイティブコマンド登録が有効である必要があります。- 設定
messages.tts.autoはoff|always|inbound|taggedを受け付けます。 /tts onはローカルTTS設定をalwaysに書き込みます。/tts offはoffに書き込みます。inboundまたはtaggedをデフォルトにしたい場合は設定を使用してください。limitとsummaryは、メイン設定ではなくローカル設定に保存されます。/tts audioは1回限りの音声返信を生成します(TTSをオンには切り替えません)。/tts statusには、最新の試行に対するフォールバックの可視性が含まれます:- 成功時のフォールバック:
Fallback: <primary> -> <used>とAttempts: ... - 失敗時:
Error: ...とAttempts: ... - 詳細診断:
Attempt details: provider:outcome(reasonCode) latency
- 成功時のフォールバック:
- OpenAIおよびElevenLabsのAPI失敗には、解析済みのプロバイダーエラー詳細とリクエストID(プロバイダーから返された場合)が含まれるようになり、TTSエラー/ログに表示されます。
Agent tool
tts ツールはテキストを音声に変換し、返信配信用の音声添付を返します。チャネルがFeishu、Matrix、Telegram、またはWhatsAppの場合、
音声はファイル添付ではなく音声メッセージとして配信されます。
Gateway RPC
Gatewayメソッド:tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers