Zum Hauptinhalt springen

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

OpenClaw kann ausgehende Antworten bei 14 Speech-Providern in Audio umwandeln und native Sprachnachrichten auf Feishu, Matrix, Telegram und WhatsApp, Audio-Anhä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 Echtzeit-Providers, statt diesen TTS-Pfad aufzurufen, während transcription-Sitzungen keine Assistenten-Sprachantwort synthetisieren.

Schnellstart

1

Pick a provider

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

Set the API key

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

Enable in config

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

Try it in chat

/tts status zeigt den aktuellen Zustand. /tts audio Hello from OpenClaw sendet eine einmalige Audio-Antwort.
Auto-TTS ist standardmäßig aus. Wenn messages.tts.provider nicht gesetzt ist, wählt OpenClaw den ersten konfigurierten Provider in der Registry-Reihenfolge für die automatische Auswahl aus. Das integrierte tts-Agent-Tool ist nur für explizite Absichten gedacht: gewöhnlicher Chat bleibt Text, sofern der Benutzer nicht Audio anfordert, /tts verwendet oder Auto-TTS/direktive Sprache aktiviert.

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 Edge Neural 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 (Legacy-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-Sprachnotiz wird 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 sind Fallback-Optionen. 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-Neural-TTS-Dienst von Microsoft Edge über node-edge-tts. Es ist ein öffentlicher Webdienst ohne veröffentlichtes SLA oder Kontingent; behandeln Sie ihn als Best Effort. Die Legacy-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 liegt 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",
          voice: "en-US-JennyNeural",
          lang: "en-US",
          outputFormat: "audio-24khz-48kbitrate-mono-mp3",
          voiceNoteOutputFormat: "ogg-24khz-16bit-mono-opus",
        },
      },
    },
  },
}

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: { voiceId: "EXAVITQu4vr4xnSDxMaL" },
          },
        },
      },
    ],
  },
}
Um eine agentenspezifische Persona festzulegen, setzen Sie agents.list[].tts.persona zusammen mit der Provider-Konfiguration. Sie überschreibt die globale messages.tts.persona nur für diesen Agenten. Rangfolge 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 Modell-Overrides aktiviert sind
Kanal- und Konto-Overrides verwenden dieselbe Struktur wie messages.tts und werden per Deep Merge über die früheren Ebenen gelegt. So können gemeinsame Provider-Anmeldedaten in messages.tts bleiben, während ein Kanal oder Bot-Konto nur Stimme, Modell, Persona oder Automatikmodus ändert:
{
  messages: {
    tts: {
      provider: "openai",
      providers: {
        openai: { apiKey: "${OPENAI_API_KEY}", model: "gpt-4o-mini-tts" },
      },
    },
  },
  channels: {
    feishu: {
      accounts: {
        english: {
          tts: {
            providers: {
              openai: { voice: "shimmer" },
            },
          },
        },
      },
    },
  },
}

Personas

Eine Persona ist eine stabile gesprochene Identität, die deterministisch providerübergreifend angewendet werden kann. Sie kann einen Provider bevorzugen, eine providerneutrale Prompt-Absicht definieren und providerspezifische Bindings für Stimmen, Modelle, Prompt-Vorlagen, Seeds und Spracheinstellungen enthalten.

Minimale Persona

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

Vollständige Persona (providerneutraler 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",
              voiceName: "Algieba",
              promptTemplate: "audio-profile-v1",
            },
            openai: { model: "gpt-4o-mini-tts", voice: "cedar" },
            elevenlabs: {
              voiceId: "voice_id",
              modelId: "eleven_multilingual_v2",
              seed: 42,
              voiceSettings: {
                stability: 0.65,
                similarityBoost: 0.8,
                style: 0.25,
                useSpeakerBoost: true,
                speed: 0.95,
              },
            },
          },
        },
      },
    },
  },
}

