Nodes and media
Áudio e notas de voz
O que funciona
- Compreensão de mídia (áudio): Se a compreensão de áudio estiver habilitada (ou for detectada automaticamente), o OpenClaw:
- Localiza o primeiro anexo de áudio (caminho local ou URL) e o baixa, se necessário.
- Aplica
maxBytesantes de enviar para cada entrada de modelo. - Executa a primeira entrada de modelo qualificada na ordem (provedor ou CLI).
- Se ela falhar ou for ignorada (tamanho/tempo limite), tenta a próxima entrada.
- Em caso de sucesso, substitui
Bodypor um bloco[Audio]e define{{Transcript}}.
- Análise de comandos: Quando a transcrição é concluída com sucesso,
CommandBody/RawBodysão definidos como a transcrição, para que comandos de barra continuem funcionando. - Registro detalhado: Em
--verbose, registramos quando a transcrição é executada e quando ela substitui o corpo.
Detecção automática (padrão)
Se você não configurar modelos e tools.media.audio.enabled não estiver definido como false,
o OpenClaw detecta automaticamente nesta ordem e para na primeira opção funcional:
- Modelo de resposta ativo quando seu provedor oferece suporte à compreensão de áudio.
- CLIs locais (se instaladas)
sherpa-onnx-offline(requerSHERPA_ONNX_MODEL_DIRcom encoder/decoder/joiner/tokens)whisper-cli(dowhisper-cpp; usaWHISPER_CPP_MODELou o modelo tiny incluído)whisper(CLI em Python; baixa modelos automaticamente)
- Gemini CLI (
gemini) usandoread_many_files - Autenticação do provedor
- Entradas configuradas em
models.providers.*que oferecem suporte a áudio são tentadas primeiro - Ordem de fallback incluída: OpenAI → Groq → xAI → Deepgram → Google → SenseAudio → ElevenLabs → Mistral
- Entradas configuradas em
Para desabilitar a detecção automática, defina tools.media.audio.enabled: false.
Para personalizar, defina tools.media.audio.models.
Observação: A detecção de binários é de melhor esforço no macOS/Linux/Windows; garanta que a CLI esteja no PATH (expandimos ~) ou defina um modelo de CLI explícito com o caminho completo do comando.
Exemplos de configuração
Fallback de provedor + CLI (OpenAI + Whisper CLI)
{
tools: {
media: {
audio: {
enabled: true,
maxBytes: 20971520,
models: [
{ provider: "openai", model: "gpt-4o-mini-transcribe" },
{
type: "cli",
command: "whisper",
args: ["--model", "base", "{{MediaPath}}"],
timeoutSeconds: 45,
},
],
},
},
},
}
Somente provedor com controle por escopo
{
tools: {
media: {
audio: {
enabled: true,
scope: {
default: "allow",
rules: [{ action: "deny", match: { chatType: "group" } }],
},
models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" }],
},
},
},
}
Somente provedor (Deepgram)
{
tools: {
media: {
audio: {
enabled: true,
models: [{ provider: "deepgram", model: "nova-3" }],
},
},
},
}
Somente provedor (Mistral Voxtral)
{
tools: {
media: {
audio: {
enabled: true,
models: [{ provider: "mistral", model: "voxtral-mini-latest" }],
},
},
},
}
Somente provedor (SenseAudio)
{
tools: {
media: {
audio: {
enabled: true,
models: [{ provider: "senseaudio", model: "senseaudio-asr-pro-1.5-260319" }],
},
},
},
}
Enviar a transcrição para o chat (opt-in)
{
tools: {
media: {
audio: {
enabled: true,
echoTranscript: true, // default is false
echoFormat: '📝 "{transcript}"', // optional, supports {transcript}
models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" }],
},
},
},
}
Observações e limites
- A autenticação do provedor segue a ordem padrão de autenticação de modelos (perfis de autenticação, variáveis de ambiente,
models.providers.*.apiKey). - Detalhes de configuração do Groq: Groq.
- Deepgram usa
DEEPGRAM_API_KEYquandoprovider: "deepgram"é usado. - Detalhes de configuração do Deepgram: Deepgram (transcrição de áudio).
- Detalhes de configuração do Mistral: Mistral.
- SenseAudio usa
SENSEAUDIO_API_KEYquandoprovider: "senseaudio"é usado. - Detalhes de configuração do SenseAudio: SenseAudio.
- Provedores de áudio podem substituir
baseUrl,headerseproviderOptionsviatools.media.audio. - O limite de tamanho padrão é 20 MB (
tools.media.audio.maxBytes). Áudio acima do limite é ignorado para esse modelo e a próxima entrada é tentada. - Arquivos de áudio minúsculos/vazios com menos de 1024 bytes são ignorados antes da transcrição por provedor/CLI.
- O
maxCharspadrão para áudio não é definido (transcrição completa). Definatools.media.audio.maxCharsoumaxCharspor entrada para cortar a saída. - O padrão automático da OpenAI é
gpt-4o-mini-transcribe; definamodel: "gpt-4o-transcribe"para maior precisão. - Use
tools.media.audio.attachmentspara processar várias mensagens de voz (mode: "all"+maxAttachments). - A transcrição fica disponível para templates como
{{Transcript}}. tools.media.audio.echoTranscriptfica desativado por padrão; habilite para enviar a confirmação da transcrição de volta ao chat de origem antes do processamento pelo agente.tools.media.audio.echoFormatpersonaliza o texto de eco (placeholder:{transcript}).- O stdout da CLI é limitado (5 MB); mantenha a saída da CLI concisa.
- Os
argsda CLI devem usar{{MediaPath}}para o caminho do arquivo de áudio local. Executeopenclaw doctor --fixpara migrar placeholders{input}obsoletos de configurações antigas deaudio.transcription.command.
Suporte a ambiente de proxy
A transcrição de áudio baseada em provedor respeita variáveis de ambiente padrão de proxy de saída:
HTTPS_PROXYHTTP_PROXYALL_PROXYhttps_proxyhttp_proxyall_proxy
Se nenhuma variável de ambiente de proxy estiver definida, é usada saída direta. Se a configuração de proxy estiver malformada, o OpenClaw registra um aviso e volta para a busca direta.
Detecção de menções em grupos
Quando requireMention: true é definido para um chat em grupo, o OpenClaw agora transcreve áudio antes de verificar menções. Isso permite que mensagens de voz sejam processadas mesmo quando contêm menções.
Como funciona:
- Se uma mensagem de voz não tiver corpo de texto e o grupo exigir menções, o OpenClaw executa uma transcrição de "preflight".
- A transcrição é verificada em busca de padrões de menção (por exemplo,
@BotName, gatilhos por emoji). - Se uma menção for encontrada, a mensagem segue pelo pipeline completo de resposta.
- A transcrição é usada para detecção de menções, para que mensagens de voz possam passar pelo gate de menção.
Comportamento de fallback:
- Se a transcrição falhar durante o preflight (tempo limite, erro de API etc.), a mensagem será processada com base na detecção de menções apenas por texto.
- Isso garante que mensagens mistas (texto + áudio) nunca sejam descartadas incorretamente.
Opt-out por grupo/tópico do Telegram:
- Defina
channels.telegram.groups.<chatId>.disableAudioPreflight: truepara ignorar verificações de menção na transcrição de preflight para esse grupo. - Defina
channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflightpara substituir por tópico (truepara ignorar,falsepara forçar a habilitação). - O padrão é
false(preflight habilitado quando as condições com gate de menção correspondem).
Exemplo: Um usuário envia uma mensagem de voz dizendo "Ei @Claude, como está o tempo?" em um grupo do Telegram com requireMention: true. A mensagem de voz é transcrita, a menção é detectada e o agente responde.
Pontos de atenção
- Regras de escopo usam a primeira correspondência como vencedora.
chatTypeé normalizado paradirect,groupouroom. - Garanta que sua CLI saia com 0 e imprima texto simples; JSON precisa ser ajustado via
jq -r .text. - Para
parakeet-mlx, se você passar--output-dir, o OpenClaw lê<output-dir>/<media-basename>.txtquando--output-formatétxt(ou omitido); formatos de saída nãotxtvoltam para análise de stdout. - Mantenha tempos limite razoáveis (
timeoutSeconds, padrão de 60s) para evitar bloquear a fila de respostas. - A transcrição de preflight processa apenas o primeiro anexo de áudio para detecção de menções. Áudios adicionais são processados durante a fase principal de compreensão de mídia.