Zum Hauptinhalt springen
OpenClaw kann ausgehende Antworten über 14 Speech-Provider in Audio umwandeln und native Sprachnachrichten in Feishu, Matrix, Telegram und WhatsApp, Audioanhänge überall sonst sowie PCM/Ulaw-Streams für Telefonie und Talk ausliefern. TTS ist die Sprachausgabe-Hälfte von Talks stt-tts-Modus. Provider-native realtime-Talk-Sitzungen synthetisieren Sprache innerhalb des Realtime-Providers, statt diesen TTS-Pfad aufzurufen, während transcription-Sitzungen keine Sprachantwort des Assistenten synthetisieren.

Schnellstart

1

Provider auswählen

OpenAI und ElevenLabs sind die zuverlässigsten gehosteten Optionen. Microsoft und Local CLI funktionieren ohne API-Schlüssel. Die vollständige Liste finden Sie in der Provider-Matrix.
2

API-Schlüssel setzen

Exportieren Sie die Umgebungsvariable für Ihren Provider (zum Beispiel OPENAI_API_KEY, ELEVENLABS_API_KEY). Microsoft und Local CLI benötigen keinen Schlüssel.
3

In der Konfiguration aktivieren

Setzen Sie messages.tts.auto: "always" und messages.tts.provider:
{
  messages: {
    tts: {
      auto: "always",
      provider: "elevenlabs",
    },
  },
}
4

Im Chat ausprobieren

/tts status zeigt den aktuellen Zustand. /tts audio Hello from OpenClaw sendet eine einmalige Audioantwort.
Auto-TTS ist standardmäßig ausgeschaltet. Wenn messages.tts.provider nicht gesetzt ist, wählt OpenClaw den ersten konfigurierten Provider in der Auto-Select-Reihenfolge der Registry. Das integrierte Agent-Tool tts ist nur für explizite Absichten gedacht: Gewöhnlicher Chat bleibt Text, es sei denn, der Benutzer fragt nach Audio, verwendet /tts oder aktiviert Auto-TTS/Direktiv- Sprache.

Unterstützte Provider

ProviderAuthentifizierungHinweise
Azure SpeechAZURE_SPEECH_KEY + AZURE_SPEECH_REGION (auch AZURE_SPEECH_API_KEY, SPEECH_KEY, SPEECH_REGION)Native Ogg/Opus-Sprachnotiz-Ausgabe und Telefonie.
DeepInfraDEEPINFRA_API_KEYOpenAI-kompatibles TTS. Standardmäßig hexgrad/Kokoro-82M.
ElevenLabsELEVENLABS_API_KEY oder XI_API_KEYVoice Cloning, mehrsprachig, deterministisch über seed; gestreamt für Discord-Sprachwiedergabe.
Google GeminiGEMINI_API_KEY oder GOOGLE_API_KEYGemini-API-Batch-TTS; persona-bewusst über promptTemplate: "audio-profile-v1".
GradiumGRADIUM_API_KEYSprachnotiz- und Telefonieausgabe.
InworldINWORLD_API_KEYStreaming-TTS-API. Native Opus-Sprachnotiz und PCM-Telefonie.
Local CLIkeineFührt einen konfigurierten lokalen TTS-Befehl aus.
MicrosoftkeineÖffentliches neuronales Edge-TTS über node-edge-tts. Best-Effort, kein SLA.
MiniMaxMINIMAX_API_KEY (oder Token-Plan: MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY, MINIMAX_CODING_API_KEY)T2A-v2-API. Standardmäßig speech-2.8-hd.
OpenAIOPENAI_API_KEYWird auch für automatische Zusammenfassungen verwendet; unterstützt Persona-instructions.
OpenRouterOPENROUTER_API_KEY (kann models.providers.openrouter.apiKey wiederverwenden)Standardmodell hexgrad/kokoro-82m.
VolcengineVOLCENGINE_TTS_API_KEY oder BYTEPLUS_SEED_SPEECH_API_KEY (alte AppID/Token: VOLCENGINE_TTS_APPID/_TOKEN)BytePlus Seed Speech HTTP API.
VydraVYDRA_API_KEYGemeinsamer Bild-, Video- und Speech-Provider.
xAIXAI_API_KEYxAI-Batch-TTS. Native Opus-Sprachnotizen werden nicht unterstützt.
Xiaomi MiMoXIAOMI_API_KEYMiMo-TTS über Xiaomi Chat Completions.
Wenn mehrere Provider konfiguriert sind, wird der ausgewählte zuerst verwendet und die anderen dienen als Fallback-Optionen. Die automatische Zusammenfassung verwendet summaryModel (oder agents.defaults.model.primary), daher muss dieser Provider ebenfalls authentifiziert sein, wenn Sie Zusammenfassungen aktiviert lassen.
Der gebündelte Microsoft-Provider verwendet den Online-Dienst für neuronales TTS von Microsoft Edge über node-edge-tts. Es handelt sich um einen öffentlichen Webdienst ohne veröffentlichtes SLA oder Kontingent — behandeln Sie ihn als Best-Effort. Die alte Provider-ID edge wird zu microsoft normalisiert, und openclaw doctor --fix schreibt persistierte Konfiguration um; neue Konfigurationen sollten immer microsoft verwenden.

Konfiguration

Die TTS-Konfiguration befindet sich unter messages.tts in ~/.openclaw/openclaw.json. Wählen Sie ein Preset und passen Sie den Provider-Block an:
{
  messages: {
    tts: {
      auto: "always",
      provider: "azure-speech",
      providers: {
        "azure-speech": {
          apiKey: "${AZURE_SPEECH_KEY}",
          region: "eastus",
          speakerVoice: "en-US-JennyNeural",
          lang: "en-US",
          outputFormat: "audio-24khz-48kbitrate-mono-mp3",
          voiceNoteOutputFormat: "ogg-24khz-16bit-mono-opus",
        },
      },
    },
  },
}
Für Xiaomi mimo-v2.5-tts-voicedesign lassen Sie speakerVoice weg und setzen Sie style auf den Voice-Design-Prompt. OpenClaw sendet diesen Prompt als TTS-user-Nachricht und sendet für das Voicedesign-Modell kein audio.voice.

Sprachüberschreibungen pro Agent

Verwenden Sie agents.list[].tts, wenn ein Agent mit einem anderen Provider, einer anderen Stimme, einem anderen Modell, einer anderen Persona oder einem anderen Auto-TTS-Modus sprechen soll. Der Agent-Block wird per Deep Merge über messages.tts gelegt, sodass Provider-Anmeldedaten in der globalen Provider-Konfiguration bleiben können:
{
  messages: {
    tts: {
      auto: "always",
      provider: "elevenlabs",
      providers: {
        elevenlabs: { apiKey: "${ELEVENLABS_API_KEY}", model: "eleven_multilingual_v2" },
      },
    },
  },
  agents: {
    list: [
      {
        id: "reader",
        tts: {
          providers: {
            elevenlabs: { speakerVoiceId: "EXAVITQu4vr4xnSDxMaL" },
          },
        },
      },
    ],
  },
}
Um eine Persona pro Agent festzulegen, setzen Sie agents.list[].tts.persona zusammen mit der Provider-Konfiguration — sie überschreibt die globale messages.tts.persona nur für diesen Agent. Prioritätsreihenfolge für automatische Antworten, /tts audio, /tts status und das Agent-Tool tts:
  1. messages.tts
  2. aktives agents.list[].tts
  3. Kanal-Override, wenn der Kanal channels.<channel>.tts unterstützt
  4. Konto-Override, wenn der Kanal channels.<channel>.accounts.<id>.tts übergibt
  5. lokale /tts-Einstellungen für diesen Host
  6. Inline-Direktiven [[tts:...]], wenn modellgesteuerte Overrides aktiviert sind
Kanal- und Konto-Overrides verwenden dieselbe Struktur wie messages.tts und werden per Deep Merge über die früheren Ebenen gelegt, sodass gemeinsame Provider-Anmeldedaten in messages.tts bleiben können, während ein Kanal oder Bot-Konto nur Sprecherstimme, Modell, Persona oder Auto-Modus ändert:
{
  messages: {
    tts: {
      provider: "openai",
      providers: {
        openai: { apiKey: "${OPENAI_API_KEY}", model: "gpt-4o-mini-tts" },
      },
    },
  },
  channels: {
    feishu: {
      accounts: {
        english: {
          tts: {
            providers: {
              openai: { speakerVoice: "shimmer" },
            },
          },
        },
      },
    },
  },
}

Personas

Eine Persona ist eine stabile gesprochene Identität, die deterministisch über Provider hinweg angewendet werden kann. Sie kann einen Provider bevorzugen, eine Provider-neutrale Prompt-Absicht definieren und Provider-spezifische Bindungen für Stimmen, Modelle, Prompt-Vorlagen, Seeds und Stimmeinstellungen tragen.

Minimale Persona

{
  messages: {
    tts: {
      auto: "always",
      persona: "narrator",
      personas: {
        narrator: {
          label: "Narrator",
          provider: "elevenlabs",
          providers: {
            elevenlabs: {
              speakerVoiceId: "EXAVITQu4vr4xnSDxMaL",
              modelId: "eleven_multilingual_v2",
            },
          },
        },
      },
    },
  },
}

Vollständige Persona (Provider-neutraler Prompt)

{
  messages: {
    tts: {
      auto: "always",
      persona: "alfred",
      personas: {
        alfred: {
          label: "Alfred",
          description: "Dry, warm British butler narrator.",
          provider: "google",
          fallbackPolicy: "preserve-persona",
          prompt: {
            profile: "A brilliant British butler. Dry, witty, warm, charming, emotionally expressive, never generic.",
            scene: "A quiet late-night study. Close-mic narration for a trusted operator.",
            sampleContext: "The speaker is answering a private technical request with concise confidence and dry warmth.",
            style: "Refined, understated, lightly amused.",
            accent: "British English.",
            pacing: "Measured, with short dramatic pauses.",
            constraints: ["Do not read configuration values aloud.", "Do not explain the persona."],
          },
          providers: {
            google: {
              model: "gemini-3.1-flash-tts-preview",
              speakerVoice: "Algieba",
              promptTemplate: "audio-profile-v1",
            },
            openai: { model: "gpt-4o-mini-tts", speakerVoice: "cedar" },
            elevenlabs: {
              speakerVoiceId: "voice_id",
              modelId: "eleven_multilingual_v2",
              seed: 42,
              voiceSettings: {
                stability: 0.65,
                similarityBoost: 0.8,
                style: 0.25,
                useSpeakerBoost: true,
                speed: 0.95,
              },
            },
          },
        },
      },
    },
  },
}

