Przejdź do głównej treści
OpenClaw może konwertować odpowiedzi wychodzące na audio przy użyciu 14 dostawców mowy i dostarczać natywne wiadomości głosowe w Feishu, Matrix, Telegram i WhatsApp, załączniki audio wszędzie indziej oraz strumienie PCM/Ulaw dla telefonii i Talk. TTS to połowa trybu stt-tts w Talk odpowiedzialna za wyjście mowy. Natywne dla dostawcy sesje Talk typu realtime syntetyzują mowę wewnątrz dostawcy czasu rzeczywistego zamiast wywoływać tę ścieżkę TTS, natomiast sesje transcription nie syntetyzują głosowej odpowiedzi asystenta.

Szybki start

1

Wybierz dostawcę

OpenAI i ElevenLabs to najbardziej niezawodne opcje hostowane. Microsoft i Local CLI działają bez klucza API. Pełną listę znajdziesz w macierzy dostawców.
2

Ustaw klucz API

Wyeksportuj zmienną środowiskową dla swojego dostawcy (na przykład OPENAI_API_KEY, ELEVENLABS_API_KEY). Microsoft i Local CLI nie wymagają klucza.
3

Włącz w konfiguracji

Ustaw messages.tts.auto: "always" i messages.tts.provider:
{
  messages: {
    tts: {
      auto: "always",
      provider: "elevenlabs",
    },
  },
}
4

Wypróbuj w czacie

/tts status pokazuje bieżący stan. /tts audio Hello from OpenClaw wysyła jednorazową odpowiedź audio.
Auto-TTS jest domyślnie wyłączone. Gdy messages.tts.provider nie jest ustawione, OpenClaw wybiera pierwszego skonfigurowanego dostawcę zgodnie z kolejnością automatycznego wyboru w rejestrze. Wbudowane narzędzie agenta tts działa tylko przy wyraźnej intencji: zwykły czat pozostaje tekstowy, chyba że użytkownik poprosi o audio, użyje /tts albo włączy mowę Auto-TTS/dyrektywy.

Obsługiwani dostawcy

DostawcaUwierzytelnianieUwagi
Azure SpeechAZURE_SPEECH_KEY + AZURE_SPEECH_REGION (także AZURE_SPEECH_API_KEY, SPEECH_KEY, SPEECH_REGION)Natywne wyjście notatki głosowej Ogg/Opus i telefonia.
DeepInfraDEEPINFRA_API_KEYTTS zgodny z OpenAI. Domyślnie hexgrad/Kokoro-82M.
ElevenLabsELEVENLABS_API_KEY lub XI_API_KEYKlonowanie głosu, wielojęzyczność, deterministycznie przez seed; strumieniowane dla odtwarzania głosu w Discord.
Google GeminiGEMINI_API_KEY lub GOOGLE_API_KEYWsadowe TTS w Gemini API; uwzględnia personę przez promptTemplate: "audio-profile-v1".
GradiumGRADIUM_API_KEYWyjście notatki głosowej i telefonii.
InworldINWORLD_API_KEYStreamingowe API TTS. Natywna notatka głosowa Opus i telefonia PCM.
Local CLIbrakUruchamia skonfigurowane lokalne polecenie TTS.
MicrosoftbrakPubliczne neuronowe TTS Edge przez node-edge-tts. Najlepszy możliwy wysiłek, bez SLA.
MiniMaxMINIMAX_API_KEY (lub plan Token: MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY, MINIMAX_CODING_API_KEY)API T2A v2. Domyślnie speech-2.8-hd.
OpenAIOPENAI_API_KEYUżywany także do automatycznego podsumowania; obsługuje personę instructions.
OpenRouterOPENROUTER_API_KEY (może ponownie używać models.providers.openrouter.apiKey)Domyślny model hexgrad/kokoro-82m.
VolcengineVOLCENGINE_TTS_API_KEY lub BYTEPLUS_SEED_SPEECH_API_KEY (starsze AppID/token: VOLCENGINE_TTS_APPID/_TOKEN)HTTP API BytePlus Seed Speech.
VydraVYDRA_API_KEYWspólny dostawca obrazów, wideo i mowy.
xAIXAI_API_KEYWsadowe TTS xAI. Natywna notatka głosowa Opus nie jest obsługiwana.
Xiaomi MiMoXIAOMI_API_KEYMiMo TTS przez uzupełnienia czatu Xiaomi.
Jeśli skonfigurowano wielu dostawców, wybrany dostawca jest używany jako pierwszy, a pozostali są opcjami zapasowymi. Automatyczne podsumowanie używa summaryModel (lub agents.defaults.model.primary), więc ten dostawca także musi być uwierzytelniony, jeśli podsumowania pozostają włączone.
Dołączony dostawca Microsoft używa internetowej usługi neuronowego TTS Microsoft Edge przez node-edge-tts. Jest to publiczna usługa WWW bez opublikowanego SLA ani limitu — traktuj ją jako najlepszy możliwy wysiłek. Starszy identyfikator dostawcy edge jest normalizowany do microsoft, a openclaw doctor --fix przepisuje utrwaloną konfigurację; nowe konfiguracje powinny zawsze używać microsoft.

