Processa Eventos: Abandono de Oferta

Visão Geral

Este fluxo é responsável pelo processamento de eventos de abandono de oferta. Ele é disparado via eventos enfileirados no RabbitMQ, valida a existência do usuário, enriquece os dados, aplica uma regra de cooldown de 48 horas baseada em gatilhos de campanha no MongoDB e, após um intervalo de segurança de 15 segundos, encaminha o payload para a fila de disparo de mensagens para o lead.

Objetivo

O objetivo principal é garantir que usuários que abandonaram uma oferta recebam uma comunicação de recuperação, respeitando um intervalo mínimo (cooldown) para evitar spam e garantindo que apenas usuários válidos recebam a mensagem.

  • Dor de negócio: Leads que demonstram interesse mas não concluem a contratação.
  • Valor gerado: Recuperação de conversão e aumento de receita.
  • Métricas impactadas: Taxa de conversão de propostas, ROI de campanhas de CRM.

Diagrama de Fluxo

graph TD
    1["1-rabbit---trigger<br/>RabbitMQ Trigger"] --> 2["2-mongo---finder-user-by-uid<br/>Mongo Find"]
    2 --> 3{"3-conditional---if-user-exists<br/>Condition"}
    
    3 -- "Sim" --> 4["4-flow-variable---set-initial-data<br/>Flow Variables"]
    3 -- "Não" --> End((Fim))
    
    4 --> 5["5-jump---format-phone<br/>Jump"]
    5 --> 6["6-execution-data---execution-data<br/>Execution Data"]
    6 --> 7["7-mongo---find-most-recent-campaign-trigger-v2<br/>Mongo Find"]
    7 --> 8{"8-conditional---if-campaign-trigger-v2-exists<br/>Condition"}
    
    8 -- "Não" --> 10["10-wait<br/>Wait (15 min)"]
    8 -- "Sim" --> 9a{"9a-conditional---if-cooldown-passed<br/>Condition"}
    
    9a -- "Sim" --> 10
    9a -- "Não" --> End
    
    10 --> 11["11-flow-variable---set-message-payload<br/>Flow Variables"]
    11 --> 12["12-rabbit---send-to-queue<br/>RabbitMQ Action"]

    classDef inicio fill:#e1f5ff
    classDef decisao fill:#ffe1e1
    classDef fim fill:#f5f5f5
    class 1 inicio
    class 3,8,9a decisao
    class End fim

Variáveis do Fluxo

Variáveis de Entrada (Input)

VariávelOrigemTipoObrigatórioDescriçãoUso no Fluxo
user_idRabbitMQ TriggerstringSimID único do usuárioBusca de dados no MongoDB
eventsRabbitMQ TriggerarraySimLista de eventos de abandonoComposição do payload final

Variáveis Internas (Flow Variables)

VariávelCriada emTipoFonteDescriçãoDependências
flow.uidNó 4stringfind user by uidID do usuárioNós 4, 11
flow.phoneNó 4stringfind user by uidTelefone original5
flow.cpfNó 4stringfind user by uidCPF do usuário6
flow.initial_dataNó 11objectformat phone outputDados consolidados do usuário12

Entrada (Input)

Estrutura Esperada

{
  "user_id": "string (uid)",
  "events": [
    {
      "event_type": "string",
      "covenant": "number",
      "user_origin": "number",
      "eventDate": "ISO8601 Date"
    }
  ]
}

Fluxo Detalhado

Fase 1: Identificação e Coleta

Nós: 1-rabbitmq---trigger2-mongo---finder-user-by-uid3-conditional---if-user-exists

  1. O fluxo inicia ao consumir uma mensagem da fila zapzap_requests_proposal_events.
  2. Busca o documento do usuário na coleção users do MongoDB usando o user_id.
  3. Valida se o usuário foi encontrado. Se não existir, o fluxo é interrompido.

Fase 2: Preparação de Dados

Nós: 4-flow-variable---set-initial-data5-jump---format-phone6-execution-data---execution-data

  1. Extrai campos como CPF, nome, convênio, e-mail e dados da lead para variáveis de fluxo.
  2. Executa um workflow externo (format-phone) para normalizar o número de telefone.
  3. Define metadados de execução (cpf, phone, covenant) para facilitar a busca de logs no n8n.

Fase 3: Regra de Cooldown

Nós: 7-mongo---find-most-recent-campaign-trigger-v28-conditional---if-campaign-trigger-v2-exists9a-conditional---if-cooldown-passed

  1. Consulta a coleção campaign_triggers_v2 buscando por disparos anteriores para o telefone do usuário.
  2. Se já existe um registro, verifica se a data de criação é anterior a 48 horas (cooldown de 2 dias).
  3. Se o cooldown não passou, o fluxo encerra sem enviar nova mensagem.

Fase 4: Finalização e Envio

Nós: 10-wait11-flow-variable---set-message-payload12-rabbit---send-to-queue

  1. Aguarda 15 minutos.
  2. Consolida o payload final contendo initial_data e campaign_trigger.
  3. Publica a mensagem na fila zapzap_requests_abandono_oferta para que o serviço de mensageria realize o disparo.

Dependências Externas

Fluxos Chamados (Jumps)

FluxoPropósitoDados EnviadosRetorno Esperado
format-phone5-jump---format-phoneNormalizar o número de telefone para o padrão E.164.Dados do usuárioTelefone formatado

Saída (Output)

Cenários de Finalização

Cenário 1: Sucesso (Mensagem Enviada)

  • Caminho: Trigger → Validação → Cooldown OK → Wait → Rabbit Send.
  • Estado final: Mensagem postada na fila zapzap_requests_abandono_oferta.
  • Condição de ativação: Usuário existe e não recebeu comunicação nas últimas 48 horas.

Cenário 2: Cooldown Ativo

  • Caminho: Trigger → Validação → Cooldown FALHA → Fim.
  • Estado final: Fluxo encerrado sem disparo.
  • Condição de ativação: Houve um disparo para este número há menos de 48 horas.

Cenário 3: Usuário não encontrado

  • Caminho: Trigger → Busca Mongo → If Not Exists → Fim.
  • Estado final: Fluxo encerrado.

Métricas e Tempos

MétricaValorDescrição
Cooldown48 HorasIntervalo mínimo entre disparos.
Delay de Segurança15 MinutosTempo de espera no nó 10 antes do envio final.

Changelog

DataVersãoAlteração
2026-01-111.0Documentação inicial do fluxo gerada.