Persona-Auflösung

Die aktive Persona wird deterministisch ausgewählt:
  1. Lokale Einstellung /tts persona <id>, falls gesetzt.
  2. messages.tts.persona, falls gesetzt.
  3. Keine Persona.
Die Provider-Auswahl läuft nach dem Prinzip „explizit zuerst“:
  1. Direkte Overrides (CLI, Gateway, Talk, zulässige TTS-Direktiven).
  2. Lokale Einstellung /tts provider <id>.
  3. provider der aktiven Persona.
  4. messages.tts.provider.
  5. Automatische Auswahl aus der Registry.
Für jeden Provider-Versuch führt OpenClaw Konfigurationen in dieser Reihenfolge zusammen:
  1. messages.tts.providers.<id>
  2. messages.tts.personas.<persona>.providers.<id>
  3. Vertrauenswürdige Request-Overrides
  4. Zulässige vom Modell ausgegebene TTS-Direktiven-Overrides

Wie Provider Persona-Prompts verwenden

Persona-Prompt-Felder (profile, scene, sampleContext, style, accent, pacing, constraints) sind Provider-neutral. Jeder Provider entscheidet selbst, wie er sie verwendet:
Schließt Persona-Prompt-Felder in eine Gemini-TTS-Prompt-Struktur ein, nur wenn die effektive Google-Provider-Konfiguration promptTemplate: "audio-profile-v1" oder personaPrompt setzt. Die älteren Felder audioProfile und speakerName werden weiterhin als Google-spezifischer Prompt-Text vorangestellt. Inline-Audio-Tags wie [whispers] oder [laughs] innerhalb eines [[tts:text]]-Blocks bleiben im Gemini-Transkript erhalten; OpenClaw generiert diese Tags nicht.
Ordnet Persona-Prompt-Felder dem Request-Feld instructions zu, nur wenn keine expliziten OpenAI-instructions konfiguriert sind. Explizite instructions haben immer Vorrang.
Verwenden nur die Provider-spezifischen Persona-Bindungen unter personas.<id>.providers.<provider>. Persona-Prompt-Felder werden ignoriert, sofern der Provider keine eigene Persona-Prompt-Zuordnung implementiert.

Fallback-Richtlinie

fallbackPolicy steuert das Verhalten, wenn eine Persona keine Bindung für den versuchten Provider hat:
RichtlinieVerhalten
preserve-personaStandard. Provider-neutrale Prompt-Felder bleiben verfügbar; der Provider kann sie verwenden oder ignorieren.
provider-defaultsDie Persona wird für diesen Versuch bei der Prompt-Vorbereitung ausgelassen; der Provider verwendet seine neutralen Standardwerte, während der Fallback auf andere Provider fortgesetzt wird.
failÜberspringt diesen Provider-Versuch mit reasonCode: "not_configured" und personaBinding: "missing". Fallback-Provider werden weiterhin versucht.
Die gesamte TTS-Anfrage schlägt nur fehl, wenn jeder versuchte Provider übersprungen wird oder fehlschlägt. Die Provider-Auswahl für Talk-Sitzungen ist sitzungsbezogen. Ein Talk-Client sollte Provider-IDs, Modell-IDs, Stimmen-IDs und Locales aus talk.catalog auswählen und sie über die Talk-Sitzung oder Handoff-Anfrage übergeben. Das Öffnen einer Sprachsitzung sollte messages.tts oder globale Talk-Provider-Standardwerte nicht verändern.

Modellgesteuerte Direktiven

Standardmäßig kann der Assistent [[tts:...]]-Direktiven ausgeben, um Stimme, Modell oder Geschwindigkeit für eine einzelne Antwort zu überschreiben, plus einen optionalen [[tts:text]]...[[/tts:text]]-Block für ausdrucksstarke Hinweise, die nur im Audio erscheinen sollen:
Here you go.

[[tts:speakerVoiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
Wenn messages.tts.auto auf "tagged" gesetzt ist, sind Direktiven erforderlich, um Audio auszulösen. Die Streaming-Blockzustellung entfernt Direktiven aus sichtbarem Text, bevor der Kanal sie sieht, auch wenn sie über benachbarte Blöcke verteilt sind. provider=... wird ignoriert, sofern nicht modelOverrides.allowProvider: true gesetzt ist. Wenn eine Antwort provider=... deklariert, werden die anderen Schlüssel in dieser Direktive nur von diesem Provider geparst; nicht unterstützte Schlüssel werden entfernt und als TTS-Direktiven-Warnungen gemeldet. Verfügbare Direktiven-Schlüssel:
  • provider (registrierte Provider-ID; erfordert allowProvider: true)
  • speakerVoice / speakerVoiceId (Legacy-Aliasse: voice, voiceName, voice_name, google_voice, voiceId)
  • model / google_model
  • stability, similarityBoost, style, speed, useSpeakerBoost
  • vol / volume (MiniMax-Lautstärke, 0–10)
  • pitch (MiniMax-Ganzzahltonhöhe, −12 bis 12; Dezimalwerte werden abgeschnitten)
  • emotion (Volcengine-Emotionstag)
  • applyTextNormalization (auto|on|off)
  • languageCode (ISO 639-1)
  • seed
Modell-Overrides vollständig deaktivieren:
{ messages: { tts: { modelOverrides: { enabled: false } } } }
Provider-Wechsel erlauben, während andere Regler konfigurierbar bleiben:
{ messages: { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false } } } }

