Agente comercial B2B · WhatsApp · Google Cloud

Um agente de vendas que nunca decide preço, estoque ou pagamento sozinho.

RevenueFlow AI atende, negocia, fecha pedido e reabre conversa por iniciativa própria via WhatsApp — tudo sobre Cloud Run, Cloud SQL, Pub/Sub e Vertex AI/Gemini. O LLM interpreta a mensagem; um Policy Engine determinístico decide o que é permitido; a API executa. Nada disso é uma frase de efeito — é a arquitetura, e este site mostra exatamente como.

29 fatias entregues
79 ADRs documentados
0 pagamento real (sandbox só)
100% decisão de preço fora do LLM
Do webhook ao portal operacional

Dez fases, vinte e nove fatias, uma jornada comercial completa

Cada fatia foi entregue com o ciclo completo do projeto — Brainstorm, Define, Design, Build, Ship — e mergeada em main só depois de todos os checks do CI verdes. Nenhuma delas é um protótipo: o código roda em produção no Cloud Run hoje.

Atendimento & IA

A conversa entra pelo WhatsApp e chega a uma resposta ancorada em dado real — nunca em uma alucinação do modelo.

WHATSAPP_INBOUND_SLICE

Webhook autenticado por HMAC publica em Pub/Sub; um grafo LangGraph classifica a intenção e monta uma resposta ancorada em catálogo/preço/estoque reais, nunca em texto solto do modelo.

WHATSAPP_INBOUND_VERTEX

Os dois pontos que usam LLM — classificação de intenção e a resposta — passam a chamar Vertex AI Gemini de verdade (gemini-2.5-flash), keyless via ADC. Falha transitória vira retry; exaustão vira encaminhamento fixo para um humano, nunca uma resposta inventada.

Negociação & Aprovação

O cliente pode pedir desconto. O LLM nunca decide se o desconto é aceitável — uma policy determinística decide, e o que passa da alçada pausa para um humano.

PRICING_AND_NEGOTIATION

Um Pricing Service determinístico calcula margem e alçada; o Negotiation Agent só propõe o que a policy permite. Desconto fora da política pausa o próprio grafo (interrupt()) e cria uma Approval(PENDING) — fire-and-stop, sem meia-decisão.

APPROVAL_RESUME

Fecha o fire-and-stop: uma rota interna autenticada transiciona a aprovação e publica um evento; o consumidor toma um advisory lock por conversa e retoma o grafo exatamente de onde parou — aprovar, aprovar com outro valor, rejeitar ou expirar, cada caminho determinístico.

Pedido & Pagamento

Fechar negócio é sempre um passo determinístico e idempotente — nunca uma inferência do modelo sobre "o cliente quis dizer sim".

CHECKOUT

Um pedido explícito gera uma Quote a partir do preço já resolvido e pede confirmação clara. Confirmar cria o pedido de forma idempotente (nunca duplica), revalida estoque na hora, e roda um pagamento em sandbox — zero dado de cartão, zero transação real.

Inteligência de Cliente

Reconhecer quem já é cliente, e perceber sozinho quando vale a pena reabrir a conversa — sem esperar o cliente escrever primeiro.

CUSTOMER_360

O telefone que escreve é conferido contra a base de clientes antes de virar um lead novo. Cliente conhecido ganha uma visão comercial de 365 dias — pedidos, ticket médio, produtos preferidos, propostas em aberto — sem que esse dado bruto vá inteiro para o LLM.

OPPORTUNITY_ENGINE

Um job em lote, fora da conversa e fora do grafo, varre recompra atrasada e proposta parada por regra pura — sem machine learning, sem achismo. Cada oportunidade detectada carrega o motivo e a evidência numérica exata que a gerou.

Governança & Operação

Tudo o que torna um agente de IA operável em produção de verdade: saber quando chamar um humano, provar o que aconteceu, medir custo e latência, e fechar as lacunas de segurança antes que alguém precise achá-las.