Konfiguracja

Konfiguracja TTS znajduje się pod messages.tts w ~/.openclaw/openclaw.json. Wybierz preset i dostosuj blok dostawcy:
{
  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",
        },
      },
    },
  },
}
Dla Xiaomi mimo-v2.5-tts-voicedesign pomiń speakerVoice i ustaw style na prompt projektowania głosu. OpenClaw wysyła ten prompt jako wiadomość user TTS i nie wysyła audio.voice dla modelu voicedesign.

Nadpisania głosu dla poszczególnych agentów

Użyj agents.list[].tts, gdy jeden agent powinien mówić z innym dostawcą, głosem, modelem, personą lub trybem auto-TTS. Blok agenta jest głęboko scalany z messages.tts, więc dane uwierzytelniające dostawcy mogą pozostać w globalnej konfiguracji dostawcy:
{
  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" },
          },
        },
      },
    ],
  },
}
Aby przypiąć personę dla konkretnego agenta, ustaw agents.list[].tts.persona obok konfiguracji dostawcy — zastępuje ona globalne messages.tts.persona tylko dla tego agenta. Kolejność pierwszeństwa dla automatycznych odpowiedzi, /tts audio, /tts status i narzędzia agenta tts:
  1. messages.tts
  2. aktywne agents.list[].tts
  3. nadpisanie kanału, gdy kanał obsługuje channels.<channel>.tts
  4. nadpisanie konta, gdy kanał przekazuje channels.<channel>.accounts.<id>.tts
  5. lokalne preferencje /tts dla tego hosta
  6. dyrektywy inline [[tts:...]], gdy nadpisania modelu są włączone
Nadpisania kanału i konta używają tego samego kształtu co messages.tts i głęboko scalają się z wcześniejszymi warstwami, więc współdzielone dane uwierzytelniające dostawcy mogą pozostać w messages.tts, podczas gdy kanał lub konto bota zmienia tylko głos lektora, model, personę albo tryb automatyczny:
{
  messages: {
    tts: {
      provider: "openai",
      providers: {
        openai: { apiKey: "${OPENAI_API_KEY}", model: "gpt-4o-mini-tts" },
      },
    },
  },
  channels: {
    feishu: {
      accounts: {
        english: {
          tts: {
            providers: {
              openai: { speakerVoice: "shimmer" },
            },
          },
        },
      },
    },
  },
}

Persony

Persona to stabilna tożsamość mówiona, którą można deterministycznie stosować u różnych dostawców. Może preferować jednego dostawcę, definiować neutralną wobec dostawców intencję promptu oraz przenosić powiązania specyficzne dla dostawcy dla głosów, modeli, szablonów promptów, ziaren i ustawień głosu.

Minimalna persona

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

Pełna persona (prompt neutralny wobec dostawcy)

{
  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,
              },
            },
          },
        },
      },
    },
  },
}

Rozstrzyganie persony

Aktywna persona jest wybierana deterministycznie:
  1. lokalna preferencja /tts persona <id>, jeśli ustawiona.
  2. messages.tts.persona, jeśli ustawione.
  3. Brak persony.
Wybór dostawcy działa według zasady „najpierw jawne ustawienia”:
  1. Bezpośrednie nadpisania (CLI, Gateway, Talk, dozwolone dyrektywy TTS).
  2. Lokalna preferencja /tts provider <id>.
  3. provider aktywnej persony.
  4. messages.tts.provider.
  5. Automatyczny wybór z rejestru.
Dla każdej próby dostawcy OpenClaw scala konfiguracje w tej kolejności:
  1. messages.tts.providers.<id>
  2. messages.tts.personas.<persona>.providers.<id>
  3. Zaufane nadpisania żądania
  4. Dozwolone nadpisania z dyrektyw TTS wyemitowanych przez model

Jak dostawcy używają promptów persony

Pola promptu persony (profile, scene, sampleContext, style, accent, pacing, constraints) są neutralne wobec dostawcy. Każdy dostawca decyduje, jak ich używać:
Opakowuje pola promptu persony w strukturę promptu Gemini TTS tylko wtedy, gdy efektywna konfiguracja dostawcy Google ustawia promptTemplate: "audio-profile-v1" albo personaPrompt. Starsze pola audioProfile i speakerName nadal są dołączane na początku jako tekst promptu specyficzny dla Google. Tagi audio inline, takie jak [whispers] lub [laughs] wewnątrz bloku [[tts:text]], są zachowywane w transkrypcie Gemini; OpenClaw nie generuje tych tagów.
Mapuje pola promptu persony na pole żądania instructions tylko wtedy, gdy nie skonfigurowano jawnych OpenAI instructions. Jawne instructions zawsze ma pierwszeństwo.
Używają tylko powiązań persony specyficznych dla dostawcy pod personas.<id>.providers.<provider>. Pola promptu persony są ignorowane, chyba że dostawca implementuje własne mapowanie promptu persony.

