Next WaveNEXT WAVE
Todos os cases
Logo AirFlow
SaaS · Alertas de passagem aérea2026

AirFlow: Raspagem das companhias aéreas que vira alerta de passagem no WhatsApp

Quem vende alerta de passagem vive de dois riscos: mandar uma oferta que não é promoção e mandar a mesma promoção duas vezes. Os dois queimam o grupo do cliente — e é o grupo que sustenta o negócio.

O AirFlow resolve isso em duas metades que conversam por um contrato só: um coletor que varre as companhias e ranqueia o que achou, e uma plataforma que recebe oferta de qualquer origem, entende o que é, decide para quem vai e entrega no ritmo de cada grupo.

O que foi construído

01

Coleta nas companhias aéreas

Serviço próprio que varre as fontes públicas e normaliza tudo num contrato único, independente da companhia.

  • Fila, repetição e concorrência controlada, com navegador de verdade para páginas que dependem de JavaScript
  • LATAM varrida cidade a cidade; campanha do Smiles buscada de uma vez, em cadência semanal
  • Execução diária às 8h de Brasília, com fuso explícito no cron e código de saída separado para 'coletou mas não entregou'
  • Sem contornar captcha, login ou bloqueio: diante de um controle de acesso o coletor reduz o ritmo, para e registra
02

Escolher o que vale mandar

A parte que decide se aquilo é promoção — ordenando por queda contra o preço da própria rota, não por preço absoluto.

  • Referência encadeada por confiança: o que nós mesmos observamos vence estimativa herdada da versão antiga
  • Limite de ofertas por origem, para a lista não virar o mesmo hub repetido
  • Cada linha carrega se tem referência, se a referência é estimada e se a queda é suspeita
  • Ranking agnóstico de companhia: incluir uma nova é escrever a referência de preço dela, não outro ranking
03

Uma porta de entrada para qualquer origem

Grupo de WhatsApp, raspagem própria ou parceiro externo entram pelo mesmo contrato — e dali para baixo nada sabe de onde veio.

  • Rota de ingestão autenticada por token, que responde na hora e processa em fila
  • Duplicata responde sucesso, não erro — senão o provedor reenviaria para sempre
  • Origem que já manda dados estruturados pula a IA inteira
  • Ligar uma origem nova não duplica extração, catálogo de milhas nem distribuição
04

Leitura da oferta com IA

Duas etapas: uma barata que separa o que é promoção de passagem, outra forte que extrai os campos.

  • Filtro local barra ruído antes de gastar qualquer token
  • Os formatos de mensagem são registros editáveis no painel — mudar não exige deploy
  • Cada grupo declara quais formatos publica, o que reduz custo e erro de classificação
  • Correções determinísticas depois da IA, cada uma nascida de um erro visto em produção
05

Distribuição no ritmo de cada grupo

O espaçamento existe para não inundar um grupo, então o ritmo é do grupo — não do lote que chegou.

  • Intervalo calculado pelo que falta até as 21h dividido pelas mensagens daquele grupo, com piso de 10 minutos
  • Recalcula sozinho quando chega oferta nova, sem ninguém reagendar nada
  • WhatsApp enviado um de cada vez, com pausa entre mensagens; webhook em paralelo e sem pausa
  • Alerta em tempo real e webhook do cliente ficam fora do rodízio, de propósito
06

Painel de operação

Onde o cliente configura o que recebe e a operação enxerga o que aconteceu com cada alerta.

  • Conexão do WhatsApp por QR, com as credenciais da sessão no banco — sobrevive a redeploy
  • Grupos de captação e grupos de envio, separados por papel de usuário
  • Mensagem do cliente personalizada por formato, com variáveis e filtros de formatação
  • Fila de envio com uma linha por grupo: quantas faltam, intervalo atual, próxima e última
  • Diagnóstico com toda tentativa da IA, inclusive as que falharam

Decisões que fizeram diferença

Duas deduplicações, porque são dois problemas

Uma impede a mesma mensagem de entrar duas vezes (reenvio do provedor, reconexão do WhatsApp). A outra compara só a identidade econômica da oferta — companhia, trecho, datas, classe e preço — e impede que duas mensagens diferentes vendendo a mesma passagem virem duas mensagens no grupo.

O preço barato é relativo à rota, não à tabela

As tarifas mais baratas de uma varredura são pernas regionais curtas em preço normal. Ordenar por preço absoluto afogaria a queda real, então o ranking compara cada oferta com o histórico da própria rota — e sempre tarifa sem taxas contra referência sem taxas.

Oferta raspada não paga token

Quando a origem já entrega os campos separados, pagar triagem e extração para reconstruir o que ela já sabe seria caro e menos fiel. Esses lotes entram direto no pipeline: custo zero de IA por oferta.

Campo novo no lote não derruba o dia

A ingestão valida a estrutura, mas aceita campos que ainda não conhece. O coletor evolui sozinho sem que a plataforma recuse o lote inteiro por causa de um dado que ninguém usa ainda.

O banco é a verdade, a fila é só o relógio

Cada tentativa de envio fica no Postgres com o texto renderizado e o motivo da falha; a fila só agenda. Um reconciliador varre de cinco em cinco minutos e devolve à fila o que ficou pendente sem job — perder o Redis não perde envio.

Tecnologias usadas

  • NestJS
  • TypeScript
  • Prisma
  • PostgreSQL
  • BullMQ + Redis
  • Baileys
  • OpenAI
  • Next.js
  • FastAPI
  • Playwright
  • Tailwind CSS

Seu negócio precisa de algo parecido?

Nem todo projeto precisa de tudo isso de uma vez. A gente começa pelo que destrava sua operação e vai somando.

Falar com a gente