Tecnologia · UX

Áudios no WhatsApp: transcrição automática + IA respondendo em texto

No Brasil, 40-55% das mensagens que clientes mandam pra empresa são áudio. Sua atendente tá numa reunião — não consegue ouvir 8 áudios de 2 minutos seguidos. Cliente cobra resposta. Resultado: backlog que vira churn. Esse post mostra como configurar transcrição automática (Whisper / Gemini) + IA que entende e responde, com custos reais (~R$0,001 por minuto de áudio), tempo de resposta <5 segundos e os 3 erros que destroem essa funcionalidade na prática.

16 de maio de 2026 · 9 min de leitura · MercaBot

O problema que ninguém mede direito

Vai no painel da sua operação WhatsApp. Conta quantas das últimas 100 mensagens recebidas são áudio. Provavelmente entre 40-55% — é o padrão brasileiro (US/EU ficam em 5-15%). E pergunta: a equipe escuta todos? Resposta honesta: não. Áudio fica acumulando, atendente posterga, cliente desiste.

O que o bot precisa fazer com áudio

  1. Baixar o áudio do servidor da Meta (link expira em <5 min — precisa ser imediato).
  2. Transcrever em texto em ~3-5 segundos.
  3. Entender a intenção (mesma IA que responde texto).
  4. Responder em texto curto, citando o que ouviu se for caso ambíguo.
  5. Salvar transcrição no histórico pra atendente humano ler depois.

Stack técnico (que funciona em produção)

Opção 1: OpenAI Whisper API (mais usada)

Opção 2: Gemini Audio (Google)

Opção 3: Auto-hospedar Whisper (open source)

Implementação em Cloudflare Worker + Whisper

// Cloudflare Worker — recebe webhook do WhatsApp
export default {
  async fetch(req, env) {
    const body = await req.json();
    const msg = body.entry[0].changes[0].value.messages?.[0];
    if (msg?.type !== 'audio') return new Response('ok');

    // 1. Pega URL do áudio (link expira em 5 min!)
    const mediaId = msg.audio.id;
    const mediaInfo = await fetch(
      `https://graph.facebook.com/v18.0/${mediaId}`,
      {headers: {Authorization: `Bearer ${env.META_TOKEN}`}}
    ).then(r => r.json());

    // 2. Baixa o áudio (ogg/opus)
    const audioBlob = await fetch(mediaInfo.url, {
      headers: {Authorization: `Bearer ${env.META_TOKEN}`}
    }).then(r => r.blob());

    // 3. Transcreve via Whisper
    const formData = new FormData();
    formData.append('file', audioBlob, 'audio.ogg');
    formData.append('model', 'whisper-1');
    formData.append('language', 'pt');

    const transcript = await fetch('https://api.openai.com/v1/audio/transcriptions', {
      method: 'POST',
      headers: {Authorization: `Bearer ${env.OPENAI_KEY}`},
      body: formData
    }).then(r => r.json());

    // 4. Salva no histórico + processa como mensagem de texto
    await saveTranscript(msg.from, transcript.text);
    await processarMensagem({from: msg.from, text: transcript.text, source: 'audio'});

    return new Response('ok');
  }
}

Tempo total: do cliente mandar áudio até bot responder

EtapaTempo
Webhook Meta → seu servidor0,5-1s
Download do áudio0,5-1,5s
Transcrição Whisper (90s áudio)2-3s
IA processa + gera resposta1-2s
Envio resposta via API0,5s
TOTAL~5-8s

Como o bot deve responder áudio (UX boa)

✅ Bom — confirma entendimento implícito

Cliente: [áudio: "queria saber o preço da progressiva pra cabelo longo"]
Bot: "Progressiva pra cabelo longo: R$220 (sessão única).
Quer agendar? Tem preferência de dia?"

❌ Ruim — pede pra repetir em texto

Cliente: [áudio]
Bot: "Não escuto áudio. Manda em texto por favor."

Cliente perde a paciência. Métrica real: 35% não respondem depois desse "não escuto".

✅ Ótimo — cita só se ambíguo

Cliente: [áudio com ruído + 2 perguntas misturadas]
Bot: "Captei: você quer saber valor da progressiva E
disponibilidade pra sábado, certo? Se for isso:
progressiva R$220, sábado tem 14h e 16h livres."

Custos reais em produção (operação 5.000 áudios/mês)

Recomendação real: começa com Whisper (qualidade > custo nessa escala). Migra pra Gemini Audio quando passar de 20k áudios/mês.

3 erros que destroem essa feature

  1. Não baixar imediatamente. Link da Meta expira em 5 min. Se webhook demora, áudio vai pro vazio. Tem que processar síncrono.
  2. Não tratar erros de transcrição. Whisper falha ~2% das vezes (áudio cortado, ruído extremo). Bot tem que ter fallback: "Não consegui escutar bem. Pode tentar de novo ou escrever?"
  3. Bot processar áudio do bot. Se você usa áudio na resposta também, garante que o webhook ignora mensagens do próprio bot (loop infinito).

Privacy / LGPD

Áudio é dado pessoal. Algumas considerações:

Transcrição automática no MercaBot

Whisper integrado nativo no painel. Bot recebe áudio, transcreve em <5s, responde em texto, salva no histórico. Sem dev.

Testar grátis →