---
title: "Transcrição de áudio no WhatsApp com IA: responder mensagens de voz automaticamente"
description: "Como baixar o áudio recebido no WhatsApp pela API, transcrever com IA (Whisper) e responder — o código completo, com o que quebra em produção."
url: "https://wame.api.br/blog/transcricao-audio-whatsapp-ia"
language: "pt-BR"
og:type: "article"
published_time: "2026-09-16"
modified_time: "2026-09-16"
author: "Raphael Serafim"
keywords: "transcrever audio whatsapp, whisper whatsapp api, ia entender audio whatsapp, responder audio whatsapp automaticamente, transcricao de voz whatsapp, bot que ouve audio whatsapp, speech to text whatsapp api"
reading_time: "7 min de leitura"
---

# Transcrição de áudio no WhatsApp com IA: responder mensagens de voz automaticamente

> Como baixar o áudio recebido no WhatsApp pela API, transcrever com IA (Whisper) e responder — o código completo, com o que quebra em produção.

**Transcrever áudio do WhatsApp com IA são três passos: baixar o arquivo pelo identificador que chega no webhook, mandar para um modelo de transcrição como o Whisper, e tratar o texto resultante como se fosse uma mensagem de texto normal.** A dificuldade não está em nenhum desses passos isoladamente — está no que fica entre eles: o formato do áudio, o tempo de processamento e o que fazer quando a transcrição sai ruim.

## Passo 1: identificar e baixar o áudio

Quando chega uma mensagem de voz, o webhook entrega um evento do tipo `audio`, com um identificador de mensagem em vez do conteúdo direto — o áudio em si precisa ser baixado à parte:

```js
function extrairAudio(body) {
  const msg = body?.entry?.[0]?.changes?.[0]?.value?.messages?.[0];
  if (!msg || msg.type !== "audio") return null;

  return { messageId: msg.id, de: msg.from, canal: body.provider };
}

async function baixarAudio(messageId) {
  const r = await fetch(
    `https://server.wame.api.br/${process.env.WAME_KEY}/message/${messageId}/media?format=binary`
  );
  return Buffer.from(await r.arrayBuffer());
}
```

O parâmetro `format` decide o formato de retorno: `binary` devolve o arquivo direto, útil para mandar adiante para a API de transcrição sem conversão intermediária; `json` (o padrão) devolve em base64, útil se você precisa guardar ou logar antes de processar.

## Passo 2: transcrever

```js
import OpenAI from "openai";
import { toFile } from "openai/uploads";

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