Slash-Befehle

Einzelner Befehl /tts. Auf Discord registriert OpenClaw außerdem /voice, weil /tts ein integrierter Discord-Befehl ist — Text /tts ... funktioniert weiterhin.
/tts off | on | status
/tts chat on | off | default
/tts latest
/tts provider <id>
/tts persona <id> | off
/tts limit <chars>
/tts summary off
/tts audio <text>
Befehle erfordern einen autorisierten Absender (Allowlist-/Owner-Regeln gelten) und entweder commands.text oder native Befehlsregistrierung muss aktiviert sein.
Verhaltenshinweise:
  • /tts on schreibt die lokale TTS-Einstellung auf always; /tts off schreibt sie auf off.
  • /tts chat on|off|default schreibt einen sitzungsbezogenen Auto-TTS-Override für den aktuellen Chat.
  • /tts persona <id> schreibt die lokale Persona-Einstellung; /tts persona off löscht sie.
  • /tts latest liest die neueste Assistentenantwort aus dem aktuellen Sitzungstranskript und sendet sie einmal als Audio. Es speichert nur einen Hash dieser Antwort im Sitzungseintrag, um doppelte Sprachausgaben zu unterdrücken.
  • /tts audio erzeugt eine einmalige Audio-Antwort (schaltet TTS nicht ein).
  • limit und summary werden in lokalen Einstellungen gespeichert, nicht in der Hauptkonfiguration.
  • /tts status enthält Fallback-Diagnosen für den neuesten Versuch — Fallback: <primary> -> <used>, Attempts: ... und Details pro Versuch (provider:outcome(reasonCode) latency).
  • /status zeigt den aktiven TTS-Modus sowie konfigurierten Provider, Modell, Stimme und bereinigte benutzerdefinierte Endpunkt-Metadaten, wenn TTS aktiviert ist.

Benutzerspezifische Einstellungen

Slash-Befehle schreiben lokale Overrides nach prefsPath. Der Standard ist ~/.openclaw/settings/tts.json; überschreiben Sie ihn mit der Umgebungsvariable OPENCLAW_TTS_PREFS oder messages.tts.prefsPath.
Gespeichertes FeldWirkung
autoLokaler Auto-TTS-Override (always, off, …)
providerLokaler primärer Provider-Override
personaLokaler Persona-Override
maxLengthZusammenfassungsschwelle (Standard 1500 Zeichen)
summarizeZusammenfassungsumschalter (Standard true)
Diese überschreiben die effektive Konfiguration aus messages.tts plus den aktiven agents.list[].tts-Block für diesen Host.

Ausgabeformate (fest)

