Modo conversación

El modo conversación es un bucle continuo de conversación por voz:

  1. Escuchar el habla
  2. Enviar la transcripción al modelo (sesión principal, chat.send)
  3. Esperar la respuesta
  4. Reproducirla vía ElevenLabs (reproducción por streaming)

Comportamiento (macOS)

  • Overlay siempre visible mientras el modo conversación está habilitado.
  • Transiciones de fase: Escuchando → Pensando → Hablando.
  • En una pausa corta (ventana de silencio), la transcripción actual se envía.
  • Las respuestas se escriben en WebChat (igual que al teclear).
  • Interrumpir al hablar (activado por defecto): si el usuario empieza a hablar mientras el asistente habla, detenemos la reproducción y anotamos la marca de tiempo de la interrupción para el siguiente prompt.

Directivas de voz en las respuestas

El asistente puede anteponer a su respuesta una única línea JSON para controlar la voz:

{ "voice": "<voice-id>", "once": true }

Reglas:

  • Solo la primera línea no vacía.
  • Las claves desconocidas se ignoran.
  • once: true se aplica solo a la respuesta actual.
  • Sin once, la voz se convierte en la nueva por defecto para el modo conversación.
  • La línea JSON se elimina antes de la reproducción TTS.

Claves soportadas:

  • voice / voice_id / voiceId
  • model / model_id / modelId
  • speed, rate (WPM), stability, similarity, style, speakerBoost
  • seed, normalize, lang, output_format, latency_tier
  • once

Configuración (~/.openclaw/openclaw.json)

{
  talk: {
    voiceId: "elevenlabs_voice_id",
    modelId: "eleven_v3",
    outputFormat: "mp3_44100_128",
    apiKey: "elevenlabs_api_key",
    silenceTimeoutMs: 1500,
    interruptOnSpeech: true,
  },
}

Valores por defecto:

  • interruptOnSpeech: true
  • silenceTimeoutMs: cuando no se configura, el modo conversación mantiene la ventana de pausa por defecto de la plataforma antes de enviar la transcripción (700 ms en macOS y Android, 900 ms en iOS)
  • voiceId: recurre a ELEVENLABS_VOICE_ID / SAG_VOICE_ID (o la primera voz de ElevenLabs cuando la clave API está disponible)
  • modelId: por defecto eleven_v3 cuando no se configura
  • apiKey: recurre a ELEVENLABS_API_KEY (o el perfil de shell del gateway si está disponible)
  • outputFormat: por defecto pcm_44100 en macOS/iOS y pcm_24000 en Android (configura mp3_* para forzar streaming MP3)

UI en macOS

  • Toggle en barra de menú: Talk
  • Pestaña de configuración: grupo Modo conversación (voice id + toggle de interrupción)
  • Overlay:
    • Escuchando: nube pulsa con nivel de micrófono
    • Pensando: animación de hundimiento
    • Hablando: anillos radiantes
    • Clic en la nube: detener la reproducción
    • Clic en X: salir del modo conversación

Notas

  • Requiere permisos de Voz + Micrófono.
  • Usa chat.send contra la clave de sesión main.
  • TTS usa la API de streaming de ElevenLabs con ELEVENLABS_API_KEY y reproducción incremental en macOS/iOS/Android para menor latencia.
  • stability para eleven_v3 se valida a 0.0, 0.5 o 1.0; otros modelos aceptan 0..1.
  • latency_tier se valida a 0..4 cuando se configura.
  • Android soporta formatos de salida pcm_16000, pcm_22050, pcm_24000 y pcm_44100 para streaming AudioTrack de baja latencia.