Zasada fallbacku

fallbackPolicy kontroluje zachowanie, gdy persona nie ma powiązania dla próbowanego dostawcy:
ZasadaZachowanie
preserve-personaDomyślne. Pola promptu neutralne wobec dostawcy pozostają dostępne; dostawca może ich użyć lub je zignorować.
provider-defaultsPersona jest pomijana podczas przygotowania promptu dla tej próby; dostawca używa swoich neutralnych ustawień domyślnych, podczas gdy fallback do innych dostawców trwa dalej.
failPomiń tę próbę dostawcy z reasonCode: "not_configured" i personaBinding: "missing". Dostawcy fallbacku nadal są próbowani.
Całe żądanie TTS kończy się niepowodzeniem tylko wtedy, gdy każdy próbowany dostawca zostanie pominięty albo zakończy się niepowodzeniem. Wybór dostawcy sesji Talk jest ograniczony do sesji. Klient Talk powinien wybierać identyfikatory dostawców, identyfikatory modeli, identyfikatory głosów i ustawienia regionalne z talk.catalog oraz przekazywać je przez sesję Talk lub żądanie handoff. Otwarcie sesji głosowej nie powinno mutować messages.tts ani globalnych domyślnych ustawień dostawców Talk.

Dyrektywy sterowane modelem

Domyślnie asystent może emitować dyrektywy [[tts:...]], aby nadpisać głos, model lub prędkość dla pojedynczej odpowiedzi, a także opcjonalny blok [[tts:text]]...[[/tts:text]] dla wskazówek ekspresyjnych, które powinny pojawić się tylko w audio:
Here you go.

[[tts:speakerVoiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
Gdy messages.tts.auto ma wartość "tagged", dyrektywy są wymagane, aby wyzwolić audio. Dostarczanie bloków strumieniowych usuwa dyrektywy z widocznego tekstu, zanim kanał je zobaczy, nawet gdy są podzielone między sąsiednie bloki. provider=... jest ignorowane, chyba że modelOverrides.allowProvider: true. Gdy odpowiedź deklaruje provider=..., pozostałe klucze w tej dyrektywie są parsowane tylko przez tego dostawcę; nieobsługiwane klucze są usuwane i raportowane jako ostrzeżenia dyrektyw TTS. Dostępne klucze dyrektyw:
  • provider (zarejestrowany identyfikator dostawcy; wymaga allowProvider: true)
  • speakerVoice / speakerVoiceId (starsze aliasy: voice, voiceName, voice_name, google_voice, voiceId)
  • model / google_model
  • stability, similarityBoost, style, speed, useSpeakerBoost
  • vol / volume (głośność MiniMax, 0–10)
  • pitch (całkowita wysokość tonu MiniMax, −12 do 12; wartości ułamkowe są obcinane)
  • emotion (tag emocji Volcengine)
  • applyTextNormalization (auto|on|off)
  • languageCode (ISO 639-1)
  • seed
Całkowicie wyłącz nadpisania modelu:
{ messages: { tts: { modelOverrides: { enabled: false } } } }
Zezwól na przełączanie dostawców, pozostawiając inne pokrętła konfigurowalne:
{ messages: { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false } } } }

Polecenia slash

Pojedyncze polecenie /tts. W Discord OpenClaw rejestruje także /voice, ponieważ /tts jest wbudowanym poleceniem Discord — tekstowe /tts ... nadal działa.
/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>
Polecenia wymagają autoryzowanego nadawcy (obowiązują reguły listy dozwolonych/właściciela) oraz włączenia commands.text albo natywnej rejestracji poleceń.
Uwagi dotyczące zachowania:
  • /tts on zapisuje lokalną preferencję TTS jako always; /tts off zapisuje ją jako off.
  • /tts chat on|off|default zapisuje nadpisanie auto-TTS o zakresie sesji dla bieżącego czatu.
  • /tts persona <id> zapisuje lokalną preferencję persony; /tts persona off ją czyści.
  • /tts latest odczytuje najnowszą odpowiedź asystenta z transkryptu bieżącej sesji i wysyła ją jednorazowo jako audio. Przechowuje tylko skrót tej odpowiedzi we wpisie sesji, aby tłumić zduplikowane wysyłki głosowe.
  • /tts audio generuje jednorazową odpowiedź audio (nie włącza TTS).
  • limit i summary są przechowywane w lokalnych preferencjach, nie w głównej konfiguracji.
  • /tts status zawiera diagnostykę fallbacku dla najnowszej próby — Fallback: <primary> -> <used>, Attempts: ... oraz szczegóły każdej próby (provider:outcome(reasonCode) latency).
  • /status pokazuje aktywny tryb TTS oraz skonfigurowanego dostawcę, model, głos i oczyszczone metadane niestandardowego punktu końcowego, gdy TTS jest włączony.

