Á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.
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
- Baixar o áudio do servidor da Meta (link expira em <5 min — precisa ser imediato).
- Transcrever em texto em ~3-5 segundos.
- Entender a intenção (mesma IA que responde texto).
- Responder em texto curto, citando o que ouviu se for caso ambíguo.
- 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)
- Custo: US$0,006 por minuto (~R$0,03 por áudio típico de 90s).
- Latência: 1-3s pra áudios <30s, 3-6s pra 1-2min.
- Qualidade em PT-BR: excelente — entende gírias, sotaques, ruído moderado.
- Limites: 25MB por arquivo (cobre áudio até ~25 min — suficiente pra 99% dos casos).
Opção 2: Gemini Audio (Google)
- Custo: US$0,0003 por minuto (10× mais barato que Whisper).
- Latência: 2-4s.
- Qualidade PT-BR: boa, perde um pouco em gírias regionais.
- Vantagem: entende áudio + responde direto (transcreve + processa em 1 chamada).
Opção 3: Auto-hospedar Whisper (open source)
- Custo: só servidor (CPU/GPU). Sai ~R$0,001 por minuto em CPU, ~R$0,0005 em GPU.
- Latência: 5-15s em CPU, 1-3s em GPU.
- Vantagem: dados não saem da sua infra (LGPD/HIPAA-sensitive).
- Desvantagem: manter modelo atualizado e infra é trabalho real.
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
| Etapa | Tempo |
|---|---|
| Webhook Meta → seu servidor | 0,5-1s |
| Download do áudio | 0,5-1,5s |
| Transcrição Whisper (90s áudio) | 2-3s |
| IA processa + gera resposta | 1-2s |
| Envio resposta via API | 0,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)
- Whisper API: 5.000 × 90s = 7.500 min × $0,006 = $45/mês (~R$220).
- Gemini Audio: 5.000 × 90s = 7.500 min × $0,0003 = $2,25/mês (~R$11).
- Auto-hospedado: servidor R$100-300/mês (custo fixo, vale só pra +10k á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
- Não baixar imediatamente. Link da Meta expira em 5 min. Se webhook demora, áudio vai pro vazio. Tem que processar síncrono.
- 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?"
- 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:
- Disclaimer na 1ª interação: "Sua conversa pode ser processada por IA pra atendimento."
- Retenção controlável: exclui áudio raw após transcrição se não precisa do original (mantém só texto).
- Whisper OpenAI: não treina com dados de API (políticas atuais). Gemini idem.
- Setor regulado (saúde, financeiro): auto-hospedar é mais seguro.
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 →