HUMAN_HANDOFF

Três gatilhos determinísticos transferem a conversa para um humano — pedido explícito, baixa confiança da classificação, ou pedido de alto valor — cada um com precedência fixa, nunca uma decisão do LLM sobre "isso parece complicado".

AUDIT_TRAIL

Toda conversa grava uma linha de auditoria por turno no próprio banco — agente, modelo, ferramentas usadas, tokens, custo em dólar, latência e o resultado final — sem depender de um serviço externo de observabilidade para reconstruir o que aconteceu.

OBSERVABILITY_OPS

A mesma linha de auditoria vira log estruturado e métrica de produção: 5 alertas cobrindo erro 5xx, latência p95, falha de ferramenta, custo de IA por hora e ausência de tráfego — um dashboard, não uma promessa de monitoramento.

HARDENING_PERFORMANCE

Todo turno tem um orçamento de tempo real: timeout por tentativa na chamada ao Vertex AI, um teto duro no turno inteiro, e um limite de tempo por consulta no banco — para que "o modelo está lento" nunca vire "o cliente ficou sem resposta".

HARDENING_SECURITY_PII

Uma passada dedicada de segurança: CPF passa a ser mascarado em todo log, toda resposta HTTP ganha os headers mínimos de proteção, e uma suíte de testes prova — não afirma — que uma mensagem adversária não muda alçada, preço, nem pula uma aprovação.

Venda Ativa

A oportunidade detectada finalmente vira contato — mas só depois de passar por um portão real de consentimento, não um checkbox de fachada.

ACTIVE_SALES

Um job em lote consome as oportunidades abertas e roda um Policy Gate de verdade — opt-out sempre vence, sem consentimento explícito ninguém é contatado, e há um limite de frequência por cliente — antes de enviar uma mensagem template pelo WhatsApp. Responder "PARAR" encerra o contato na hora, sem passar pelo modelo.

Analytics & Revenue Intelligence

Receita, margem e o ciclo de vida do lead deixam de ser uma consulta manual no banco e viram views prontas — no Postgres e sincronizadas com o BigQuery.

ANALYTICS

Uma view calcula margem e receita recuperada por conversa; um job em lote sincroniza esse dado com o BigQuery — snapshot idempotente, resiliente por tabela, sem pipeline de streaming.

LEAD_LIFECYCLE

Todo lead avança por regra pura e monotônica — nunca do NEW direto pra WON — e vira um Customer real assim que fecha o primeiro pedido. Lead sem atividade recente é movido para LOST por um job separado.

ANALYTICS_360

Quatro views novas fecham os domínios de Customer 360, Lead 360, Opportunity 360 e Conversation Analytics do PRD-015 — sem dashboard ainda, mas com o dado já pronto pra consulta.

Domínio Próprio & Acesso

Esta página, o MCP público e o portal operacional ganham HTTPS num domínio real — e o sistema passa a ser consultável de fora do código, com o mesmo modelo de confiança das rotas internas.

LANDING_PAGE

Este site — HTML estático em GCS atrás de um Load Balancer HTTP global com Cloud CDN, sem framework nem build step. Editar copy é um commit normal, não um plan/apply.

LANDING_PAGE_DOMAIN

mastavista.com.br com certificado gerenciado e redirecionamento automático de HTTP para HTTPS — aditivo sobre o Load Balancer que já existia, nenhum recurso recriado do zero.

SUBDOMAINS

mcp./portal./langfuse. roteados por hostname no mesmo Load Balancer — um certificado gerenciado multi-domínio em vez de um IP e um certificado por serviço.

MCP_SERVER · MCP_READONLY_PUBLIC

Um servidor MCP pessoal (stdio) e um público de só-leitura (HTTP) expõem o mesmo sistema para o Claude Desktop/Code — receita, Customer 360, aprovações pendentes — sem tool de escrita nova além das rotas internas já existentes.

DASHBOARD_ACCESS · WHATSAPP_CTA