Die TTS-Sprachausgabe wird durch Kanal-Fähigkeiten gesteuert. Kanal-Plugins geben an, ob TTS im Sprachstil Provider nach einem nativen voice-note-Ziel fragen soll oder normale audio-file-Synthese beibehalten und kompatible Ausgabe nur für die Sprachzustellung markieren soll.
  • Sprachnotiz-fähige Kanäle: Sprachnotiz-Antworten bevorzugen Opus (opus_48000_64 von ElevenLabs, opus von OpenAI).
    • 48 kHz / 64 kbps ist ein guter Kompromiss für Sprachnachrichten.
  • Feishu / WhatsApp: Wenn eine Sprachnotiz-Antwort als MP3/WebM/WAV/M4A oder eine andere wahrscheinliche Audiodatei erzeugt wird, transkodiert das Kanal-Plugin sie vor dem Senden der nativen Sprachnachricht mit ffmpeg zu 48 kHz Ogg/Opus. WhatsApp sendet das Ergebnis über die Baileys-audio-Payload mit ptt: true und audio/ogg; codecs=opus. Wenn die Konvertierung fehlschlägt, erhält Feishu die ursprüngliche Datei als Anhang; der WhatsApp-Versand schlägt fehl, statt eine inkompatible PTT-Payload zu posten.
  • Andere Kanäle: MP3 (mp3_44100_128 von ElevenLabs, mp3 von OpenAI).
    • 44,1 kHz / 128 kbps ist die Standardbalance für Sprachklarheit.
  • MiniMax: MP3 (speech-2.8-hd-Modell, 32-kHz-Abtastrate) für normale Audioanhänge. Für vom Kanal angekündigte Sprachnotiz-Ziele transkodiert OpenClaw das MiniMax-MP3 vor der Auslieferung mit ffmpeg zu 48 kHz Opus, wenn der Kanal Transkodierung ankündigt.
  • Xiaomi MiMo: Standardmäßig MP3 oder WAV, wenn konfiguriert. Für vom Kanal angekündigte Sprachnotiz-Ziele transkodiert OpenClaw Xiaomi-Ausgaben vor der Auslieferung mit ffmpeg zu 48 kHz Opus, wenn der Kanal Transkodierung ankündigt.
  • Lokale CLI: Verwendet das konfigurierte outputFormat. Sprachnotiz-Ziele werden zu Ogg/Opus konvertiert, und Telefonieausgabe wird mit ffmpeg zu rohem 16-kHz-Mono-PCM konvertiert.
  • Google Gemini: Gemini API TTS gibt rohes 24-kHz-PCM zurück. OpenClaw verpackt es für Audioanhänge als WAV, transkodiert es für Sprachnotiz-Ziele zu 48 kHz Opus und gibt PCM für Talk/Telefonie direkt zurück.
  • Gradium: WAV für Audioanhänge, Opus für Sprachnotiz-Ziele und ulaw_8000 bei 8 kHz für Telefonie.
  • Inworld: MP3 für normale Audioanhänge, natives OGG_OPUS für Sprachnotiz-Ziele und rohes PCM bei 22050 Hz für Talk/Telefonie.
  • xAI: Standardmäßig MP3; responseFormat kann mp3, wav, pcm, mulaw oder alaw sein. OpenClaw verwendet den Batch-REST-TTS-Endpunkt von xAI und gibt einen vollständigen Audioanhang zurück; der Streaming-TTS-WebSocket von xAI wird in diesem Provider-Pfad nicht verwendet. Das native Opus-Sprachnotizformat wird von diesem Pfad nicht unterstützt.
  • Microsoft: Verwendet microsoft.outputFormat (Standard audio-24khz-48kbitrate-mono-mp3).
    • Der gebündelte Transport akzeptiert ein outputFormat, aber nicht alle Formate sind vom Dienst verfügbar.
    • Ausgabeformatwerte folgen den Microsoft Speech-Ausgabeformaten (einschließlich Ogg/WebM Opus).
    • Telegram sendVoice akzeptiert OGG/MP3/M4A; verwenden Sie OpenAI/ElevenLabs, wenn Sie garantierte Opus-Sprachnachrichten benötigen.
    • Wenn das konfigurierte Microsoft-Ausgabeformat fehlschlägt, versucht OpenClaw es erneut mit MP3.
OpenAI/ElevenLabs-Ausgabeformate sind pro Kanal festgelegt (siehe oben).

Auto-TTS-Verhalten

Wenn messages.tts.auto aktiviert ist, führt OpenClaw Folgendes aus:
  • Überspringt TTS, wenn die Antwort bereits strukturierte Medien enthält.
  • Überspringt sehr kurze Antworten (unter 10 Zeichen).
  • Fasst lange Antworten zusammen, wenn Zusammenfassungen aktiviert sind, unter Verwendung von summaryModel (oder agents.defaults.model.primary).
  • Hängt das generierte Audio an die Antwort an.
  • Sendet in mode: "final" weiterhin reines Audio-TTS für gestreamte finale Antworten, nachdem der Textstream abgeschlossen ist; die generierten Medien durchlaufen dieselbe Kanal-Mediennormalisierung wie normale Antwortanhänge.
Wenn die Antwort maxLength überschreitet und Zusammenfassung deaktiviert ist (oder kein API-Schlüssel für das Zusammenfassungsmodell vorhanden ist), wird Audio übersprungen und die normale Textantwort gesendet.
Reply -> TTS enabled?
  no  -> send text
  yes -> has media / short?
          yes -> send text
          no  -> length > limit?
                   no  -> TTS -> attach audio
                   yes -> summary enabled?
                            no  -> send text
                            yes -> summarize -> TTS -> attach audio

Ausgabeformate nach Kanal

ZielFormat
Feishu / Matrix / Telegram / WhatsAppSprachnotiz-Antworten bevorzugen Opus (opus_48000_64 von ElevenLabs, opus von OpenAI). 48 kHz / 64 kbps balanciert Klarheit und Größe.
Andere KanäleMP3 (mp3_44100_128 von ElevenLabs, mp3 von OpenAI). 44,1 kHz / 128 kbps als Standard für Sprache.
Talk / TelefonieProvider-natives PCM (Inworld 22050 Hz, Google 24 kHz) oder ulaw_8000 von Gradium für Telefonie.
Hinweise pro Provider:
  • Feishu / WhatsApp-Transkodierung: Wenn eine Sprachnotiz-Antwort als MP3/WebM/WAV/M4A ankommt, transkodiert das Kanal-Plugin mit ffmpeg zu 48 kHz Ogg/Opus. WhatsApp sendet über Baileys mit ptt: true und audio/ogg; codecs=opus. Wenn die Konvertierung fehlschlägt: Feishu fällt auf das Anhängen der ursprünglichen Datei zurück; der WhatsApp-Versand schlägt fehl, statt eine inkompatible PTT-Payload zu posten.
  • MiniMax / Xiaomi MiMo: Standardmäßig MP3 (32 kHz für MiniMax speech-2.8-hd); für Sprachnotiz-Ziele über ffmpeg zu 48 kHz Opus transkodiert.
  • Lokale CLI: Verwendet das konfigurierte outputFormat. Sprachnotiz-Ziele werden zu Ogg/Opus und Telefonieausgabe zu rohem 16-kHz-Mono-PCM konvertiert.
  • Google Gemini: Gibt rohes 24-kHz-PCM zurück. OpenClaw verpackt es für Anhänge als WAV, transkodiert es für Sprachnotiz-Ziele zu 48 kHz Opus und gibt PCM für Talk/Telefonie direkt zurück.
  • Inworld: MP3-Anhänge, native OGG_OPUS-Sprachnotiz, rohes PCM mit 22050 Hz für Talk/Telefonie.
  • xAI: Standardmäßig MP3; responseFormat kann mp3|wav|pcm|mulaw|alaw sein. Verwendet den Batch-REST-Endpunkt von xAI — Streaming-WebSocket-TTS wird nicht verwendet. Das native Opus-Sprachnotizformat wird nicht unterstützt.
  • Microsoft: Verwendet microsoft.outputFormat (Standard audio-24khz-48kbitrate-mono-mp3). Telegram sendVoice akzeptiert OGG/MP3/M4A; verwenden Sie OpenAI/ElevenLabs, wenn Sie garantierte Opus-Sprachnachrichten benötigen. Wenn das konfigurierte Microsoft-Format fehlschlägt, versucht OpenClaw es erneut mit MP3.