Preferencje użytkownika

Polecenia slash zapisują lokalne nadpisania do prefsPath. Wartość domyślna to ~/.openclaw/settings/tts.json; nadpisz ją zmienną środowiskową OPENCLAW_TTS_PREFS albo messages.tts.prefsPath.
Przechowywane poleEfekt
autoLokalne nadpisanie auto-TTS (always, off, …)
providerLokalne nadpisanie głównego dostawcy
personaLokalne nadpisanie persony
maxLengthPróg podsumowania (domyślnie 1500 znaków)
summarizePrzełącznik podsumowania (domyślnie true)
Zastępują one efektywną konfigurację z messages.tts oraz aktywny blok agents.list[].tts dla tego hosta.

Formaty wyjściowe (stałe)

Dostarczanie głosu TTS jest sterowane możliwościami kanału. Pluginy kanałów ogłaszają, czy TTS w stylu głosu powinien prosić dostawców o natywny cel voice-note, czy zachować zwykłą syntezę audio-file i tylko oznaczać zgodne wyjście do dostarczania głosu.
  • Kanały obsługujące notatki głosowe: odpowiedzi jako notatki głosowe preferują Opus (opus_48000_64 z ElevenLabs, opus z OpenAI).
    • 48 kHz / 64 kbps to dobry kompromis dla wiadomości głosowej.
  • Feishu / WhatsApp: gdy odpowiedź jako notatka głosowa zostanie utworzona jako MP3/WebM/WAV/M4A lub inny prawdopodobny plik audio, Plugin kanału transkoduje ją do 48 kHz Ogg/Opus za pomocą ffmpeg przed wysłaniem natywnej wiadomości głosowej. WhatsApp wysyła wynik przez ładunek Baileys audio z ptt: true i audio/ogg; codecs=opus. Jeśli konwersja się nie powiedzie, Feishu otrzymuje oryginalny plik jako załącznik; wysyłanie WhatsApp kończy się niepowodzeniem zamiast opublikowania niezgodnego ładunku PTT.
  • Inne kanały: MP3 (mp3_44100_128 z ElevenLabs, mp3 z OpenAI).
    • 44,1 kHz / 128 kbps to domyślny balans dla klarowności mowy.
  • MiniMax: MP3 (model speech-2.8-hd, częstotliwość próbkowania 32 kHz) dla zwykłych załączników audio. W przypadku celów notatek głosowych ogłaszanych przez kanał OpenClaw transkoduje MP3 MiniMax do 48 kHz Opus za pomocą ffmpeg przed dostarczeniem, gdy kanał ogłasza obsługę transkodowania.
  • Xiaomi MiMo: domyślnie MP3 albo WAV po skonfigurowaniu. W przypadku celów notatek głosowych ogłaszanych przez kanał OpenClaw transkoduje wyjście Xiaomi do 48 kHz Opus za pomocą ffmpeg przed dostarczeniem, gdy kanał ogłasza obsługę transkodowania.
  • Lokalny CLI: używa skonfigurowanego outputFormat. Cele notatek głosowych są konwertowane do Ogg/Opus, a wyjście telefoniczne jest konwertowane do surowego, monofonicznego PCM 16 kHz za pomocą ffmpeg.
  • Google Gemini: TTS Gemini API zwraca surowy PCM 24 kHz. OpenClaw opakowuje go jako WAV dla załączników audio, transkoduje go do 48 kHz Opus dla celów notatek głosowych i zwraca PCM bezpośrednio dla Talk/telefonii.
  • Gradium: WAV dla załączników audio, Opus dla celów notatek głosowych i ulaw_8000 przy 8 kHz dla telefonii.
  • Inworld: MP3 dla zwykłych załączników audio, natywne OGG_OPUS dla celów notatek głosowych i surowe PCM przy 22050 Hz dla Talk/telefonii.
  • xAI: domyślnie MP3; responseFormat może być mp3, wav, pcm, mulaw albo alaw. OpenClaw używa wsadowego punktu końcowego REST TTS xAI i zwraca kompletny załącznik audio; strumieniowy WebSocket TTS xAI nie jest używany przez tę ścieżkę dostawcy. Natywny format notatek głosowych Opus nie jest obsługiwany przez tę ścieżkę.
  • Microsoft: używa microsoft.outputFormat (domyślnie audio-24khz-48kbitrate-mono-mp3).
    • Dołączony transport akceptuje outputFormat, ale nie wszystkie formaty są dostępne z usługi.
    • Wartości formatu wyjściowego są zgodne z formatami wyjściowymi Microsoft Speech (w tym Ogg/WebM Opus).
    • Telegram sendVoice akceptuje OGG/MP3/M4A; użyj OpenAI/ElevenLabs, jeśli potrzebujesz gwarantowanych wiadomości głosowych Opus.
    • Jeśli skonfigurowany format wyjściowy Microsoft zawiedzie, OpenClaw ponawia próbę z MP3.
Formaty wyjściowe OpenAI/ElevenLabs są stałe dla każdego kanału (zobacz powyżej).

Zachowanie Auto-TTS

Gdy messages.tts.auto jest włączone, OpenClaw:
  • Pomija TTS, jeśli odpowiedź zawiera już media strukturalne.
  • Pomija bardzo krótkie odpowiedzi (poniżej 10 znaków).
  • Streszcza długie odpowiedzi, gdy streszczenia są włączone, używając summaryModel (albo agents.defaults.model.primary).
  • Dołącza wygenerowane audio do odpowiedzi.
  • W mode: "final" nadal wysyła TTS tylko audio dla strumieniowanych odpowiedzi końcowych po zakończeniu strumienia tekstu; wygenerowane media przechodzą przez tę samą normalizację mediów kanału co zwykłe załączniki odpowiedzi.
Jeśli odpowiedź przekracza maxLength, a streszczenie jest wyłączone (albo brakuje klucza API dla modelu streszczania), audio jest pomijane i wysyłana jest zwykła odpowiedź tekstowa.
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

Formaty wyjściowe według kanału

CelFormat
Feishu / Matrix / Telegram / WhatsAppOdpowiedzi jako notatki głosowe preferują Opus (opus_48000_64 z ElevenLabs, opus z OpenAI). 48 kHz / 64 kbps równoważy klarowność i rozmiar.
Inne kanałyMP3 (mp3_44100_128 z ElevenLabs, mp3 z OpenAI). 44,1 kHz / 128 kbps domyślnie dla mowy.
Talk / telefoniaNatywny dla dostawcy PCM (Inworld 22050 Hz, Google 24 kHz) albo ulaw_8000 z Gradium dla telefonii.
Uwagi dotyczące poszczególnych dostawców:
  • Transkodowanie Feishu / WhatsApp: Gdy odpowiedź jako notatka głosowa trafia jako MP3/WebM/WAV/M4A, Plugin kanału transkoduje do 48 kHz Ogg/Opus za pomocą ffmpeg. WhatsApp wysyła przez Baileys z ptt: true i audio/ogg; codecs=opus. Jeśli konwersja się nie powiedzie: Feishu wraca do dołączenia oryginalnego pliku; wysyłanie WhatsApp kończy się niepowodzeniem zamiast opublikowania niezgodnego ładunku PTT.
  • MiniMax / Xiaomi MiMo: Domyślnie MP3 (32 kHz dla MiniMax speech-2.8-hd); transkodowane do 48 kHz Opus dla celów notatek głosowych przez ffmpeg.
  • Lokalny CLI: Używa skonfigurowanego outputFormat. Cele notatek głosowych są konwertowane do Ogg/Opus, a wyjście telefoniczne do surowego, monofonicznego PCM 16 kHz.
  • Google Gemini: Zwraca surowy PCM 24 kHz. OpenClaw opakowuje jako WAV dla załączników, transkoduje do 48 kHz Opus dla celów notatek głosowych, zwraca PCM bezpośrednio dla Talk/telefonii.
  • Inworld: załączniki MP3, natywne notatki głosowe OGG_OPUS, surowe PCM 22050 Hz dla Talk/telefonii.
  • xAI: domyślnie MP3; responseFormat może mieć wartość mp3|wav|pcm|mulaw|alaw. Używa wsadowego punktu końcowego REST xAI — strumieniowy WebSocket TTS nie jest używany. Natywny format notatek głosowych Opus nie jest obsługiwany.
  • Microsoft: Używa microsoft.outputFormat (domyślnie audio-24khz-48kbitrate-mono-mp3). Telegram sendVoice akceptuje OGG/MP3/M4A; użyj OpenAI/ElevenLabs, jeśli potrzebujesz gwarantowanych wiadomości głosowych Opus. Jeśli skonfigurowany format Microsoft zawiedzie, OpenClaw ponawia próbę z MP3.
Formaty wyjściowe OpenAI i ElevenLabs są stałe dla każdego kanału zgodnie z powyższą listą.

Informacje o polach

auto
"off" | "always" | "inbound" | "tagged"
Tryb Auto-TTS. inbound wysyła audio tylko po przychodzącej wiadomości głosowej; tagged wysyła audio tylko wtedy, gdy odpowiedź zawiera dyrektywy [[tts:...]] albo blok [[tts:text]].
enabled
boolean
przestarzałe
Przestarzały przełącznik. openclaw doctor --fix migruje go do auto.
mode
"final" | "all"
domyślnie:"final"
"all" obejmuje odpowiedzi narzędzi/bloków oprócz odpowiedzi końcowych.
provider
string
Identyfikator dostawcy mowy. Gdy nie jest ustawiony, OpenClaw używa pierwszego skonfigurowanego dostawcy w kolejności automatycznego wyboru rejestru. Przestarzałe provider: "edge" jest przepisywane na "microsoft" przez openclaw doctor --fix.
persona
string
Aktywny identyfikator persony z personas. Normalizowany do małych liter.
personas.<id>
object
Stabilna tożsamość mówiona. Pola: label, description, provider, fallbackPolicy, prompt, providers.<provider>. Zobacz Persony.
summaryModel
string
Tani model do automatycznego streszczania; domyślnie agents.defaults.model.primary. Akceptuje provider/model albo skonfigurowany alias modelu.
modelOverrides
object
Zezwól modelowi na emitowanie dyrektyw TTS. enabled domyślnie ma wartość true; allowProvider domyślnie ma wartość false.
providers.<id>
object
Ustawienia należące do dostawcy, indeksowane identyfikatorem dostawcy mowy. Przestarzałe bezpośrednie bloki (messages.tts.openai, .elevenlabs, .microsoft, .edge) są przepisywane przez openclaw doctor --fix; zatwierdzaj tylko messages.tts.providers.<id>.
maxTextLength
number
Twardy limit znaków wejściowych TTS. /tts audio kończy się niepowodzeniem po przekroczeniu.
timeoutMs
number
Limit czasu żądania w milisekundach.
prefsPath
string
Zastąp lokalną ścieżkę JSON preferencji (dostawca/limit/streszczenie). Domyślnie ~/.openclaw/settings/tts.json.
apiKey
string
Env: AZURE_SPEECH_KEY, AZURE_SPEECH_API_KEY albo SPEECH_KEY.
region
string
Region Azure Speech (np. eastus). Env: AZURE_SPEECH_REGION albo SPEECH_REGION.
endpoint
string
Opcjonalne zastąpienie punktu końcowego Azure Speech (alias baseUrl).
speakerVoice
string
ShortName głosu Azure. Domyślnie en-US-JennyNeural. Przestarzały alias: voice.
lang
string
Kod języka SSML. Domyślnie en-US.
outputFormat
string
Azure X-Microsoft-OutputFormat dla standardowego audio. Domyślnie audio-24khz-48kbitrate-mono-mp3.
voiceNoteOutputFormat
string
Azure X-Microsoft-OutputFormat dla wyjścia notatek głosowych. Domyślnie ogg-24khz-16bit-mono-opus.
apiKey
string
Wraca do ELEVENLABS_API_KEY albo XI_API_KEY.
model
string
Identyfikator modelu (np. eleven_multilingual_v2, eleven_v3).
speakerVoiceId
string
Identyfikator głosu ElevenLabs. Przestarzały alias: voiceId.
voiceSettings
object
stability, similarityBoost, style (każde 0..1), useSpeakerBoost (true|false), speed (0.5..2.0, 1.0 = normalne).
applyTextNormalization
"auto" | "on" | "off"
Tryb normalizacji tekstu.
languageCode
string
2-literowy ISO 639-1 (np. en, de).
seed
number
Liczba całkowita 0..4294967295 dla determinizmu w najlepszym możliwym zakresie.
baseUrl
string
Zastąp bazowy URL API ElevenLabs.
apiKey
string
Wraca do GEMINI_API_KEY / GOOGLE_API_KEY. Jeśli pominięto, TTS może ponownie użyć models.providers.google.apiKey przed powrotem do zmiennych środowiskowych.
model
string
Model TTS Gemini. Domyślnie gemini-3.1-flash-tts-preview.
speakerVoice
string
Nazwa wbudowanego głosu Gemini. Domyślnie Kore. Przestarzałe aliasy: voiceName, voice.
audioProfile
string
Prompt stylu w języku naturalnym dodawany przed tekstem mówionym.
speakerName
string
Opcjonalna etykieta mówcy dodawana przed tekstem mówionym, gdy prompt używa nazwanego mówcy.
promptTemplate
"audio-profile-v1"
Ustaw na audio-profile-v1, aby opakować aktywne pola promptu persony w deterministyczną strukturę promptu TTS Gemini.
personaPrompt
string
Dodatkowy tekst promptu persony specyficzny dla Google, dołączany do uwag reżysera w szablonie.
baseUrl
string
Akceptowane jest tylko https://generativelanguage.googleapis.com.
apiKey
string
Środowisko: GRADIUM_API_KEY.
baseUrl
string
Domyślnie https://api.gradium.ai.
speakerVoiceId
string
Domyślnie Emma (YTpq7expH9539ERJ). Starszy alias: voiceId.