Acesso de leitura ao dashboard do Cloud Monitoring por e-mail (roles/monitoring.viewer, nada mais amplo) e o CTA de WhatsApp desta própria página, apontando pro fluxo de produção sem formulário nem backend novo.

Portal & Observabilidade

Um jeito de operar o sistema sem abrir o Console do GCP — e de ver, em tempo real, qual agente está processando cada conversa.

PORTAL

Portal operacional web — Google Sign-In + lista de e-mails permitidos, aprovar/rejeitar direto pelas mesmas rotas internas do MCP pessoal, e um painel que acende o nó ativo do grafo em tempo real via Postgres LISTEN/NOTIFY.

LANGFUSE_SELF_HOSTED

Langfuse self-hosted, controle total sobre o próprio dado de observabilidade — banco próprio no mesmo Cloud SQL, IP privado via VPC connector (nunca exposto à internet), atrás de um subdomínio fixo.

Operação & Compliance

Os jobs em lote passam a rodar sozinhos, conversas presas esperando decisão humana se destravam sozinhas, e o consentimento de contato ativo vira algo que o próprio cliente confirma pelo WhatsApp.

CLOUD_SCHEDULER_JOBS

Os 4 jobs em lote (detecção de oportunidade, venda ativa, lead lifecycle, analytics) que só rodavam sob demanda agora têm um Cloud Scheduler encadeado — detecção primeiro, venda ativa 30 minutos depois, consumindo as oportunidades recém-detectadas.

EXPIRATION_TTL_SWEEP

Aprovação, proposta ou transferência pra humano que ninguém decide a tempo expira sozinha, de hora em hora — a conversa nunca mais fica presa esperando uma decisão que não vem, seja de desconto, de preço vencido ou de atendimento humano.

WHATSAPP_OPT_IN

Responder "ACEITO RECEBER OFERTAS" registra consentimento de contato ativo — simétrico ao PARAR que já existia pro opt-out, mesma regra determinística, sem passar pelo modelo.

OPPORTUNITY_ENGINE_REMAINING_TYPES

Os 6 tipos de oportunidade que faltavam do PRD-010 — churn, reativação, recuperação de pedido, cross-sell, upsell e giro de estoque — cada um com sua própria regra determinística, sem modelo decidindo o gatilho.

Sem formulário, sem cadastro

Simule uma negociação completa — agora, no seu WhatsApp

Cada botão abaixo abre o WhatsApp com uma pergunta diferente já escrita. Envie do jeito que está e o mesmo agente que está em produção responde de verdade — preço, estoque e desconto vêm do catálogo real logo abaixo, não de um roteiro decorado.

  1. 1Escolha um cenário abaixo (ou escreva o seu, com base no catálogo)
  2. 2O WhatsApp abre com a mensagem pronta — é só enviar
  3. 3O agente responde puxando preço/estoque reais e negocia dentro da alçada
Checar estoque

“Vocês têm em estoque a Bomba d'água pressurizadora 3CV trifásica?”

Enviar esta pergunta
Negociar desconto

“Preciso de 20 Bombas d'água periféricas 1CV, tem desconto pra esse volume?”

Enviar esta pergunta
Fechar pedido

“Quero fechar o pedido de 5 Bombas d'água centrífuga 1CV 220V”

Enviar esta pergunta

Número de teste do Meta (WhatsApp Cloud API) — a mesma porta de entrada que qualquer cliente real usaria. Sem coleta de dado nesta página: o clique só abre o app do WhatsApp.

Catálogo simulado — 24 produtos, preço à vista (unidade)