OpenAI- und ElevenLabs-Ausgabeformate sind wie oben aufgeführt pro Kanal festgelegt.

Feldreferenz

auto
"off" | "always" | "inbound" | "tagged"
Auto-TTS-Modus. inbound sendet Audio nur nach einer eingehenden Sprachnachricht; tagged sendet Audio nur, wenn die Antwort [[tts:...]]-Direktiven oder einen [[tts:text]]-Block enthält.
enabled
boolean
veraltet
Veralteter Umschalter. openclaw doctor --fix migriert dies zu auto.
mode
"final" | "all"
Standard:"final"
"all" schließt Tool-/Blockantworten zusätzlich zu finalen Antworten ein.
provider
string
Sprach-Provider-ID. Wenn nicht gesetzt, verwendet OpenClaw den ersten konfigurierten Provider in der Auto-Auswahlreihenfolge der Registry. Veraltetes provider: "edge" wird von openclaw doctor --fix zu "microsoft" umgeschrieben.
persona
string
Aktive Persona-ID aus personas. Wird in Kleinbuchstaben normalisiert.
personas.<id>
object
Stabile gesprochene Identität. Felder: label, description, provider, fallbackPolicy, prompt, providers.<provider>. Siehe Personas.
summaryModel
string
Günstiges Modell für Auto-Zusammenfassung; standardmäßig agents.defaults.model.primary. Akzeptiert provider/model oder einen konfigurierten Modellalias.
modelOverrides
object
Erlaubt dem Modell, TTS-Direktiven auszugeben. enabled ist standardmäßig true; allowProvider ist standardmäßig false.
providers.<id>
object
Provider-eigene Einstellungen, nach Sprach-Provider-ID indiziert. Veraltete direkte Blöcke (messages.tts.openai, .elevenlabs, .microsoft, .edge) werden von openclaw doctor --fix umgeschrieben; committen Sie nur messages.tts.providers.<id>.
maxTextLength
number
Harte Obergrenze für TTS-Eingabezeichen. /tts audio schlägt fehl, wenn sie überschritten wird.
timeoutMs
number
Anfrage-Timeout in Millisekunden.
prefsPath
string
Überschreibt den lokalen JSON-Pfad für Einstellungen (Provider/Limit/Zusammenfassung). Standard ~/.openclaw/settings/tts.json.
apiKey
string
Env: AZURE_SPEECH_KEY, AZURE_SPEECH_API_KEY oder SPEECH_KEY.
region
string
Azure Speech-Region (z. B. eastus). Env: AZURE_SPEECH_REGION oder SPEECH_REGION.
endpoint
string
Optionale Azure Speech-Endpunktüberschreibung (Alias baseUrl).
speakerVoice
string
Azure-Stimmen-ShortName. Standard en-US-JennyNeural. Veralteter Alias: voice.
lang
string
SSML-Sprachcode. Standard en-US.
outputFormat
string
Azure X-Microsoft-OutputFormat für Standardaudio. Standard audio-24khz-48kbitrate-mono-mp3.
voiceNoteOutputFormat
string
Azure X-Microsoft-OutputFormat für Sprachnotiz-Ausgabe. Standard ogg-24khz-16bit-mono-opus.
apiKey
string
Fällt auf ELEVENLABS_API_KEY oder XI_API_KEY zurück.
model
string
Modell-ID (z. B. eleven_multilingual_v2, eleven_v3).
speakerVoiceId
string
ElevenLabs-Stimmen-ID. Veralteter Alias: voiceId.
voiceSettings
object
stability, similarityBoost, style (jeweils 0..1), useSpeakerBoost (true|false), speed (0.5..2.0, 1.0 = normal).
applyTextNormalization
"auto" | "on" | "off"
Textnormalisierungsmodus.
languageCode
string
2-buchstabiger ISO 639-1-Code (z. B. en, de).
seed
number
Ganzzahl 0..4294967295 für Best-Effort-Determinismus.
baseUrl
string
Überschreibt die Basis-URL der ElevenLabs API.
apiKey
string
Fällt auf GEMINI_API_KEY / GOOGLE_API_KEY zurück. Wenn weggelassen, kann TTS models.providers.google.apiKey vor dem Env-Fallback wiederverwenden.
model
string
Gemini-TTS-Modell. Standard gemini-3.1-flash-tts-preview.
speakerVoice
string
Vorgefertigter Gemini-Stimmenname. Standard Kore. Veraltete Aliasse: voiceName, voice.
audioProfile
string
Natürlichsprachiger Stil-Prompt, der dem gesprochenen Text vorangestellt wird.
speakerName
string
Optionale Sprecherbezeichnung, die dem gesprochenen Text vorangestellt wird, wenn Ihr Prompt einen benannten Sprecher verwendet.
promptTemplate
"audio-profile-v1"
Auf audio-profile-v1 setzen, um aktive Persona-Prompt-Felder in eine deterministische Gemini-TTS-Prompt-Struktur einzubetten.
personaPrompt
string
Google-spezifischer zusätzlicher Persona-Prompt-Text, der an die Director’s Notes der Vorlage angehängt wird.
baseUrl
string
Nur https://generativelanguage.googleapis.com wird akzeptiert.
apiKey
string
Umgebung: GRADIUM_API_KEY.
baseUrl
string
Standard https://api.gradium.ai.
speakerVoiceId
string
Standard Emma (YTpq7expH9539ERJ). Legacy-Alias: voiceId.

Primäres Inworld

apiKey
string
Umgebung: INWORLD_API_KEY.
baseUrl
string
Standard https://api.inworld.ai.
modelId
string
Standard inworld-tts-1.5-max. Außerdem: inworld-tts-1.5-mini, inworld-tts-1-max, inworld-tts-1.
speakerVoiceId
string
Standard Sarah. Legacy-Alias: voiceId.
temperature
number
Sampling-Temperatur 0..2.
command
string
Lokale ausführbare Datei oder Befehlszeichenfolge für CLI-TTS.
args
string[]
Befehlsargumente. Unterstützt die Platzhalter {{Text}}, {{OutputPath}}, {{OutputDir}}, {{OutputBase}}.
outputFormat
"mp3" | "opus" | "wav"
Erwartetes CLI-Ausgabeformat. Standard mp3 für Audioanhänge.
timeoutMs
number
Befehls-Timeout in Millisekunden. Standard 120000.
cwd
string
Optionales Arbeitsverzeichnis für den Befehl.
env
Record<string, string>
Optionale Umgebungs-Overrides für den Befehl.
enabled
boolean
Standard:"true"
Microsoft-Sprachnutzung zulassen.
speakerVoice
string
Name der neuronalen Microsoft-Stimme (z. B. en-US-MichelleNeural). Legacy-Alias: voice.
lang
string
Sprachcode (z. B. en-US).
outputFormat
string
Microsoft-Ausgabeformat. Standard audio-24khz-48kbitrate-mono-mp3. Nicht alle Formate werden vom gebündelten Edge-gestützten Transport unterstützt.
rate / pitch / volume
string
Prozentzeichenfolgen (z. B. +10%, -5%).
saveSubtitles
boolean
JSON-Untertitel neben die Audiodatei schreiben.
proxy
string
Proxy-URL für Microsoft-Sprachanfragen.
timeoutMs
number
Request-Timeout-Override (ms).
edge.*
object
veraltet
Legacy-Alias. Führen Sie openclaw doctor --fix aus, um persistierte Konfiguration in providers.microsoft umzuschreiben.
apiKey
string
Fällt auf MINIMAX_API_KEY zurück. Token-Plan-Authentifizierung über MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY oder MINIMAX_CODING_API_KEY.
baseUrl
string
Standard https://api.minimax.io. Umgebung: MINIMAX_API_HOST.
model
string
Standard speech-2.8-hd. Umgebung: MINIMAX_TTS_MODEL.
speakerVoiceId
string
Standard English_expressive_narrator. Umgebung: MINIMAX_TTS_VOICE_ID. Legacy-Alias: voiceId.
speed
number
0.5..2.0. Standard 1.0.
vol
number
(0, 10]. Standard 1.0.
pitch
number
Ganzzahl -12..12. Standard 0. Bruchwerte werden vor der Anfrage abgeschnitten.
apiKey
string
Fällt auf OPENAI_API_KEY zurück.
model
string
OpenAI-TTS-Modell-ID (z. B. gpt-4o-mini-tts).
speakerVoice
string
Stimmenname (z. B. alloy, cedar). Legacy-Alias: voice.
instructions
string
Explizites OpenAI-Feld instructions. Wenn gesetzt, werden Persona-Prompt-Felder nicht automatisch zugeordnet.
extraBody / extra_body
Record<string, unknown>
Zusätzliche JSON-Felder, die nach generierten OpenAI-TTS-Feldern in /audio/speech-Request-Bodys zusammengeführt werden. Verwenden Sie dies für OpenAI-kompatible Endpunkte wie Kokoro, die Provider-spezifische Schlüssel wie lang erfordern; unsichere Prototypschlüssel werden ignoriert.
baseUrl
string
Überschreibt den OpenAI-TTS-Endpunkt. Auflösungsreihenfolge: Konfiguration → OPENAI_TTS_BASE_URLhttps://api.openai.com/v1. Nicht standardmäßige Werte werden als OpenAI-kompatible TTS-Endpunkte behandelt, daher werden benutzerdefinierte Modell- und Stimmennamen akzeptiert.
apiKey
string
Umgebung: OPENROUTER_API_KEY. Kann models.providers.openrouter.apiKey wiederverwenden.
baseUrl
string
Standard https://openrouter.ai/api/v1. Legacy https://openrouter.ai/v1 wird normalisiert.
model
string
Standard hexgrad/kokoro-82m. Alias: modelId.
speakerVoice
string
Standard af_alloy. Legacy-Aliasse: voice, voiceId.
responseFormat
"mp3" | "pcm"
Standard mp3.
speed
number
Provider-nativer Speed-Override.
apiKey
string
Umgebung: VOLCENGINE_TTS_API_KEY oder BYTEPLUS_SEED_SPEECH_API_KEY.
resourceId
string
Standard seed-tts-1.0. Umgebung: VOLCENGINE_TTS_RESOURCE_ID. Verwenden Sie seed-tts-2.0, wenn Ihr Projekt über eine TTS-2.0-Berechtigung verfügt.
appKey
string
App-Key-Header. Standard aGjiRDfUWi. Umgebung: VOLCENGINE_TTS_APP_KEY.
baseUrl
string
Überschreibt den Seed-Speech-TTS-HTTP-Endpunkt. Umgebung: VOLCENGINE_TTS_BASE_URL.
speakerVoice
string
Stimmentyp. Standard en_female_anna_mars_bigtts. Umgebung: VOLCENGINE_TTS_VOICE. Legacy-Alias: voice.
speedRatio
number
Provider-natives Geschwindigkeitsverhältnis.
emotion
string
Provider-natives Emotions-Tag.
appId / token / cluster
string
veraltet
Legacy-Felder der Volcengine Speech Console. Umgebung: VOLCENGINE_TTS_APPID, VOLCENGINE_TTS_TOKEN, VOLCENGINE_TTS_CLUSTER (Standard volcano_tts).
apiKey
string
Umgebung: XAI_API_KEY.
baseUrl
string
Standard https://api.x.ai/v1. Umgebung: XAI_BASE_URL.
speakerVoiceId
string
Standard eve. Live-Stimmen: ara, eve, leo, rex, sal, una. Legacy-Alias: voiceId.
language
string
BCP-47-Sprachcode oder auto. Standard en.
responseFormat
"mp3" | "wav" | "pcm" | "mulaw" | "alaw"
Standard mp3.
speed
number
Provider-nativer Speed-Override.
apiKey
string
Umgebung: XIAOMI_API_KEY.
baseUrl
string
Standard https://api.xiaomimimo.com/v1. Umgebung: XIAOMI_BASE_URL.
model
string
Standard mimo-v2.5-tts. Umgebung: XIAOMI_TTS_MODEL. Unterstützt auch mimo-v2-tts und mimo-v2.5-tts-voicedesign.
speakerVoice
string
Standard mimo_default für Modelle mit voreingestellter Stimme. Umgebung: XIAOMI_TTS_VOICE. Legacy-Alias: voice. Wird für mimo-v2.5-tts-voicedesign nicht gesendet.
format
"mp3" | "wav"
Standard mp3. Umgebung: XIAOMI_TTS_FORMAT.
style
string
Optionale natürlichsprachliche Stilanweisung, die als Benutzernachricht gesendet wird; sie wird nicht gesprochen. Für mimo-v2.5-tts-voicedesign ist dies der Voice-Design-Prompt; OpenClaw stellt einen Standard bereit, wenn er ausgelassen wird.