Auflösung der Persona

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 mit expliziten Vorgaben zuerst:
  1. Direkte Overrides (CLI, Gateway, Talk, erlaubte 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. Erlaubte, vom Modell ausgegebene TTS-Direktiv-Overrides

Wie Provider Persona-Prompts verwenden

Persona-Prompt-Felder (profile, scene, sampleContext, style, accent, pacing, constraints) sind providerneutral. Jeder Provider entscheidet selbst, wie er sie verwendet:
Fasst 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 erzeugt 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 providerspezifischen Persona-Bindings unter personas.<id>.providers.<provider>. Persona-Prompt-Felder werden ignoriert, sofern der Provider keine eigene Zuordnung für Persona-Prompts implementiert.

Fallback-Richtlinie

fallbackPolicy steuert das Verhalten, wenn eine Persona kein Binding für den versuchten Provider hat:
RichtlinieVerhalten
preserve-personaStandard. Providerneutrale Prompt-Felder bleiben verfügbar; der Provider kann sie verwenden oder ignorieren.
provider-defaultsDie Persona wird für diesen Versuch aus der Prompt-Vorbereitung ausgelassen; der Provider verwendet seine neutralen Standardwerte, während der Fallback zu anderen Providern fortgesetzt wird.
failDiesen Provider-Versuch mit reasonCode: "not_configured" und personaBinding: "missing" überspringen. Fallback-Provider werden weiterhin versucht.
Der gesamte TTS-Request 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, Voice-IDs und Locales aus talk.catalog auswählen und sie über die Talk-Sitzung oder den Handoff-Request übergeben. Das Öffnen einer Sprachsitzung sollte messages.tts oder globale Talk-Provider-Standards 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:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
Wenn messages.tts.auto "tagged" ist, sind Direktiven erforderlich, um Audio auszulösen. Die Streaming-Blockauslieferung entfernt Direktiven aus sichtbarem Text, bevor der Kanal sie sieht, auch wenn sie über benachbarte Blöcke verteilt sind. provider=... wird ignoriert, sofern modelOverrides.allowProvider: true nicht 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-Direktivwarnungen gemeldet. Verfügbare Direktivschlüssel:
  • provider (registrierte Provider-ID; erfordert allowProvider: true)
  • 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-Emotions-Tag)
  • 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 zusätzlich /voice, weil /tts ein integrierter Discord-Befehl ist. Textuelles /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 die 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 einmalig als Audio. Es speichert nur einen Hash dieser Antwort im Sitzungseintrag, um doppelte Sprachausgaben zu unterdrücken.
  • /tts audio erzeugt eine einmalige Audioantwort (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: ... sowie Details pro Versuch (provider:outcome(reasonCode) latency).
  • /status zeigt den aktiven TTS-Modus sowie den konfigurierten Provider, das Modell, die Stimme und bereinigte Metadaten für benutzerdefinierte Endpunkte, 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 Umgebungsvariablen OPENCLAW_TTS_PREFS oder messages.tts.prefsPath.
Gespeichertes FeldWirkung
autoLokaler Auto-TTS-Override (always, off, …)
providerLokaler Override des primären Providers
personaLokaler Persona-Override
maxLengthSchwellenwert für Zusammenfassung (standardmäßig 1500 Zeichen)
summarizeSchalter für Zusammenfassung (standardmäßig true)
Diese überschreiben die effektive Konfiguration aus messages.tts plus den aktiven Block agents.list[].tts für diesen Host.

Ausgabeformate (fest)

Die TTS-Sprachauslieferung wird durch Kanalfähigkeiten gesteuert. Kanal-Plugins geben an, ob TTS im Sprachstil Provider nach einem nativen Ziel voice-note fragen soll oder ob normale audio-file-Synthese beibehalten und kompatible Ausgabe nur für die Sprachauslieferung markiert werden soll.
  • Kanäle mit Sprachnotiz-Unterstützung: Sprachnotiz-Antworten bevorzugen Opus (opus_48000_64 von ElevenLabs, opus von OpenAI).
    • 48 kHz / 64 kbit/s 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 nach 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 Originaldatei 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 kbit/s ist die Standardbalance für Sprachverständlichkeit.
  • MiniMax: MP3 (speech-2.8-hd-Modell, 32-kHz-Abtastrate) für normale Audioanhänge. Für vom Kanal angegebene Sprachnotiz-Ziele transkodiert OpenClaw das MiniMax-MP3 vor der Auslieferung mit ffmpeg nach 48 kHz Opus, wenn der Kanal Transkodierung angibt.
  • Xiaomi MiMo: Standardmäßig MP3 oder WAV, wenn konfiguriert. Für vom Kanal angegebene Sprachnotiz-Ziele transkodiert OpenClaw die Xiaomi-Ausgabe vor der Auslieferung mit ffmpeg nach 48 kHz Opus, wenn der Kanal Transkodierung angibt.
  • Lokale CLI: verwendet das konfigurierte outputFormat. Sprachnotiz-Ziele werden nach Ogg/Opus konvertiert, und Telefonieausgabe wird mit ffmpeg in rohes 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 nach 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 von 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 beim 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 je nach Kanal festgelegt (siehe oben).

Auto-TTS-Verhalten

Wenn messages.tts.auto aktiviert ist, führt OpenClaw Folgendes aus:
  • Überspringt TTS, wenn die Antwort bereits Medien oder eine MEDIA:-Direktive 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 erzeugte Audio an die Antwort an.
  • In mode: "final" wird weiterhin nur Audio-TTS für gestreamte finale Antworten gesendet, nachdem der Textstream abgeschlossen ist; die erzeugten Medien durchlaufen dieselbe Kanal-Mediennormalisierung wie normale Antwortanhänge.
Wenn die Antwort maxLength überschreitet und die 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 / 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 bieten ein gutes Verhältnis aus Verständlichkeit 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-eigenes PCM (Inworld 22050 Hz, Google 24 kHz) oder ulaw_8000 von Gradium für Telefonie.
Hinweise pro Provider:
  • Feishu / WhatsApp-Transcodierung: Wenn eine Sprachnotiz-Antwort als MP3/WebM/WAV/M4A ankommt, transcodiert das Kanal-Plugin sie 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 darauf zurück, die Originaldatei anzuhängen; der WhatsApp-Versand schlägt fehl, statt eine inkompatible PTT-Nutzlast zu posten.
  • MiniMax / Xiaomi MiMo: Standardmäßig MP3 (32 kHz für MiniMax speech-2.8-hd); wird für Sprachnotiz-Ziele über ffmpeg zu 48 kHz Opus transcodiert.
  • Lokale CLI: Verwendet das konfigurierte outputFormat. Sprachnotiz-Ziele werden zu Ogg/Opus konvertiert und Telefonie-Ausgabe zu rohem 16-kHz-Mono-PCM.
  • Google Gemini: Gibt rohes 24-kHz-PCM zurück. OpenClaw verpackt es für Anhänge als WAV, transcodiert es für Sprachnotiz-Ziele zu 48 kHz Opus und gibt PCM direkt für Talk/Telefonie zurück.
  • Inworld: MP3-Anhänge, natives OGG_OPUS für Sprachnotizen, 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. Natives Opus-Format für Sprachnotizen 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 garantiert 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" enthält zusätzlich zu finalen Antworten auch Tool-/Block-Antworten.
provider
string
Sprach-Provider-ID. Wenn nicht gesetzt, verwendet OpenClaw den ersten konfigurierten Provider in der Registry-Auto-Select-Reihenfolge. Das veraltete 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 automatische Zusammenfassung; Standard ist 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, indiziert nach Sprach-Provider-ID. 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 Pfad für das Prefs-JSON (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 Überschreibung des Azure Speech-Endpunkts (Alias baseUrl).
voice
string
Azure-Voice-ShortName. Standard en-US-JennyNeural.
lang
string
SSML-Sprachcode. Standard en-US.
outputFormat
string
Azure X-Microsoft-OutputFormat für Standard-Audio. 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).
voiceId
string
ElevenLabs-Voice-ID.
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-stelliger 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 ausgelassen, kann TTS models.providers.google.apiKey vor dem Env-Fallback wiederverwenden.
model
string
Gemini-TTS-Modell. Standard gemini-3.1-flash-tts-preview.
voiceName
string
Vorgefertigter Gemini-Voice-Name. Standard Kore. Alias: voice.
audioProfile
string
Stil-Prompt in natürlicher Sprache, der dem gesprochenen Text vorangestellt wird.
speakerName
string
Optionales Sprecherlabel, das 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
Env: GRADIUM_API_KEY.
baseUrl
string
Standard https://api.gradium.ai.
voiceId
string
Standard Emma (YTpq7expH9539ERJ).

Inworld primär

apiKey
string
Env: 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.
voiceId
string
Standard Sarah.
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 Audio-Anhä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.
voice
string
Name der neuronalen Microsoft-Stimme (z. B. en-US-MichelleNeural).
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
Override für Anfrage-Timeout (ms).
edge.*
object
veraltet
Legacy-Alias. Führen Sie openclaw doctor --fix aus, um persistierte Konfiguration nach 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. Env: MINIMAX_API_HOST.
model
string
Standard speech-2.8-hd. Env: MINIMAX_TTS_MODEL.
voiceId
string
Standard English_expressive_narrator. Env: MINIMAX_TTS_VOICE_ID.
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).
voice
string
Stimmenname (z. B. alloy, cedar).
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-Anfrage-Bodys zusammengeführt werden. Verwenden Sie dies für OpenAI-kompatible Endpunkte wie Kokoro, die Provider-spezifische Schlüssel wie lang erfordern; unsichere Prototype-Schlüssel werden ignoriert.
baseUrl
string
OpenAI-TTS-Endpunkt überschreiben. 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
Env: 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.
voice
string
Standard af_alloy. Alias: voiceId.
responseFormat
"mp3" | "pcm"
Standard mp3.
speed
number
Provider-native Geschwindigkeitsüberschreibung.
apiKey
string
Env: VOLCENGINE_TTS_API_KEY oder BYTEPLUS_SEED_SPEECH_API_KEY.
resourceId
string
Standard seed-tts-1.0. Env: VOLCENGINE_TTS_RESOURCE_ID. Verwenden Sie seed-tts-2.0, wenn Ihr Projekt eine TTS-2.0-Berechtigung hat.
appKey
string
App-Key-Header. Standard aGjiRDfUWi. Env: VOLCENGINE_TTS_APP_KEY.
baseUrl
string
Den Seed-Speech-TTS-HTTP-Endpunkt überschreiben. Env: VOLCENGINE_TTS_BASE_URL.
voice
string
Stimmentyp. Standard en_female_anna_mars_bigtts. Env: VOLCENGINE_TTS_VOICE.
speedRatio
number
Provider-natives Geschwindigkeitsverhältnis.
emotion
string
Provider-natives Emotions-Tag.
appId / token / cluster
string
veraltet
Legacy-Felder der Volcengine Speech Console. Env: VOLCENGINE_TTS_APPID, VOLCENGINE_TTS_TOKEN, VOLCENGINE_TTS_CLUSTER (Standard volcano_tts).
apiKey
string
Env: XAI_API_KEY.
baseUrl
string
Standard https://api.x.ai/v1. Env: XAI_BASE_URL.
voiceId
string
Standard eve. Live-Stimmen: ara, eve, leo, rex, sal, una.
language
string
BCP-47-Sprachcode oder auto. Standard en.
responseFormat
"mp3" | "wav" | "pcm" | "mulaw" | "alaw"
Standard mp3.
speed
number
Provider-native Geschwindigkeitsüberschreibung.
apiKey
string
Env: XIAOMI_API_KEY.
baseUrl
string
Standard https://api.xiaomimimo.com/v1. Env: XIAOMI_BASE_URL.
model
string
Standard mimo-v2.5-tts. Env: XIAOMI_TTS_MODEL. Unterstützt auch mimo-v2-tts.
voice
string
Standard mimo_default. Env: XIAOMI_TTS_VOICE.
format
"mp3" | "wav"
Standard mp3. Env: XIAOMI_TTS_FORMAT.
style
string
Optionale natürlichsprachliche Stilanweisung, die als Benutzernachricht gesendet wird; sie wird nicht gesprochen.

Agenten-Tool

Das Tool tts wandelt Text in Sprache um und gibt einen Audio-Anhang für die Antwortzustellung zurück. In Feishu, Matrix, Telegram und WhatsApp wird das Audio als Sprachnachricht statt als Datei-Anhang 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 auf Sprachnotizen nicht zuverlässig anzeigen. Das Tool akzeptiert optionale Felder channel und timeoutMs; timeoutMs ist ein anrufbezogener Provider-Anfrage-Timeout in Millisekunden.

Gateway-RPC

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

Verwandt