CategoriaProdutoA partir de
PeriféricaBomba d'água periférica 1/3CV 127VR$ 299,90
PeriféricaBomba d'água periférica 1/2CV 127VR$ 389,90
PeriféricaBomba d'água periférica 3/4CV 127/220VR$ 469,90
PeriféricaBomba d'água periférica 1CV 127/220VR$ 549,90
PeriféricaBomba d'água periférica 1.5CV 220VR$ 689,90
CentrífugaBomba d'água centrífuga 1CV 220VR$ 729,90
CentrífugaBomba d'água centrífuga 1.5CV 220VR$ 949,90
CentrífugaBomba d'água centrífuga 2CV 220VR$ 1.189,90
CentrífugaBomba d'água centrífuga 3CV 220V trifásicaR$ 1.699,90
CentrífugaBomba d'água centrífuga 5CV 220/380V trifásicaR$ 2.899,90
SubmersaBomba d'água submersa 1/2CV 220V para poçoR$ 649,90
SubmersaBomba d'água submersa 3/4CV 220V para poçoR$ 899,90
SubmersaBomba d'água submersa 1CV 220V para poço profundoR$ 1.249,90
SubmersaBomba d'água submersa 1.5CV trifásica para poço profundoR$ 1.899,90
PressurizadoraBomba d'água pressurizadora 1/2CV 127V residencialR$ 459,90
PressurizadoraBomba d'água pressurizadora 1CV 220V residencial/comercialR$ 899,90
PressurizadoraBomba d'água pressurizadora 2CV 220V comercialR$ 1.549,90
PressurizadoraBomba d'água pressurizadora 3CV 220V trifásicaR$ 2.149,90
MotobombaMotobomba a gasolina 5.5HP autoescorvante 2″R$ 1.789,90
MotobombaMotobomba a diesel 9HP alta vazão 3″R$ 4.899,90
KitKit pressurizador residencial 1CV com pressostatoR$ 1.099,90
AcessórioCapacitor de partida 250uFR$ 39,90
AcessórioChave bóia elétrica para caixa d'águaR$ 59,90
AcessórioMangueira de sucção reforçada 25m x 1″R$ 219,90

Preço unitário (1 un.); pedidos maiores entram em faixa de desconto por volume, negociada pelo próprio agente dentro da alçada permitida.

Sob o capô

LLM interpreta. Policy Engine decide. API executa.

Essa frase não é uma tagline — é a regra que todo código novo tem que respeitar antes de entrar em main. Nenhuma fatia acima quebra essa ordem.

Cloud Run

A API e os workers batch (Opportunity Engine, campanha ativa) rodam como serviço e Jobs sob o mesmo container.

Cloud SQL (PostgreSQL)

Único banco de sistema — sessão, pedido, aprovação, auditoria e o checkpoint do próprio grafo LangGraph.

Pub/Sub

Backbone assíncrono entre o webhook e o processamento — desacopla a resposta ao WhatsApp do tempo de execução do grafo.

Vertex AI / Gemini

Único ponto de LLM real do sistema — classificação de intenção e geração da resposta ancorada, keyless via ADC.

Cloud Storage + Cloud CDN

Hospeda esta própria página — estática, sem servidor de aplicação, atrás de um Load Balancer HTTP global.

Terraform

Toda a infraestrutura acima é código versionado — plan comentado em todo PR, apply só no merge para main.

O que vem a seguir

O roadmap não para nas 29 fatias entregues

Cada item abaixo é uma decisão já registrada em ADR — não uma promessa vaga de "em breve".

Você está aqui

OPPORTUNITY_ENGINE_REMAINING_TYPES ADR-079

Os 8 tipos de oportunidade do PRD-010 rodam em produção: recompra atrasada, proposta parada, churn, reativação, recuperação de pedido, cross-sell, upsell e giro de estoque — cada um sua própria regra determinística.

Follow-ups já documentados nos ADRs

  • WhatsApp Message Templates (HSM) aprovados pela Meta para contato fora da janela de 24h
  • Popular consent_opt_in_at de clientes reais (o mecanismo de opt-in já existe — falta clientes reais responderem)
  • Notificação quando um Handoff expira sem resolução humana (hoje só devolve a conversa pro agente automático, silenciosamente)
  • Dashboard/Looker Studio sobre as views de Analytics 360 (o dado já existe, a visualização ainda não)