Como nasceu o AudioFlow — um serviço que transcreve áudios do WhatsApp automaticamente, no seu número pessoal. Um case contado sem jargão: as decisões, o bug que cobrou a mais durante três meses, o muro que o WhatsApp levantou no meio do caminho, e a conta que fecha no fim.
TL;DR — 40 segundos
Você recebe um áudio de quatro minutos. Está numa reunião, no metrô, ao lado de alguém dormindo. Não dá pra ouvir. Você deixa pra depois. Depois vira nunca, e três dias depois alguém pergunta por que você não respondeu.
Esse é um problema pequeno e universal — o tipo que quase todo mundo tem e quase ninguém resolve, porque resolver dá mais trabalho do que parece. O AudioFlow é a minha tentativa de resolver: você conecta seu WhatsApp uma vez, e daí em diante todo áudio que chega volta transcrito em texto, no mesmo chat, sem você fazer nada.
Este texto é o case por trás dele. Não é um manual técnico — escrevi pensando em quem não programa. Mas também não é uma peça de marketing: os erros estão aqui, inclusive um que me custou caro e outro que eu quase reportei errado.
Existem duas formas de um software conversar com o WhatsApp. A escolha entre elas decide que produto você consegue construir — e essa foi a primeira decisão do AudioFlow.
A Meta (dona do WhatsApp) oferece uma porta oficial chamada WhatsApp Business API. É o que empresas usam pra te mandar aquele "seu pedido saiu para entrega". Funciona bem e é estável.
Só que ela tem um pedágio: exige uma conta comercial, aprovação da Meta, um número separado do seu, e cobrança por conversa. Para uma empresa isso é normal. Para uma pessoa física que só quer ler os próprios áudios, é um bloqueio total — ninguém vai criar uma conta comercial e migrar de número pra transcrever áudio de família.
Existe outra forma, e você já usa ela: o WhatsApp Web. Quando você abre o WhatsApp no computador e escaneia aquele QR code, seu celular está autorizando um aparelho companheiro — um dispositivo a mais que enxerga suas conversas.
O AudioFlow entra por aí. Ele se apresenta como mais um aparelho vinculado à sua conta, exatamente como o WhatsApp Web faria. A diferença é que, em vez de desenhar uma tela na sua frente, ele fica esperando áudios chegarem.
Por que isso importa tanto: é a diferença entre "instale este app, crie uma conta comercial e mude de número" e "escaneie um código, pronto". O produto inteiro depende de o usuário poder usar o número que ele já tem.
Essa escolha tem um preço, que eu pago até hoje: não é a porta oficial. Quando o WhatsApp muda alguma coisa, eu descubro junto com todo mundo. Vou voltar nisso na seção 6 — foi lá que levei o maior soco.
Do seu lado é simples: chega áudio, volta texto. Por dentro, uma dúzia de passos acontece em sequência. Vou percorrer todos, porque é aí que moram as decisões interessantes.
Alguém te manda um áudio
│
▼
[1] O AudioFlow percebe que chegou algo
│
▼
[2] Vale a pena transcrever? ── não ──▶ descarta, custo zero
│ sim
▼
[3] Áudio vira texto (Whisper)
│
▼
[4] Limpeza do texto (pontuação, correções, filtros)
│
▼
[5] Áudio longo? ── sim ──▶ [6] Gera um resumo (Claude)
│ não │
▼ ▼
[7] Você ainda tem cota no plano?
│ sim
▼
[8] Texto volta pro seu WhatsApp
│
▼
[9] Áudio e texto são apagados. Fica só a duração.
Antes de gastar um centavo, o sistema pergunta: esse áudio deve mesmo ser transcrito? Você configura isso. Pode ignorar áudios muito curtos, ignorar contatos específicos, ignorar grupos, ou transcrever também os áudios que você envia.
Parece detalhe, mas é o que separa um serviço viável de um que queima dinheiro. Cada áudio que passa desse filtro custa dinheiro de verdade. Cada um que é barrado antes custa zero.
Aqui entra o Whisper, um modelo de inteligência artificial especializado em ouvir e escrever o que ouviu. Ele entende mais de 100 idiomas e descobre sozinho qual está sendo falado — você não precisa avisar.
Uso um fornecedor chamado Groq, que roda esse modelo muito rápido e muito barato. Tenho também um segundo fornecedor de reserva, a OpenAI, para o caso de o primeiro cair. Esse arranjo de reserva já me deu uma lição cara — está na seção 5.
Transcrição crua sai como um bloco só, sem pontuação decente e às vezes sem letra maiúscula. É tecnicamente correto e desagradável de ler.
Então o texto passa por uma faxina: quebra em parágrafos, arruma maiúsculas, aplica correções que você mesmo cadastrou (útil pra nomes próprios e jargão da sua área — se o Whisper sempre escreve o nome do seu chefe errado, você corrige uma vez e nunca mais), e opcionalmente filtra palavrão ou traduz.
Aqui está a parte que as pessoas mais gostam. Se o áudio passou de 30 segundos, um segundo modelo de IA (o Claude) lê a transcrição e escreve um resumo dos pontos principais.
E tem um detalhe de desenho que parece bobo e não é: o resumo vem antes da transcrição completa na mensagem que você recebe. No celular, isso significa que você lê o essencial sem rolar a tela. Se quiser o texto inteiro, ele está logo abaixo. Inverter essa ordem transformaria o recurso mais útil do produto em algo que ninguém veria.
Cada plano dá um tanto de minutos por mês. Antes de enviar a resposta, o sistema confere se você ainda tem saldo. Essa checagem virou um caso à parte — é a seção 4 inteira.
Depois de te mandar o texto, o áudio e a transcrição são descartados. Não vão pra banco de dados, não vão pra disco, não ficam em lugar nenhum.
O que sobra é o mínimo pra fazer a conta fechar: quanto tempo tinha o áudio, que idioma era, quanto custou, se deu certo. O número de quem te mandou é guardado embaralhado por um processo que só funciona em um sentido — dá pra saber que dois áudios vieram da mesma pessoa, não dá pra descobrir quem é.
Isso não é enfeite de marketing. É uma decisão de arquitetura com consequência prática: mesmo que alguém invada o banco de dados inteiro, não existe uma única mensagem sua pra vazar. O conteúdo simplesmente não está lá.
Essa é a história mais desconfortável do case, e a mais útil.
O sistema precisa descontar da sua cota o tempo que ele transcreveu. A conta original foi escrita assim: pegue a duração em segundos, divida por 60 pra virar minutos, jogue fora a fração, e some 1.
A intenção era arredondar pra cima — quem usa 90 segundos deveria pagar 2 minutos, não 1. Só que essa fórmula não arredonda pra cima. Ela arredonda pra baixo e depois soma um minuto inteiro. O resultado:
| Áudio de verdade | Descontado da sua cota | Erro |
|---|---|---|
| 5 segundos | 1 minuto | 12× a mais |
| 30 segundos | 1 minuto | 2× a mais |
| 60 segundos exatos | 2 minutos | 2× a mais |
| 119 segundos | 2 minutos | ok |
| 120 segundos exatos | 3 minutos | 1,5× a mais |
Repare no caso de 5 segundos. Um "ok, combinado" de cinco segundos consumia um minuto inteiro do plano. No plano gratuito, que dá 30 minutos, trinta áudios curtos zeravam a cota — mesmo que somados dessem dois minutos e meio de áudio real.
Não foi um usuário reclamando. Foi alguém no plano mais caro olhando o painel e estranhando: o número de minutos consumidos não batia com a sensação de uso. Ele tinha razão. Estava marcando 799 minutos quando o uso real era 423.
E aqui está a parte que eu não gosto de contar. O bug foi diagnosticado, a correção foi planejada, o banco de dados foi preparado pra receber a contagem certa — e aí parou. A tarefa ficou marcada como "em andamento" por três meses.
Durante todo esse tempo o sistema continuou cobrando errado, porque o preparo do banco não muda nada sozinho: é como comprar a tinta e não pintar a parede. A metade que faltava era exatamente a que importava.
A lição: "em andamento" é o estado mais perigoso de uma tarefa. "Não começado" incomoda e cobra atenção. "Pronto" está resolvido. "Em andamento" parece que alguém está cuidando — e ninguém está.
Corrigir a fórmula foi a parte fácil: passar a contar segundos reais, arredondando pro segundo mais próximo, sem somar nada.
A parte difícil foi consertar o passado. Todo mundo tinha um número inflado registrado. Era preciso recalcular o consumo de cada pessoa a partir do histórico real.
O plano original era somar a duração de todas as transcrições do ciclo. Antes de executar, eu simulei o resultado — e ainda bem, porque estava errado de novo.
O motivo é sutil. O sistema registra a transcrição antes de checar se você tem cota. Faz sentido: primeiro ele transcreve, depois vê se pode te entregar. Mas isso significa que ficam registradas transcrições que nunca foram cobradas — as que bateram no limite e foram barradas.
Somar tudo cobraria por áudio que a pessoa nunca recebeu. Na simulação, um usuário do plano gratuito apareceria com 65 minutos quando o real cobrado era 11. Seis vezes a mais. E os quinze usuários com consumo seriam prejudicados, sem exceção.
A correção foi somar o histórico com um teto no limite do plano. Assim ninguém entra no modelo novo já estourado por causa de áudio que nunca pagou.
Com a correção no ar, todo mundo recebeu cota de volta:
| Plano | Estava marcando | Uso real | Devolvido |
|---|---|---|---|
| Advanced | 799 min | 423 min | 376 minutos |
| Business | 364 min | 106 min | 258 minutos |
| Basic | 157 min | 97 min | 60 minutos |
| Light | 115 min | 57 min | 58 minutos |
| Free | 120 min | 30 min | 90 minutos |
Ninguém saiu pior. Era o mínimo que se podia fazer — mas levou três meses a mais do que devia.
Essa história é curta e vale mais que a anterior, porque é sobre como a gente se engana medindo.
Enquanto investigava o bug de cobrança, notei uma inconsistência: o sistema tinha 2.200 transcrições registradas, mas só 1.429 eventos de cobrança. Setecentas e setenta e uma transcrições sem cobrança correspondente.
Puxei o fio. Descobri que existem dois caminhos pelos quais um áudio pode ser processado: o caminho principal, robusto, que registra tudo direitinho; e um caminho reserva, mais simples, que entra em ação quando o principal falha. O caminho reserva não registra o evento de cobrança.
Contei quantos áudios do dia tinham ido por cada caminho. Deu 70% pelo caminho reserva. Ou seja: a infraestrutura mais cara e mais bem feita do sistema estava sendo contornada na maior parte do tempo.
Escrevi isso como uma descoberta grave. Estava errado.
Eu havia contado por dia. Quando refiz a mesma contagem por hora, a história mudou completamente:
| Hora | Caminho principal | Caminho reserva |
|---|---|---|
| 04:00 | 0 | 89 |
| 05:00 | 41 | 18 |
| 09:00 em diante | 6 | 0 |
Não era um problema crônico. Era uma pane. Um componente da infraestrutura tinha caído duas semanas antes e voltado naquela mesma manhã, depois de um conserto. Tudo que aconteceu antes das 05h era a pane; tudo depois das 09h estava saudável.
Ao somar o dia inteiro, eu misturei a janela quebrada com a janela normal e cheguei num número que descrevia um problema que não existia mais.
A lição: a média esconde o evento. Um número agregado ao longo de um período que contém uma pane não descreve o normal — descreve a pane diluída. Quando um número parecer alarmante, olhe a distribuição no tempo antes de sair contando a história.
Existe um problema real ali embaixo — áudios muito longos ainda estouram um limite técnico e caem no caminho reserva. Mas é raro e afeta só áudio longo, não 70% de nada. Está documentado com a medição certa e vai ser tratado no ritmo que merece.
Lembra que a escolha da "porta lateral" tinha um preço? Chegou a conta.
Por volta de junho de 2026, o WhatsApp passou a exigir passkey pra vincular um aparelho novo. Passkey é aquela autenticação por digital ou reconhecimento facial que substitui senha — a chave fica guardada no seu celular, num compartimento que nem você consegue abrir e copiar.
Do ponto de vista de segurança, é ótimo e era esperado. Do ponto de vista do AudioFlow, é uma parede.
O problema não é de código, é de desenho do padrão. A regra do passkey diz, em essência: essa chave só pode ser usada numa página que pertença ao whatsapp.com. É exatamente essa regra que impede um site falso de pedir sua digital fingindo ser seu banco.
O AudioFlow não é o whatsapp.com. Então ele não pode pedir. E não adianta gerar uma chave própria — o servidor rejeita, porque a chave tem que ser a que você criou.
Antes de investir em contornar isso, fui ver como as outras ferramentas do mundo estavam lidando. O resultado foi esclarecedor: todas bateram no mesmo muro, e nenhuma passou por cima.
Todas convergiram pra mesma solução — pedir ao usuário que produza a autorização dentro do próprio site do WhatsApp, com uma extensão de navegador de um clique, e repassar essa autorização pro serviço. Incluindo os fornecedores pagos: um deles, comercial, usa exatamente a mesma técnica e admite no próprio blog que ela não escala pra centenas de números.
Isso mudou minha leitura da situação. O atrito não é uma falha minha — é o teto de todo mundo. A solução do AudioFlow está no mesmo nível do que existe de melhor.
A lição: quando bater num muro, gaste um dia olhando como os outros lidaram com ele antes de gastar um mês tentando derrubá-lo. Se ninguém passou, o problema provavelmente não é seu — e a conversa deixa de ser "como resolvo" e passa a ser "como convivo".
E há um detalhe que salva o produto: a passkey é pedida só no momento de conectar, uma única vez. Depois disso, as reconexões acontecem sozinhas. É um passo a mais no cadastro, não um incômodo diário.
Uma das coisas que mais me surpreendeu neste projeto foi como a IA ficou barata.
| Item | Custo por minuto |
|---|---|
| Transcrição (áudio → texto) | R$ 0,0034 |
| Resumo (metade dos áudios precisa) | R$ 0,0038 |
| Total | R$ 0,0072 |
Sete milésimos de real. Um minuto de áudio transcrito e resumido por inteligência artificial custa menos de um centavo. Cem minutos custam setenta centavos.
| Plano | Preço | Minutos | Custo de IA | Margem |
|---|---|---|---|---|
| Starter | R$ 29,90 | 120 | R$ 0,87 | 97% |
| Light | R$ 49,90 | 240 | R$ 1,74 | 96% |
| Basic | R$ 79,90 | 480 | R$ 3,47 | 96% |
| Pro | R$ 149,90 | 960 | R$ 6,94 | 95% |
| Business | R$ 499,90 | 3.840 | R$ 27,75 | 94% |
E o plano gratuito, com 30 minutos, custa 22 centavos por mês por pessoa. É barato o bastante pra funcionar como porta de entrada em vez de prejuízo.
Aqui está a virada de chave: o custo da IA é irrelevante. O custo é a infraestrutura ligada.
Quatro dos seis servidores não podem dormir. A conexão com o WhatsApp precisa ficar de pé o tempo todo — se o servidor hiberna, sua sessão cai. Isso significa custo fixo rodando 24 horas por dia, com um usuário ou com mil.
Dá uns 100 reais por mês em servidores, mais o banco de dados. E esses 100 reais existem mesmo com zero clientes.
A conclusão de negócio: num serviço assim, o gargalo nunca é o custo por uso — é a conversão. Cada assinante novo é quase lucro puro, porque o custo variável é ridículo. O que decide se o negócio fecha é quantas pessoas gratuitas viram pagantes, não quantos minutos elas transcrevem.
Um detalhe que quase virou uma surpresa desagradável. Lembra do fornecedor reserva de transcrição? Ele custa nove vezes mais que o principal.
Enquanto o principal funciona, o reserva nunca é acionado e o custo fica no mínimo. Mas o reserva entra em ação sozinho, em silêncio, sempre que o principal falha. Se metade das transcrições passasse a cair nele, o custo de transcrição quintuplicaria sem que ninguém percebesse — até a fatura chegar.
E já aconteceu algo pior que caro: a chave do fornecedor principal expirou, o reserva assumiu — e assumiu quebrado. Estava configurado errado e devolvia a duração do áudio como zero. Como o sistema pula áudios de duração zero, ele passou a descartar tudo silenciosamente. Dois defeitos se escondendo um atrás do outro: um plano B que ninguém testava, escondido por um plano A que não falhava nunca.
A lição: plano B que nunca é exercitado não é plano B, é suposição. Se ele só roda quando tudo já deu errado, ele vai estragar em silêncio — e você vai descobrir no pior dia possível.
O AudioFlow foi construído com um método em que a especificação vem antes do código: primeiro se escreve o que o sistema deve fazer, depois como, depois se quebra em tarefas pequenas e se implementa uma a uma. Cada tarefa tem um estado — rascunho, em andamento, em revisão, pronto.
Funciona bem. Até parar de funcionar.
Numa auditoria recente, comparei o que a documentação dizia com o que estava efetivamente rodando. O resultado:
Nada disso quebrou o produto. Mas é exatamente o tipo de coisa que faz a próxima pessoa — ou você mesmo daqui a seis meses — perder uma tarde seguindo instruções que não funcionam mais.
A lição: documentação não apodrece devagar e uniformemente. Ela congela numa data. O código continua andando e ninguém avisa o documento. A pergunta que revela isso não é "a documentação está boa?" — é "quando foi a última vez que alguém comparou o que está escrito com o que está rodando?"
A correção foi conferir cada afirmação contra o banco de dados de produção e contra os endereços no ar, não contra o que a tarefa dizia de si mesma. Trabalhoso, e a única forma que funciona.
O AudioFlow hoje está no ar, transcrevendo áudios de verdade para pessoas de verdade. É um produto pequeno com uma quantidade desproporcional de decisões interessantes por trás.
Se eu tivesse que resumir o que aprendi construindo ele, seria isto:
A escolha técnica que parece detalhe define o produto. Optar pela porta lateral do WhatsApp em vez da porta oficial não foi uma preferência de engenharia — foi o que tornou possível um produto para pessoas físicas. E também o que me deixou exposto quando o WhatsApp mudou as regras. As duas coisas vieram no mesmo pacote.
Erro de cobrança é diferente dos outros erros. Um botão desalinhado incomoda. Um erro de cobrança tira dinheiro ou serviço de alguém que confiou em você. E foi o que ficou mais tempo em aberto, justamente porque não gritava — ninguém abre um chamado dizendo "acho que fui cobrado 4% a mais".
Medir errado é pior que não medir. Não medir deixa você inseguro, e insegurança leva a checar. Medir errado dá confiança — e confiança leva a agir. Eu quase priorizei semanas de trabalho em cima de um número que descrevia uma pane já resolvida.
Nem todo muro é para ser derrubado. A barreira do passkey não tem solução hoje, para ninguém, no mundo inteiro. Reconhecer isso liberou tempo pra trabalhar no que dá pra melhorar de fato.
E, por fim: o custo da inteligência artificial deixou de ser o problema. Menos de um centavo por minuto de áudio processado por dois modelos diferentes. A parte cara de um produto de IA hoje não é a IA — é tudo o que precisa ficar de pé em volta dela.
AudioFlow — transcrição automática de áudios do WhatsApp.
Case escrito em 2026-07-29, com números medidos em produção na mesma data.
Feito em Go e Next.js, rodando na Fly.io.