Text-to-Speech (TTS)
OpenClaw kann ausgehende Antworten per ElevenLabs, OpenAI oder Edge TTS in Audio umwandeln. Es funktioniert überall dort, wo OpenClaw Audio senden kann; bei Telegram erscheint eine runde Sprachnachricht-Blase.
Unterstützte Dienste
- ElevenLabs (primärer oder Fallback-Provider)
- OpenAI (primärer oder Fallback-Provider; wird auch für Zusammenfassungen verwendet)
- Edge TTS (primärer oder Fallback-Provider; nutzt
node-edge-tts, Standard wenn keine API-Keys vorhanden)
Edge-TTS-Hinweise
Edge TTS nutzt Microsofts Online-Neural-TTS-Dienst über die node-edge-tts-Bibliothek. Es ist ein gehosteter Dienst (nicht lokal), verwendet Microsoft-Endpunkte und benötigt keinen API-Key. node-edge-tts bietet Sprachkonfigurations-Optionen und Ausgabeformate, aber nicht alle Optionen werden vom Edge-Dienst unterstützt. citeturn2search0
Da Edge TTS ein öffentlicher Webdienst ohne veröffentlichtes SLA oder Kontingent ist, solltest du ihn als Best-Effort betrachten. Wenn du garantierte Limits und Support brauchst, verwende OpenAI oder ElevenLabs. Microsofts Speech REST API dokumentiert ein 10-Minuten-Audiolimit pro Anfrage; Edge TTS veröffentlicht keine Limits, also gehe von ähnlichen oder niedrigeren Limits aus. citeturn0search3
Optionale Keys
Wenn du OpenAI oder ElevenLabs verwenden möchtest:
ELEVENLABS_API_KEY(oderXI_API_KEY)OPENAI_API_KEY
Edge TTS benötigt keinen API-Key. Wenn keine API-Keys gefunden werden, verwendet OpenClaw standardmäßig Edge TTS (es sei denn, es wird über messages.tts.edge.enabled=false deaktiviert).
Wenn mehrere Provider konfiguriert sind, wird der ausgewählte Provider zuerst verwendet und die anderen dienen als Fallback.
Auto-Summary nutzt das konfigurierte summaryModel (oder agents.defaults.model.primary), also muss dieser Provider ebenfalls authentifiziert sein, wenn du Zusammenfassungen aktivierst.
Service-Links
- OpenAI Text-to-Speech-Anleitung
- OpenAI Audio-API-Referenz
- ElevenLabs Text to Speech
- ElevenLabs Authentifizierung
- node-edge-tts
- Microsoft Speech-Ausgabeformate
Ist es standardmäßig aktiviert?
Nein. Auto-TTS ist standardmäßig deaktiviert. Aktiviere es in der Konfiguration mit messages.tts.auto oder pro Session mit /tts always (Alias: /tts on).
Edge TTS ist standardmäßig aktiviert, sobald TTS eingeschaltet ist, und wird automatisch verwendet, wenn keine OpenAI- oder ElevenLabs-API-Keys vorhanden sind.
Konfiguration
Die TTS-Konfiguration liegt unter messages.tts in openclaw.json.
Das vollständige Schema findest du in der Gateway-Konfiguration.
Minimale Konfiguration (aktivieren + Provider)
{
messages: {
tts: {
auto: "always",
provider: "elevenlabs",
},
},
}
OpenAI primär mit ElevenLabs-Fallback
{
messages: {
tts: {
auto: "always",
provider: "openai",
summaryModel: "openai/gpt-4.1-mini",
modelOverrides: {
enabled: true,
},
openai: {
apiKey: "openai_api_key",
baseUrl: "https://api.openai.com/v1",
model: "gpt-4o-mini-tts",
voice: "alloy",
},
elevenlabs: {
apiKey: "elevenlabs_api_key",
baseUrl: "https://api.elevenlabs.io",
voiceId: "voice_id",
modelId: "eleven_multilingual_v2",
seed: 42,
applyTextNormalization: "auto",
languageCode: "en",
voiceSettings: {
stability: 0.5,
similarityBoost: 0.75,
style: 0.0,
useSpeakerBoost: true,
speed: 1.0,
},
},
},
},
}
Edge TTS primär (kein API-Key)
{
messages: {
tts: {
auto: "always",
provider: "edge",
edge: {
enabled: true,
voice: "en-US-MichelleNeural",
lang: "en-US",
outputFormat: "audio-24khz-48kbitrate-mono-mp3",
rate: "+10%",
pitch: "-5%",
},
},
},
}
Edge TTS deaktivieren
{
messages: {
tts: {
edge: {
enabled: false,
},
},
},
}
Benutzerdefinierte Limits + Prefs-Pfad
{
messages: {
tts: {
auto: "always",
maxTextLength: 4000,
timeoutMs: 30000,
prefsPath: "~/.openclaw/settings/tts.json",
},
},
}
Nur nach eingehender Sprachnachricht mit Audio antworten
{
messages: {
tts: {
auto: "inbound",
},
},
}
Auto-Summary für lange Antworten deaktivieren
{
messages: {
tts: {
auto: "always",
},
},
}
Dann ausführen:
/tts summary off
Hinweise zu den Feldern
auto: Auto-TTS-Modus (off,always,inbound,tagged).inboundsendet Audio nur nach einer eingehenden Sprachnachricht.taggedsendet Audio nur, wenn die Antwort[[tts]]-Tags enthält.
enabled: Legacy-Toggle (Doctor migriert dies zuauto).mode:"final"(Standard) oder"all"(enthält Tool-/Block-Replies).provider:"elevenlabs","openai"oder"edge"(Fallback erfolgt automatisch).- Wenn
providernicht gesetzt ist, bevorzugt OpenClawopenai(falls Key vorhanden), dannelevenlabs(falls Key vorhanden), sonstedge. summaryModel: optionales günstiges Modell für Auto-Summary; Standard istagents.defaults.model.primary.- Akzeptiert
provider/modeloder einen konfigurierten Modell-Alias.
- Akzeptiert
modelOverrides: erlaubt dem Modell, TTS-Direktiven auszugeben (standardmäßig an).allowProviderist standardmäßigfalse(Provider-Wechsel ist opt-in).
maxTextLength: hartes Limit für TTS-Input (Zeichen)./tts audioschlägt fehl, wenn überschritten.timeoutMs: Request-Timeout (ms).prefsPath: überschreibt den lokalen Prefs-JSON-Pfad (Provider/Limit/Summary).apiKey-Werte fallen auf Umgebungsvariablen zurück (ELEVENLABS_API_KEY/XI_API_KEY,OPENAI_API_KEY).elevenlabs.baseUrl: überschreibt die ElevenLabs-API-Basis-URL.openai.baseUrl: überschreibt den OpenAI-TTS-Endpunkt.- Auflösungsreihenfolge:
messages.tts.openai.baseUrl->OPENAI_TTS_BASE_URL->https://api.openai.com/v1 - Nicht-Standardwerte werden als OpenAI-kompatible TTS-Endpunkte behandelt, sodass benutzerdefinierte Modell- und Stimmnamen akzeptiert werden.
- Auflösungsreihenfolge:
elevenlabs.voiceSettings:stability,similarityBoost,style:0..1useSpeakerBoost:true|falsespeed:0.5..2.0(1.0 = normal)
elevenlabs.applyTextNormalization:auto|on|offelevenlabs.languageCode: 2-stelliger ISO 639-1-Code (z. B.en,de)elevenlabs.seed: Integer0..4294967295(Best-Effort-Determinismus)edge.enabled: Edge-TTS-Nutzung erlauben (Standardtrue; kein API-Key).edge.voice: Edge-Neural-Voice-Name (z. B.en-US-MichelleNeural).edge.lang: Sprachcode (z. B.en-US).edge.outputFormat: Edge-Ausgabeformat (z. B.audio-24khz-48kbitrate-mono-mp3).- Gültige Werte findest du bei den Microsoft-Speech-Ausgabeformaten; nicht alle Formate werden von Edge unterstützt.
edge.rate/edge.pitch/edge.volume: Prozent-Strings (z. B.+10%,-5%).edge.saveSubtitles: JSON-Untertitel neben der Audiodatei speichern.edge.proxy: Proxy-URL für Edge-TTS-Anfragen.edge.timeoutMs: Request-Timeout-Override (ms).
Modellgesteuerte Overrides (standardmäßig an)
Standardmäßig kann das Modell TTS-Direktiven für eine einzelne Antwort ausgeben.
Wenn messages.tts.auto auf tagged steht, sind diese Direktiven erforderlich, um Audio auszulösen.
Wenn aktiviert, kann das Modell [[tts:...]]-Direktiven ausgeben, um die Stimme für eine einzelne Antwort zu überschreiben, plus einen optionalen [[tts:text]]...[[/tts:text]]-Block für expressive Tags (Lachen, Gesangs-Cues usw.), die nur im Audio erscheinen sollen.
provider=...-Direktiven werden ignoriert, es sei denn modelOverrides.allowProvider: true.
Beispiel-Reply-Payload:
Here you go.
[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
Verfügbare Direktiven-Keys (wenn aktiviert):
provider(openai|elevenlabs|edge, erfordertallowProvider: true)voice(OpenAI-Stimme) odervoiceId(ElevenLabs)model(OpenAI-TTS-Modell oder ElevenLabs-Modell-ID)stability,similarityBoost,style,speed,useSpeakerBoostapplyTextNormalization(auto|on|off)languageCode(ISO 639-1)seed
Alle Modell-Overrides deaktivieren:
{
messages: {
tts: {
modelOverrides: {
enabled: false,
},
},
},
}
Optionale Allowlist (Provider-Wechsel erlauben, andere Einstellungen konfigurierbar lassen):
{
messages: {
tts: {
modelOverrides: {
enabled: true,
allowProvider: true,
allowSeed: false,
},
},
},
}
Benutzerspezifische Einstellungen
Slash-Commands schreiben lokale Overrides in prefsPath (Standard: ~/.openclaw/settings/tts.json, überschreibbar mit OPENCLAW_TTS_PREFS oder messages.tts.prefsPath).
Gespeicherte Felder:
enabledprovidermaxLength(Summary-Schwellwert; Standard 1500 Zeichen)summarize(Standardtrue)
Diese überschreiben messages.tts.* für den jeweiligen Host.
Ausgabeformate (fest)
- Telegram: Opus-Sprachnachricht (
opus_48000_64von ElevenLabs,opusvon OpenAI).- 48kHz / 64kbps ist ein guter Kompromiss für Sprachnachrichten und nötig für die runde Blase.
- Andere Channels: MP3 (
mp3_44100_128von ElevenLabs,mp3von OpenAI).- 44,1kHz / 128kbps ist die Standard-Balance für Sprachklarheit.
- Edge TTS: verwendet
edge.outputFormat(Standardaudio-24khz-48kbitrate-mono-mp3).node-edge-ttsakzeptiert einoutputFormat, aber nicht alle Formate sind über den Edge-Dienst verfügbar. citeturn2search0- Ausgabeformat-Werte folgen den Microsoft-Speech-Ausgabeformaten (einschließlich Ogg/WebM Opus). citeturn1search0
- Telegrams
sendVoiceakzeptiert OGG/MP3/M4A; verwende OpenAI/ElevenLabs, wenn du garantierte Opus-Sprachnachrichten brauchst. citeturn1search1 - Wenn das konfigurierte Edge-Ausgabeformat fehlschlägt, versucht OpenClaw es erneut mit MP3.
OpenAI/ElevenLabs-Formate sind fest; Telegram erwartet Opus für die Sprachnachrichten-UX.
Auto-TTS-Verhalten
Wenn aktiviert, verhält sich OpenClaw wie folgt:
- Überspringt TTS, wenn die Antwort bereits Medien oder eine
MEDIA:-Direktive enthält. - Überspringt sehr kurze Antworten (< 10 Zeichen).
- Fasst lange Antworten zusammen, wenn aktiviert, mit
agents.defaults.model.primary(odersummaryModel). - Hängt das generierte Audio an die Antwort an.
Wenn die Antwort maxLength überschreitet und die Zusammenfassung deaktiviert ist (oder kein API-Key für das Summary-Modell vorhanden), wird das Audio übersprungen und die normale Textantwort gesendet.
Ablaufdiagramm
Antwort -> TTS aktiviert?
nein -> Text senden
ja -> Hat Medien / MEDIA: / zu kurz?
ja -> Text senden
nein -> Länge > Limit?
nein -> TTS -> Audio anhängen
ja -> Summary aktiviert?
nein -> Text senden
ja -> Zusammenfassen (summaryModel oder agents.defaults.model.primary)
-> TTS -> Audio anhängen
Slash-Command-Nutzung
Es gibt einen einzigen Command: /tts.
Siehe Slash-Commands für Details zur Aktivierung.
Discord-Hinweis: /tts ist ein eingebauter Discord-Befehl, daher registriert OpenClaw dort /voice als nativen Befehl. Text-Eingabe von /tts ... funktioniert trotzdem.
/tts off
/tts always
/tts inbound
/tts tagged
/tts status
/tts provider openai
/tts limit 2000
/tts summary off
/tts audio Hello from OpenClaw
Hinweise:
- Commands erfordern einen autorisierten Absender (Allowlist-/Owner-Regeln gelten weiterhin).
commands.textoder die native Command-Registrierung muss aktiviert sein.off|always|inbound|taggedsind pro Session schaltbar (/tts onist ein Alias für/tts always).limitundsummarywerden in lokalen Prefs gespeichert, nicht in der Hauptkonfiguration./tts audiogeneriert eine einmalige Audio-Antwort (schaltet TTS nicht dauerhaft ein).
Agent-Tool
Das tts-Tool wandelt Text in Sprache um und gibt einen MEDIA:-Pfad zurück. Wenn das Ergebnis Telegram-kompatibel ist, fügt das Tool [[audio_as_voice]] hinzu, damit Telegram eine Sprachnachrichten-Blase sendet.
Gateway-RPC
Gateway-Methoden:
tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers