Saltar al contenido principal
OpenClaw convierte las respuestas salientes en audio mediante 14 proveedores de voz: mensajes de voz nativos en Feishu, Matrix, Telegram y WhatsApp; adjuntos de audio en el resto; y flujos PCM/Ulaw para telefonía y Talk. TTS es la mitad de salida de voz del modo stt-tts de Talk (talk.speak llama a esta misma ruta de síntesis). En cambio, las sesiones de Talk realtime nativas del proveedor sintetizan la voz dentro del proveedor en tiempo real; las sesiones transcription nunca sintetizan una respuesta de voz del asistente.

Inicio rápido

1

Pick a provider

OpenAI y ElevenLabs son las opciones alojadas más fiables. Microsoft y Local CLI funcionan sin una clave de API. Consulta la matriz de proveedores para ver la lista completa.
2

Set the API key

Exporta la variable de entorno para tu proveedor (por ejemplo OPENAI_API_KEY, ELEVENLABS_API_KEY). Microsoft y Local CLI no necesitan clave.
3

Enable in config

Define messages.tts.auto: "always" y messages.tts.provider:
{
  messages: {
    tts: {
      auto: "always",
      provider: "elevenlabs",
    },
  },
}
4

Try it in chat

/tts status muestra el estado actual. /tts audio Hello from OpenClaw envía una respuesta de audio puntual.
Auto-TTS está desactivado de forma predeterminada. Cuando messages.tts.provider no está definido, OpenClaw elige el primer proveedor configurado según el orden de selección automática del registro. La herramienta de agente tts integrada es solo para intención explícita: el chat normal permanece en texto salvo que el usuario pida audio, use /tts o active Auto-TTS/voz por directiva.

Proveedores compatibles

ProveedorAutenticaciónNotas
Azure SpeechAZURE_SPEECH_KEY + AZURE_SPEECH_REGION (también AZURE_SPEECH_API_KEY, SPEECH_KEY, SPEECH_REGION)Salida nativa de notas de voz Ogg/Opus y telefonía.
DeepInfraDEEPINFRA_API_KEYTTS compatible con OpenAI. Usa hexgrad/Kokoro-82M de forma predeterminada.
ElevenLabsELEVENLABS_API_KEY o XI_API_KEYClonación de voz, multilingüe, determinista mediante seed; transmitido para reproducción de voz en Discord.
Google GeminiGEMINI_API_KEY o GOOGLE_API_KEYTTS por lotes de la API Gemini; consciente de la personalidad mediante promptTemplate: "audio-profile-v1".
GradiumGRADIUM_API_KEYSalida de notas de voz y telefonía.
InworldINWORLD_API_KEYAPI de TTS en streaming. Notas de voz Opus nativas y telefonía PCM.
Local CLIningunaEjecuta un comando local de TTS configurado.
MicrosoftningunaTTS neuronal público de Edge mediante node-edge-tts. De mejor esfuerzo, sin SLA.
MiniMaxMINIMAX_API_KEY (o plan Token: MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY, MINIMAX_CODING_API_KEY)API T2A v2. Usa speech-2.8-hd de forma predeterminada.
OpenAIOPENAI_API_KEYTambién se usa para el resumen automático; admite instructions de personalidad.
OpenRouterOPENROUTER_API_KEY (puede reutilizar models.providers.openrouter.apiKey)Modelo predeterminado hexgrad/kokoro-82m.
VolcengineVOLCENGINE_TTS_API_KEY o BYTEPLUS_SEED_SPEECH_API_KEY (AppID/token heredados: VOLCENGINE_TTS_APPID/_TOKEN)API HTTP de BytePlus Seed Speech.
VydraVYDRA_API_KEYProveedor compartido de imagen, video y voz.
xAIXAI_API_KEYTTS por lotes de xAI. La nota de voz Opus nativa no es compatible.
Xiaomi MiMoXIAOMI_API_KEYTTS de MiMo mediante completaciones de chat de Xiaomi.
Si hay varios proveedores configurados, se usa primero el seleccionado y los demás quedan como opciones de respaldo. El resumen automático usa summaryModel (o agents.defaults.model.primary), por lo que ese proveedor también debe estar autenticado si mantienes habilitados los resúmenes.
El proveedor Microsoft incluido usa el servicio TTS neuronal en línea de Microsoft Edge mediante node-edge-tts. Es un servicio web público sin SLA ni cuota publicados; trátalo como de mejor esfuerzo. El id de proveedor heredado edge se normaliza a microsoft y openclaw doctor --fix reescribe la configuración persistida; las configuraciones nuevas siempre deben usar microsoft.

Configuración

La configuración de TTS está en messages.tts dentro de ~/.openclaw/openclaw.json. Elige un preajuste y adapta el bloque del proveedor. Los campos speakerVoice/speakerVoiceId que se muestran abajo son canónicos; los nombres de campo propios de cada proveedor voice/voiceId/ voiceName siguen funcionando como alias heredados.
{
  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",
        },
      },
    },
  },
}
Para Xiaomi mimo-v2.5-tts-voicedesign, omite speakerVoice y define style como el prompt de diseño de voz. OpenClaw envía ese prompt como el mensaje user de TTS y no envía audio.voice para el modelo voicedesign.

Sustituciones de voz por agente

Use agents.list[].tts cuando un agente deba hablar con un proveedor, voz, modelo, persona o modo TTS automático diferente. El bloque del agente se fusiona profundamente sobre messages.tts, de modo que las credenciales del proveedor pueden permanecer en la configuración global del proveedor:
{
  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" },
          },
        },
      },
    ],
  },
}
Para fijar una persona por agente, define agents.list[].tts.persona junto con la configuración del proveedor; anula messages.tts.persona global solo para ese agente. Orden de precedencia para respuestas automáticas, /tts audio, /tts status y la herramienta de agente tts:
  1. messages.tts
  2. agents.list[].tts activo
  3. anulación de canal, cuando el canal admite channels.<channel>.tts
  4. anulación de cuenta, cuando el canal pasa channels.<channel>.accounts.<id>.tts
  5. preferencias locales de /tts para este host
  6. directivas en línea [[tts:...]] cuando las anulaciones del modelo están habilitadas