Agent-Tool

Das Tool tts wandelt Text in Sprache um und gibt einen Audioanhang für die Antwortzustellung zurück. In Feishu, Matrix, Telegram und WhatsApp wird das Audio als Sprachnachricht statt als Dateianhang zugestellt. Feishu und WhatsApp können auf diesem Pfad Nicht-Opus-TTS-Ausgaben transkodieren, wenn ffmpeg verfügbar ist. WhatsApp sendet Audio über Baileys als PTT-Sprachnotiz (audio mit ptt: true) und sendet sichtbaren Text separat von PTT-Audio, da Clients Beschriftungen für Sprachnotizen nicht durchgängig rendern. Das Tool akzeptiert optionale Felder channel und timeoutMs; timeoutMs ist ein Provider-Request-Timeout pro Aufruf in Millisekunden. Werte pro Aufruf überschreiben messages.tts.timeoutMs; konfigurierte TTS-Timeouts überschreiben jeden von Plugins verfassten Provider-Standard.

Gateway-RPC

MethodeZweck
tts.statusAktuellen TTS-Zustand und letzten Versuch lesen.
tts.enableLokale Auto-Präferenz auf always setzen.
tts.disableLokale Auto-Präferenz auf off setzen.
tts.convertEinmalige Umwandlung von Text → Audio.
tts.setProviderLokale Provider-Präferenz setzen.
tts.setPersonaLokale Persona-Präferenz setzen.
tts.providersKonfigurierte Provider und Status auflisten.

Verwandte Themen