async function transcrever(audioBuffer) {
  const arquivo = await toFile(audioBuffer, "audio.ogg");

  const r = await openai.audio.transcriptions.create({
    file: arquivo,
    model: "whisper-1",
    language: "pt",
  });

  return r.text.trim();
}
```

Passar `language: "pt"` evita que o Whisper gaste tempo detectando o idioma e reduz erro de transcrição em sotaques regionais — vale fixar quando você já sabe o idioma predominante da sua base de clientes.

## Passo 3: tratar como texto normal

A partir daqui, a transcrição segue o mesmo caminho de [qualquer chatbot de IA no WhatsApp](/blog/chatbot-ia-openai-whatsapp): vira a entrada do modelo, que responde normalmente.

```js
app.post("/webhook/wame", async (req, res) => {
  res.sendStatus(200); // responda antes de processar — a transcrição leva alguns segundos

  const audio = extrairAudio(req.body);
  if (!audio) return;

  try {
    const buffer = await baixarAudio(audio.messageId);
    const texto = await transcrever(buffer);

    const resposta = await responder(audio.de, texto); // mesma função de qualquer chatbot de texto
    await enviar(audio.de, resposta, audio.canal);
  } catch (e) {
    console.error("falha ao transcrever áudio", audio.de, e);
    await enviar(audio.de, "Não consegui entender o áudio, pode escrever a mensagem?", audio.canal);
  }
});
```

## O que quebra em produção

**Áudio curto demais ou só ruído.** Um "oi" gravado sem querer, ou um áudio de meio segundo, gera transcrição vazia ou sem sentido. Vale checar o tamanho do texto retornado antes de mandar para o modelo de resposta — abaixo de um limiar mínimo, peça para o cliente repetir.

**Formato incompatível.** O WhatsApp entrega áudio majoritariamente em OGG/Opus. A maioria dos provedores de transcrição aceita direto, mas se o seu não aceitar, uma conversão com `ffmpeg` antes de enviar resolve — é uma linha a mais, não um redesenho.

**Latência visível.** Transcrever e responder leva alguns segundos a mais do que responder texto direto. Mandar um `set_typing` ou uma confirmação rápida ("ouvindo seu áudio...") enquanto processa evita que o cliente pense que a mensagem não chegou.

**Sotaque e ruído de fundo.** Transcrição não é perfeita — em ambiente ruidoso ou sotaque forte, o texto pode sair incompleto ou trocado. Isso é motivo a mais para o system prompt do modelo de resposta admitir incerteza em vez de responder com confiança em cima de uma transcrição ruim, no mesmo espírito de [quando a IA deve parar de responder](/blog/quando-ia-deve-parar-responder-whatsapp).

## Respondendo em áudio (opcional)

Se o seu caso pede resposta em voz — acessibilidade, ou um público que prefere áudio a texto — o caminho é o inverso: gerar a fala com uma API de texto-para-voz e enviar como mensagem de áudio:

```js
async function gerarAudioResposta(texto) {
  const r = await openai.audio.speech.create({
    model: "tts-1",
    voice: "alloy",
    input: texto,
  });
  return Buffer.from(await r.arrayBuffer());
}
```

O envio segue o [endpoint de mensagem de áudio](/blog/como-enviar-mensagem-whatsapp-api) da API. Vale reservar isso para casos específicos — soma custo e latência a cada resposta, e a maioria dos atendimentos por texto continua mais rápida de ler do que de ouvir.

## Conclusão

Transcrição de áudio não é uma capacidade separada de um chatbot de IA — é uma etapa a mais antes do texto chegar ao modelo. O código de resposta, memória e escalonamento para humano continua o mesmo de um bot de texto; muda só o que acontece entre receber o evento `audio` no webhook e ter uma string pronta para processar. Feito isso, o resto da arquitetura — [RAG](/blog/rag-whatsapp-base-conhecimento-ia), function calling, regras de escalonamento — se aplica sem alteração.

## Perguntas frequentes

### Como baixar um áudio recebido no WhatsApp pela API?

O webhook entrega a mensagem de áudio com um identificador (messageId); você usa esse ID para baixar o arquivo pelo endpoint de mídia da sua instância, que devolve o áudio em base64 ou em binário, dependendo do formato pedido.

### Qual modelo de IA transcreve áudio do WhatsApp?

O Whisper da OpenAI é a opção mais usada por custo e qualidade em português, mas qualquer API de speech-to-text que aceite o formato de áudio recebido (geralmente OGG/Opus no WhatsApp) funciona da mesma forma na integração — muda só a chamada, não a arquitetura.

### O áudio do WhatsApp precisa de conversão antes de transcrever?

Depende do provedor de transcrição. O Whisper aceita OGG diretamente na maioria dos casos; alguns serviços exigem MP3 ou WAV, o que pede uma conversão com ffmpeg antes de enviar. Vale testar com o formato original primeiro — economiza uma etapa se funcionar.

### Dá para responder em áudio também, não só em texto?

Sim, com um passo a mais: depois de gerar a resposta em texto, você chama uma API de texto-para-voz (como a TTS da própria OpenAI) e envia o resultado pelo endpoint de mensagem de áudio da API do WhatsApp. Isso soma latência e custo, então vale reservar para casos em que responder em áudio faz sentido — não como padrão.

### Quanto tempo leva para transcrever e responder um áudio?

Depende do tamanho do áudio e do provedor, mas geralmente de 2 a 6 segundos para um áudio de até um minuto. Isso é tempo suficiente para o cliente notar — vale mostrar 'digitando…' ou uma confirmação de recebimento enquanto processa, em vez de deixar a conversa parada.