Podstawowy Inworld

apiKey
string
Środowisko: INWORLD_API_KEY.
baseUrl
string
Domyślnie https://api.inworld.ai.
modelId
string
Domyślnie inworld-tts-1.5-max. Także: inworld-tts-1.5-mini, inworld-tts-1-max, inworld-tts-1.
speakerVoiceId
string
Domyślnie Sarah. Starszy alias: voiceId.
temperature
number
Temperatura próbkowania 0..2.
command
string
Lokalny plik wykonywalny lub ciąg polecenia dla CLI TTS.
args
string[]
Argumenty polecenia. Obsługuje symbole zastępcze {{Text}}, {{OutputPath}}, {{OutputDir}}, {{OutputBase}}.
outputFormat
"mp3" | "opus" | "wav"
Oczekiwany format wyjściowy CLI. Domyślnie mp3 dla załączników audio.
timeoutMs
number
Limit czasu polecenia w milisekundach. Domyślnie 120000.
cwd
string
Opcjonalny katalog roboczy polecenia.
env
Record<string, string>
Opcjonalne nadpisania środowiska dla polecenia.
enabled
boolean
domyślnie:"true"
Zezwól na użycie mowy Microsoft.
speakerVoice
string
Nazwa głosu neuronowego Microsoft (np. en-US-MichelleNeural). Starszy alias: voice.
lang
string
Kod języka (np. en-US).
outputFormat
string
Format wyjściowy Microsoft. Domyślnie audio-24khz-48kbitrate-mono-mp3. Nie wszystkie formaty są obsługiwane przez dołączony transport oparty na Edge.
rate / pitch / volume
string
Ciągi procentowe (np. +10%, -5%).
saveSubtitles
boolean
Zapisz napisy JSON obok pliku audio.
proxy
string
URL proxy dla żądań mowy Microsoft.
timeoutMs
number
Nadpisanie limitu czasu żądania (ms).
edge.*
object
przestarzałe
Starszy alias. Uruchom openclaw doctor --fix, aby przepisać utrwaloną konfigurację na providers.microsoft.
apiKey
string
W razie braku używa MINIMAX_API_KEY. Uwierzytelnianie Token Plan przez MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY lub MINIMAX_CODING_API_KEY.
baseUrl
string
Domyślnie https://api.minimax.io. Środowisko: MINIMAX_API_HOST.
model
string
Domyślnie speech-2.8-hd. Środowisko: MINIMAX_TTS_MODEL.
speakerVoiceId
string
Domyślnie English_expressive_narrator. Środowisko: MINIMAX_TTS_VOICE_ID. Starszy alias: voiceId.
speed
number
0.5..2.0. Domyślnie 1.0.
vol
number
(0, 10]. Domyślnie 1.0.
pitch
number
Liczba całkowita -12..12. Domyślnie 0. Wartości ułamkowe są obcinane przed żądaniem.
apiKey
string
W razie braku używa OPENAI_API_KEY.
model
string
Identyfikator modelu TTS OpenAI (np. gpt-4o-mini-tts).
speakerVoice
string
Nazwa głosu (np. alloy, cedar). Starszy alias: voice.
instructions
string
Jawne pole OpenAI instructions. Po ustawieniu pola promptu persony nie są automatycznie mapowane.
extraBody / extra_body
Record<string, unknown>
Dodatkowe pola JSON scalane z treściami żądań /audio/speech po wygenerowanych polach TTS OpenAI. Użyj tego dla punktów końcowych zgodnych z OpenAI, takich jak Kokoro, które wymagają kluczy specyficznych dla dostawcy, takich jak lang; niebezpieczne klucze prototypu są ignorowane.
baseUrl
string
Nadpisz punkt końcowy TTS OpenAI. Kolejność rozstrzygania: konfiguracja → OPENAI_TTS_BASE_URLhttps://api.openai.com/v1. Wartości inne niż domyślne są traktowane jako punkty końcowe TTS zgodne z OpenAI, więc niestandardowe nazwy modeli i głosów są akceptowane.
apiKey
string
Środowisko: OPENROUTER_API_KEY. Może ponownie użyć models.providers.openrouter.apiKey.
baseUrl
string
Domyślnie https://openrouter.ai/api/v1. Starszy https://openrouter.ai/v1 jest normalizowany.
model
string
Domyślnie hexgrad/kokoro-82m. Alias: modelId.
speakerVoice
string
Domyślnie af_alloy. Starsze aliasy: voice, voiceId.
responseFormat
"mp3" | "pcm"
Domyślnie mp3.
speed
number
Nadpisanie szybkości natywne dla dostawcy.
apiKey
string
Środowisko: VOLCENGINE_TTS_API_KEY lub BYTEPLUS_SEED_SPEECH_API_KEY.
resourceId
string
Domyślnie seed-tts-1.0. Środowisko: VOLCENGINE_TTS_RESOURCE_ID. Użyj seed-tts-2.0, gdy Twój projekt ma uprawnienie TTS 2.0.
appKey
string
Nagłówek klucza aplikacji. Domyślnie aGjiRDfUWi. Środowisko: VOLCENGINE_TTS_APP_KEY.
baseUrl
string
Nadpisz punkt końcowy HTTP Seed Speech TTS. Środowisko: VOLCENGINE_TTS_BASE_URL.
speakerVoice
string
Typ głosu. Domyślnie en_female_anna_mars_bigtts. Środowisko: VOLCENGINE_TTS_VOICE. Starszy alias: voice.
speedRatio
number
Współczynnik szybkości natywny dla dostawcy.
emotion
string
Znacznik emocji natywny dla dostawcy.
appId / token / cluster
string
przestarzałe
Starsze pola Volcengine Speech Console. Środowisko: VOLCENGINE_TTS_APPID, VOLCENGINE_TTS_TOKEN, VOLCENGINE_TTS_CLUSTER (domyślnie volcano_tts).
apiKey
string
Środowisko: XAI_API_KEY.
baseUrl
string
Domyślnie https://api.x.ai/v1. Środowisko: XAI_BASE_URL.
speakerVoiceId
string
Domyślnie eve. Aktywne głosy: ara, eve, leo, rex, sal, una. Starszy alias: voiceId.
language
string
Kod języka BCP-47 lub auto. Domyślnie en.
responseFormat
"mp3" | "wav" | "pcm" | "mulaw" | "alaw"
Domyślnie mp3.
speed
number
Nadpisanie szybkości natywne dla dostawcy.
apiKey
string
Środowisko: XIAOMI_API_KEY.
baseUrl
string
Domyślnie https://api.xiaomimimo.com/v1. Środowisko: XIAOMI_BASE_URL.
model
string
Domyślnie mimo-v2.5-tts. Środowisko: XIAOMI_TTS_MODEL. Obsługuje także mimo-v2-tts i mimo-v2.5-tts-voicedesign.
speakerVoice
string
Domyślnie mimo_default dla modeli z gotowym głosem. Środowisko: XIAOMI_TTS_VOICE. Starszy alias: voice. Nie jest wysyłane dla mimo-v2.5-tts-voicedesign.
format
"mp3" | "wav"
Domyślnie mp3. Środowisko: XIAOMI_TTS_FORMAT.
style
string
Opcjonalna instrukcja stylu w języku naturalnym wysyłana jako wiadomość użytkownika; nie jest wypowiadana. Dla mimo-v2.5-tts-voicedesign jest to prompt projektowania głosu; OpenClaw dostarcza wartość domyślną, gdy zostanie pominięta.

Narzędzie agenta

Narzędzie tts konwertuje tekst na mowę i zwraca załącznik audio do dostarczenia odpowiedzi. W Feishu, Matrix, Telegram i WhatsApp audio jest dostarczane jako wiadomość głosowa, a nie jako załącznik pliku. Feishu i WhatsApp mogą transkodować wyjście TTS inne niż Opus na tej ścieżce, gdy ffmpeg jest dostępny. WhatsApp wysyła audio przez Baileys jako notatkę głosową PTT (audio z ptt: true) i wysyła widoczny tekst oddzielnie od audio PTT, ponieważ klienci nie renderują konsekwentnie podpisów przy notatkach głosowych. Narzędzie akceptuje opcjonalne pola channel i timeoutMs; timeoutMs to limit czasu żądania dostawcy dla pojedynczego wywołania w milisekundach. Wartości dla pojedynczego wywołania nadpisują messages.tts.timeoutMs; skonfigurowane limity czasu TTS nadpisują dowolną domyślną wartość dostawcy utworzoną przez Plugin.

RPC Gateway

MetodaCel
tts.statusOdczytaj bieżący stan TTS i ostatnią próbę.
tts.enableUstaw lokalną preferencję automatyczną na always.
tts.disableUstaw lokalną preferencję automatyczną na off.
tts.convertJednorazowy tekst → audio.
tts.setProviderUstaw lokalną preferencję dostawcy.
tts.setPersonaUstaw lokalną preferencję persony.
tts.providersWyświetl listę skonfigurowanych dostawców i status.

Łącza usług

Powiązane