Las anulaciones de canal y cuenta usan la misma forma que messages.tts y se fusionan profundamente sobre las capas anteriores, por lo que las credenciales compartidas del proveedor pueden permanecer en messages.tts mientras un canal o cuenta de bot cambia solo la voz del hablante, el modelo, la persona o el modo automático:
{
  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

Una persona es una identidad hablada estable que puede aplicarse de forma determinista entre proveedores. Puede preferir un proveedor, definir una intención de prompt independiente del proveedor y contener enlaces específicos del proveedor para voces, modelos, plantillas de prompt, semillas y ajustes de voz.

Persona mínima

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

Persona completa (prompt independiente del proveedor)

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

Resolución de persona

La persona activa se selecciona de forma determinista:
  1. Preferencia local /tts persona <id>, si está definida.
  2. messages.tts.persona, si está definido.
  3. Sin persona.
La selección del proveedor se ejecuta con prioridad explícita:
  1. Anulaciones directas (CLI, Gateway, Talk, directivas TTS permitidas).
  2. Preferencia local /tts provider <id>.
  3. provider de la persona activa.
  4. messages.tts.provider.
  5. Selección automática del registro.
Para cada intento de proveedor, OpenClaw fusiona las configuraciones en este orden:
  1. messages.tts.providers.<id>
  2. messages.tts.personas.<persona>.providers.<id>
  3. Anulaciones de solicitud confiables
  4. Anulaciones permitidas de directivas TTS emitidas por el modelo

Cómo usan los proveedores los prompts de persona

Los campos de prompt de persona (profile, scene, sampleContext, style, accent, pacing, constraints) son independientes del proveedor. Cada proveedor decide cómo usarlos:
Envuelve los campos de prompt de persona en una estructura de prompt TTS de Gemini solo cuando la configuración efectiva del proveedor Google establece promptTemplate: "audio-profile-v1" o personaPrompt. Los campos antiguos audioProfile y speakerName se siguen anteponiendo como texto de prompt específico de Google. Las etiquetas de audio en línea, como [whispers] o [laughs], dentro de un bloque [[tts:text]] se conservan dentro de la transcripción de Gemini; OpenClaw no genera estas etiquetas.
Asigna los campos de prompt de persona al campo instructions de la solicitud solo cuando no se haya configurado ningún instructions explícito de OpenAI. instructions explícito siempre tiene prioridad.
Usa solo los enlaces de persona específicos del proveedor bajo personas.<id>.providers.<provider>. Los campos de prompt de persona se ignoran salvo que el proveedor implemente su propia asignación de prompt de persona.

Política de reserva

fallbackPolicy controla el comportamiento cuando una persona no tiene enlace para el proveedor intentado:
PolíticaComportamiento
preserve-personaPredeterminado. Los campos de prompt independientes del proveedor siguen disponibles; el proveedor puede usarlos o ignorarlos.
provider-defaultsLa persona se omite de la preparación del prompt para ese intento; el proveedor usa sus valores predeterminados neutrales mientras continúa la reserva a otros proveedores.
failOmite ese intento de proveedor con reasonCode: "not_configured" y personaBinding: "missing". Se siguen probando proveedores de reserva.
La solicitud TTS completa solo falla cuando todos los proveedores intentados se omiten o fallan. La selección de proveedor de la sesión de Talk tiene alcance de sesión. Un cliente de Talk debe elegir ids de proveedor, ids de modelo, ids de voz y configuraciones regionales desde talk.catalog y pasarlos a través de la sesión de Talk o la solicitud de traspaso. Abrir una sesión de voz no debe mutar messages.tts ni los valores predeterminados globales del proveedor de Talk.

Directivas impulsadas por el modelo

De forma predeterminada, el asistente puede emitir directivas [[tts:...]] para anular la voz, el modelo o la velocidad de una sola respuesta, además de un bloque opcional [[tts:text]]...[[/tts:text]] para indicaciones expresivas que deben aparecer solo en el audio:
Here you go.

[[tts:speakerVoiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
Cuando messages.tts.auto es "tagged", las directivas son obligatorias para activar audio. La entrega de bloques en streaming elimina las directivas del texto visible antes de que el canal las vea, incluso cuando están divididas entre bloques adyacentes. provider=... se ignora salvo que modelOverrides.allowProvider: true. Cuando una respuesta declara provider=..., las otras claves de esa directiva las analiza solo ese proveedor; las claves no admitidas se eliminan y se notifican como advertencias de directivas TTS. Claves de directiva disponibles:
  • provider (id de proveedor registrado; requiere allowProvider: true)
  • speakerVoice / speakerVoiceId (alias heredados: voice, voiceName, voice_name, google_voice, voiceId)
  • model / google_model
  • stability, similarityBoost, style, speed, useSpeakerBoost
  • vol / volume (volumen de MiniMax, 0–10)
  • pitch (tono entero de MiniMax, −12 a 12; los valores fraccionarios se truncan)
  • emotion (etiqueta de emoción de Volcengine)
  • applyTextNormalization (auto|on|off)
  • languageCode (ISO 639-1)
  • seed
Deshabilitar por completo las anulaciones del modelo:
{ messages: { tts: { modelOverrides: { enabled: false } } } }
Permitir el cambio de proveedor mientras se mantienen configurables otros controles:
{ messages: { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false } } } }

Comandos de barra

Comando único /tts. En Discord, OpenClaw también registra /voice porque /tts es un comando integrado de Discord; el texto /tts ... sigue funcionando.
/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>
Los comandos requieren un remitente autorizado (se aplican reglas de lista de permitidos/propietario) y debe estar habilitado commands.text o el registro de comandos nativos.
Notas de comportamiento:
  • /tts on escribe la preferencia local de TTS como always; /tts off la escribe como off.
  • /tts chat on|off|default escribe una anulación de TTS automático con alcance de sesión para el chat actual.
  • /tts persona <id> escribe la preferencia local de persona; /tts persona off la borra.
  • /tts latest lee la última respuesta del asistente de la transcripción de la sesión actual y la envía como audio una vez. Almacena solo un hash de esa respuesta en la entrada de sesión para suprimir envíos de voz duplicados.
  • /tts audio genera una respuesta de audio puntual (no activa TTS).
  • /tts limit <chars> acepta 100–4096 (4096 es el máximo de subtítulo/mensaje de Telegram); los valores fuera de ese rango se rechazan.
  • limit y summary se almacenan en preferencias locales, no en la configuración principal.
  • /tts status incluye diagnósticos de reserva para el intento más reciente: Fallback: <primary> -> <used>, Attempts: ... y detalle por intento (provider:outcome(reasonCode) latency).
  • /status muestra el modo TTS activo, además del proveedor, modelo, voz y metadatos saneados de endpoint personalizado configurados cuando TTS está habilitado.

Preferencias por usuario

Los comandos de barra escriben anulaciones locales en prefsPath. El valor predeterminado es ~/.openclaw/settings/tts.json; anúlalo con la variable de entorno OPENCLAW_TTS_PREFS o messages.tts.prefsPath.
Campo almacenadoEfecto
autoAnulación local de TTS automático (always, off, …)
providerAnulación local del proveedor principal
personaAnulación local de persona
maxLengthUmbral de resumen/truncamiento (predeterminado 1500 caracteres, rango de /tts limit 100–4096)
summarizeAlternancia de resumen (predeterminado true)
Estos anulan la configuración efectiva de messages.tts más el bloque agents.list[].tts activo para ese host.

Formatos de salida

La entrega de voz TTS depende de las capacidades del canal. Los plugins de canal anuncian si el TTS con estilo de voz debe pedir a los proveedores un destino nativo voice-note o mantener la síntesis normal de audio-file, y si el canal transcodifica la salida no nativa antes de enviarla.
DestinoFormato
Feishu / Matrix / Telegram / WhatsAppLas respuestas de nota de voz prefieren Opus (opus_48000_64 de ElevenLabs, opus de OpenAI). 48 kHz / 64 kbps equilibran claridad y tamaño.
Otros canalesMP3 (mp3_44100_128 de ElevenLabs, mp3 de OpenAI). 44.1 kHz / 128 kbps es el equilibrio predeterminado para voz.
Talk / telefoníaPCM nativo del proveedor (Inworld 22050 Hz, Google 24 kHz), o ulaw_8000 de Gradium para telefonía.
Notas por proveedor:
  • Transcodificación de Feishu / WhatsApp: cuando una respuesta de nota de voz llega como MP3/WebM/WAV/M4A u otro archivo probablemente de audio, el plugin de canal la transcodifica a Ogg/Opus de 48 kHz con ffmpeg (libopus, 64 kbps) antes de enviar el mensaje de voz nativo. WhatsApp envía el resultado mediante la carga útil audio de Baileys con ptt: true y audio/ogg; codecs=opus. En caso de fallo de transcodificación: Feishu captura el error y vuelve a enviar el archivo original como un adjunto simple; WhatsApp no tiene alternativa, por lo que el envío falla en lugar de publicar una carga PTT incompatible.
  • MiniMax: MP3 (modelo speech-2.8-hd, frecuencia de muestreo de 32 kHz) para adjuntos de audio normales; se transcodifica a Opus de 48 kHz con ffmpeg para destinos de nota de voz anunciados por el canal.
  • Xiaomi MiMo: MP3 de forma predeterminada, o WAV cuando se configura; se transcodifica a Opus de 48 kHz con ffmpeg para destinos de nota de voz anunciados por el canal.
  • CLI local: usa el outputFormat configurado. Los destinos de nota de voz se convierten a Ogg/Opus y la salida de telefonía se convierte a PCM mono sin procesar de 16 kHz con ffmpeg.
  • Google Gemini: devuelve PCM sin procesar de 24 kHz. OpenClaw lo envuelve como WAV para adjuntos de audio, lo transcodifica a Opus de 48 kHz para destinos de nota de voz y devuelve PCM directamente para Talk/telefonía.
  • Gradium: WAV para adjuntos de audio, Opus para destinos de nota de voz y ulaw_8000 a 8 kHz para telefonía.
  • Inworld: MP3 para adjuntos de audio normales, OGG_OPUS nativo para destinos de nota de voz y PCM sin procesar a 22050 Hz para Talk/telefonía.
  • xAI: MP3 de forma predeterminada; responseFormat puede ser mp3, wav, pcm, mulaw o alaw. Usa el endpoint TTS REST por lotes de xAI y devuelve un adjunto de audio completo; el WebSocket TTS en streaming de xAI no se usa en esta ruta de proveedor. No se admite el formato nativo Opus para notas de voz.
  • Microsoft: usa microsoft.outputFormat (predeterminado audio-24khz-48kbitrate-mono-mp3).
    • El transporte incluido acepta un outputFormat, pero no todos los formatos están disponibles en el servicio.
    • Los valores de formato de salida siguen los formatos de salida de Microsoft Speech (incluido Ogg/WebM Opus).
    • Telegram sendVoice acepta OGG/MP3/M4A; usa OpenAI/ElevenLabs si necesitas mensajes de voz Opus garantizados.
    • Si falla el formato de salida de Microsoft configurado, OpenClaw reintenta con MP3.
    • Cuando no se establece una anulación de voz explícita y se usa la voz inglesa predeterminada, OpenClaw cambia automáticamente a una voz neuronal china (zh-CN-XiaoxiaoNeural, configuración regional zh-CN) si el texto de la respuesta es predominantemente CJK.
Los formatos de salida de OpenAI y ElevenLabs son fijos por canal como se indica arriba.

Comportamiento de Auto-TTS

Cuando messages.tts.auto está habilitado, OpenClaw:
  • Omite TTS si la respuesta ya contiene medios estructurados.
  • Omite respuestas muy cortas (menos de 10 caracteres).
  • Resume respuestas largas cuando los resúmenes están habilitados, usando summaryModel (o agents.defaults.model.primary).
  • Adjunta el audio generado a la respuesta.
  • En mode: "final", sigue enviando TTS solo de audio para respuestas finales transmitidas en streaming después de que se completa el flujo de texto; los medios generados pasan por la misma normalización de medios del canal que los adjuntos de respuesta normales.
Si la respuesta supera maxLength, OpenClaw nunca omite el audio por completo:
  • Resumen activado (predeterminado) y hay un modelo de resumen disponible: resume el texto a aproximadamente maxLength caracteres y luego sintetiza el resumen.
  • Resumen desactivado, la resumización falla o no hay clave de API disponible para el modelo de resumen: trunca el texto a maxLength caracteres y sintetiza el texto truncado.
Reply -> TTS enabled?
  no  -> send text
  yes -> has media / short?
          yes -> send text
          no  -> length > limit?
                   no  -> TTS -> attach audio
                   yes -> summary enabled and available?
                            no  -> truncate -> TTS -> attach audio
                            yes -> summarize -> TTS -> attach audio

Referencia de campos

auto
"off" | "always" | "inbound" | "tagged"
Modo Auto-TTS. inbound solo envía audio después de un mensaje de voz entrante; tagged solo envía audio cuando la respuesta incluye directivas [[tts:...]] o un bloque [[tts:text]].
enabled
boolean
obsoleto
Interruptor heredado. openclaw doctor --fix lo migra a auto.
mode
"final" | "all"
predeterminado:"final"
"all" incluye respuestas de herramienta/bloque además de las respuestas finales.
provider
string
Id. del proveedor de voz. Cuando no se establece, OpenClaw usa el primer proveedor configurado en el orden de selección automática del registro. El provider: "edge" heredado se reescribe como "microsoft" mediante openclaw doctor --fix.
persona
string
Id. de persona activa de personas. Se normaliza a minúsculas.
personas.<id>
object
Identidad hablada estable. Campos: label, description, provider, fallbackPolicy, prompt, providers.<provider>. Consulta Personas.
summaryModel
string
Modelo económico para resumen automático; el valor predeterminado es agents.defaults.model.primary. Acepta provider/model o un alias de modelo configurado.
modelOverrides
object
Permite que el modelo emita directivas TTS. enabled usa true de forma predeterminada; allowProvider usa false de forma predeterminada.
providers.<id>
object
Configuración propiedad del proveedor indexada por id. de proveedor de voz. Los bloques directos heredados (messages.tts.openai, .elevenlabs, .microsoft, .edge) se reescriben mediante openclaw doctor --fix; confirma solo messages.tts.providers.<id>.
maxTextLength
number
predeterminado:"4096"
Límite estricto de caracteres de entrada TTS. /tts audio, tts.convert y tts.speak fallan si se supera.
timeoutMs
number
predeterminado:"30000"
Tiempo de espera de solicitud en milisegundos. Un timeoutMs por llamada (herramienta de agente, Gateway) gana cuando se establece; de lo contrario, un messages.tts.timeoutMs configurado explícitamente tiene prioridad sobre cualquier valor predeterminado de proveedor escrito por un plugin.
prefsPath
string
Anula la ruta JSON de preferencias locales (proveedor/límite/resumen). Valor predeterminado ~/.openclaw/settings/tts.json.
apiKey
string
Env: AZURE_SPEECH_KEY, AZURE_SPEECH_API_KEY o SPEECH_KEY.
region
string
Región de Azure Speech (p. ej. eastus). Env: AZURE_SPEECH_REGION o SPEECH_REGION.
endpoint
string
Anulación opcional del endpoint de Azure Speech (alias baseUrl).
speakerVoice
string
ShortName de voz de Azure. Valor predeterminado en-US-JennyNeural. Alias heredado: voice.
lang
string
Código de idioma SSML. Valor predeterminado en-US.
outputFormat
string
X-Microsoft-OutputFormat de Azure para audio estándar. Valor predeterminado audio-24khz-48kbitrate-mono-mp3.
voiceNoteOutputFormat
string
X-Microsoft-OutputFormat de Azure para salida de nota de voz. Valor predeterminado ogg-24khz-16bit-mono-opus.
apiKey
string
Recurre a ELEVENLABS_API_KEY o XI_API_KEY.
model
string
Id. del modelo. Valor predeterminado eleven_multilingual_v2. Los id. heredados eleven_turbo_v2_5/eleven_turbo_v2 se normalizan al modelo flash correspondiente.
speakerVoiceId
string
Id. de voz de ElevenLabs. Valor predeterminado pMsXgVXv3BLzUgSXRplE. Alias heredado: voiceId.
voiceSettings
object
stability, similarityBoost, style (cada uno 0..1, valores predeterminados 0.5/0.75/0), useSpeakerBoost (true|false, predeterminado true), speed (0.5..2.0, predeterminado 1.0).
applyTextNormalization
"auto" | "on" | "off"
Modo de normalización de texto.
languageCode
string
ISO 639-1 de 2 letras (p. ej. en, de).
seed
number
Entero 0..4294967295 para determinismo de mejor esfuerzo.
baseUrl
string
Anula la URL base de la API de ElevenLabs.
apiKey
string
Recurre a GEMINI_API_KEY / GOOGLE_API_KEY. Si se omite, TTS puede reutilizar models.providers.google.apiKey antes de recurrir al entorno.
model
string
Modelo TTS de Gemini. Valor predeterminado gemini-3.1-flash-tts-preview.
speakerVoice
string
Nombre de voz precompilada de Gemini. Valor predeterminado Kore. Alias heredados: voiceName, voice.
audioProfile
string
Prompt de estilo en lenguaje natural antepuesto al texto hablado.
speakerName
string
Etiqueta opcional de hablante antepuesta al texto hablado cuando tu prompt usa un hablante con nombre.
promptTemplate
"audio-profile-v1"
Establécelo en audio-profile-v1 para envolver los campos de prompt de la persona activa en una estructura de prompt TTS determinista de Gemini.
personaPrompt
string
Texto adicional de prompt de persona específico de Google que se agrega a las notas del director de la plantilla.
baseUrl
string
Solo se acepta https://generativelanguage.googleapis.com.
apiKey
string
Env: GRADIUM_API_KEY.
baseUrl
string
Valor predeterminado https://api.gradium.ai.
speakerVoiceId
string
Emma predeterminada (YTpq7expH9539ERJ). Alias heredado: voiceId.

Inworld principal

apiKey
string
Env: INWORLD_API_KEY.
baseUrl
string
Valor predeterminado https://api.inworld.ai.
modelId
string
Valor predeterminado inworld-tts-1.5-max. También: inworld-tts-1.5-mini, inworld-tts-1-max, inworld-tts-1.
speakerVoiceId
string
Valor predeterminado Sarah. Alias heredado: voiceId.
temperature
number
Temperatura de muestreo 0..2 (excluye 0).
command
string
Ejecutable local o cadena de comando para TTS de CLI.
args
string[]
Argumentos del comando. Admite los marcadores de posición {{Text}}, {{OutputPath}}, {{OutputDir}}, {{OutputBase}}.
outputFormat
"mp3" | "opus" | "wav"
Formato de salida esperado de la CLI. Valor predeterminado mp3 para archivos adjuntos de audio.
timeoutMs
number
Tiempo de espera del comando en milisegundos. Valor predeterminado 120000.
cwd
string
Directorio de trabajo opcional del comando.
env
Record<string, string>
Sobrescrituras de entorno opcionales para el comando.
enabled
boolean
predeterminado:"true"
Permitir el uso de voz de Microsoft.
speakerVoice
string
Nombre de voz neural de Microsoft (por ejemplo, en-US-MichelleNeural). Alias heredado: voice. Si la voz predeterminada en inglés está activa y el texto de respuesta es predominantemente CJK, OpenClaw cambia automáticamente a zh-CN-XiaoxiaoNeural.
lang
string
Código de idioma (por ejemplo, en-US).
outputFormat
string
Formato de salida de Microsoft. Valor predeterminado audio-24khz-48kbitrate-mono-mp3. No todos los formatos son compatibles con el transporte incluido respaldado por Edge.
rate / pitch / volume
string
Cadenas porcentuales (por ejemplo, +10%, -5%).
saveSubtitles
boolean
Escribir subtítulos JSON junto al archivo de audio.
proxy
string
URL de proxy para solicitudes de voz de Microsoft.
timeoutMs
number
Sobrescritura del tiempo de espera de la solicitud (ms).
edge.*
object
obsoleto
Alias heredado. Ejecuta openclaw doctor --fix para reescribir la configuración persistida a providers.microsoft.
apiKey
string
Recurre a MINIMAX_API_KEY. Autenticación de Token Plan mediante MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY o MINIMAX_CODING_API_KEY.
baseUrl
string
Valor predeterminado https://api.minimax.io. Entorno: MINIMAX_API_HOST.
model
string
Valor predeterminado speech-2.8-hd. Entorno: MINIMAX_TTS_MODEL.
speakerVoiceId
string
Valor predeterminado English_expressive_narrator. Entorno: MINIMAX_TTS_VOICE_ID. Alias heredado: voiceId.
speed
number
0.5..2.0. Valor predeterminado 1.0.
vol
number
(0, 10]. Valor predeterminado 1.0.
pitch
number
Entero -12..12. Valor predeterminado 0. Los valores fraccionarios se truncan antes de la solicitud.
apiKey
string
Recurre a OPENAI_API_KEY.
model
string
ID del modelo TTS de OpenAI. Valor predeterminado gpt-4o-mini-tts.
speakerVoice
string
Nombre de voz (por ejemplo, alloy, cedar). Valor predeterminado coral. Alias heredado: voice.
instructions
string
Campo instructions explícito de OpenAI. Cuando se establece, los campos de prompt de persona no se asignan automáticamente.
extraBody / extra_body
Record<string, unknown>
Campos JSON adicionales que se combinan en los cuerpos de solicitud de /audio/speech después de los campos TTS generados de OpenAI. Úsalo para endpoints compatibles con OpenAI, como Kokoro, que requieren claves específicas del proveedor como lang; las claves de prototipo no seguras se ignoran.
baseUrl
string
Sobrescribe el endpoint TTS de OpenAI. Orden de resolución: configuración → OPENAI_TTS_BASE_URLhttps://api.openai.com/v1. Los valores no predeterminados se tratan como endpoints TTS compatibles con OpenAI, por lo que se aceptan nombres personalizados de modelo y voz, y speed pierde su comprobación de rango 0.25..4.0.
apiKey
string
Entorno: OPENROUTER_API_KEY. Puede reutilizar models.providers.openrouter.apiKey.
baseUrl
string
Valor predeterminado https://openrouter.ai/api/v1. El valor heredado https://openrouter.ai/v1 se normaliza.
model
string
Valor predeterminado hexgrad/kokoro-82m. Alias: modelId.
speakerVoice
string
Valor predeterminado af_alloy. Alias heredados: voice, voiceId.
responseFormat
"mp3" | "pcm"
Valor predeterminado mp3.
speed
number
Sobrescritura de velocidad nativa del proveedor.
apiKey
string
Entorno: VOLCENGINE_TTS_API_KEY o BYTEPLUS_SEED_SPEECH_API_KEY.
resourceId
string
Valor predeterminado seed-tts-1.0. Entorno: VOLCENGINE_TTS_RESOURCE_ID. Usa seed-tts-2.0 cuando tu proyecto tenga derecho de uso de TTS 2.0.
appKey
string
Encabezado de clave de app. Valor predeterminado aGjiRDfUWi. Entorno: VOLCENGINE_TTS_APP_KEY.
baseUrl
string
Sobrescribe el endpoint HTTP de TTS de Seed Speech. Entorno: VOLCENGINE_TTS_BASE_URL.
speakerVoice
string
Tipo de voz. Valor predeterminado en_female_anna_mars_bigtts. Entorno: VOLCENGINE_TTS_VOICE. Alias heredado: voice.
speedRatio
number
Relación de velocidad nativa del proveedor, 0.2..3.
emotion
string
Etiqueta de emoción nativa del proveedor.
appId / token / cluster
string
obsoleto
Campos heredados de Volcengine Speech Console. Entorno: VOLCENGINE_TTS_APPID, VOLCENGINE_TTS_TOKEN, VOLCENGINE_TTS_CLUSTER (valor predeterminado volcano_tts).
apiKey
string
Entorno: XAI_API_KEY.
baseUrl
string
Valor predeterminado https://api.x.ai/v1. Entorno: XAI_BASE_URL.
speakerVoiceId
string
Valor predeterminado eve. Voces en vivo: ara, eve, leo, rex, sal, una. Alias heredado: voiceId.
language
string
Código de idioma BCP-47 o auto. Valor predeterminado en.
responseFormat
"mp3" | "wav" | "pcm" | "mulaw" | "alaw"
Valor predeterminado mp3.
speed
number
Sobrescritura de velocidad nativa del proveedor, 0.7..1.5.
apiKey
string
Entorno: XIAOMI_API_KEY.
baseUrl
string
Valor predeterminado https://api.xiaomimimo.com/v1. Entorno: XIAOMI_BASE_URL.
model
string
Valor predeterminado mimo-v2.5-tts. Entorno: XIAOMI_TTS_MODEL. También admite mimo-v2-tts y mimo-v2.5-tts-voicedesign.
speakerVoice
string
Valor predeterminado mimo_default para modelos de voz preestablecida. Entorno: XIAOMI_TTS_VOICE. Alias heredado: voice. No se envía para mimo-v2.5-tts-voicedesign.
format
"mp3" | "wav"
Valor predeterminado mp3. Entorno: XIAOMI_TTS_FORMAT.
style
string
Instrucción opcional de estilo en lenguaje natural enviada como mensaje de usuario; no se pronuncia. Para mimo-v2.5-tts-voicedesign, este es el prompt de diseño de voz; OpenClaw proporciona un valor predeterminado cuando se omite.

Herramienta del agente

La herramienta tts convierte texto a voz y devuelve un archivo adjunto de audio para la entrega de respuestas. En Feishu, Matrix, Telegram y WhatsApp, el audio se entrega como mensaje de voz en lugar de como archivo adjunto. Feishu y WhatsApp pueden transcodificar la salida TTS que no sea Opus en esta ruta cuando ffmpeg está disponible. WhatsApp envía audio mediante Baileys como una nota de voz PTT (audio con ptt: true) y envía el texto visible por separado del audio PTT porque los clientes no muestran de forma consistente subtítulos en las notas de voz. La herramienta acepta los campos opcionales channel y timeoutMs; timeoutMs es un tiempo de espera de solicitud del proveedor por llamada en milisegundos. Los valores por llamada sobrescriben messages.tts.timeoutMs; los tiempos de espera TTS configurados sobrescriben cualquier valor predeterminado de proveedor creado por un Plugin.

RPC de Gateway

MétodoPropósito
tts.statusLeer el estado TTS actual y el último intento.
tts.enableEstablecer la preferencia automática local en always.
tts.disableEstablecer la preferencia automática local en off.
tts.convertTexto a audio puntual.
tts.setProviderEstablecer la preferencia local de proveedor.
tts.personasEnumerar las personas configuradas y la activa.
tts.setPersonaEstablecer la preferencia local de persona.
tts.providersEnumerar los proveedores configurados y su estado.

Enlaces de servicio

Relacionado