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ável | Origem | Tipo | Obrigatório | Descrição | Uso no Fluxo |
|---|---|---|---|---|---|
user_id | RabbitMQ Trigger | string | Sim | ID único do usuário | Busca de dados no MongoDB |
events | RabbitMQ Trigger | array | Sim | Lista de eventos de abandono | Composição do payload final |
Variáveis Internas (Flow Variables)
| Variável | Criada em | Tipo | Fonte | Descrição | Dependências |
|---|---|---|---|---|---|
flow.uid | Nó 4 | string | find user by uid | ID do usuário | Nós 4, 11 |
flow.phone | Nó 4 | string | find user by uid | Telefone original | Nó 5 |
flow.cpf | Nó 4 | string | find user by uid | CPF do usuário | Nó 6 |
flow.initial_data | Nó 11 | object | format phone output | Dados consolidados do usuário | Nó 12 |
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---trigger → 2-mongo---finder-user-by-uid → 3-conditional---if-user-exists
- O fluxo inicia ao consumir uma mensagem da fila
zapzap_requests_proposal_events. - Busca o documento do usuário na coleção
usersdo MongoDB usando ouser_id. - 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-data → 5-jump---format-phone → 6-execution-data---execution-data
- Extrai campos como CPF, nome, convênio, e-mail e dados da lead para variáveis de fluxo.
- Executa um workflow externo (
format-phone) para normalizar o número de telefone. - 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-v2 → 8-conditional---if-campaign-trigger-v2-exists → 9a-conditional---if-cooldown-passed
- Consulta a coleção
campaign_triggers_v2buscando por disparos anteriores para o telefone do usuário. - Se já existe um registro, verifica se a data de criação é anterior a 48 horas (cooldown de 2 dias).
- Se o cooldown não passou, o fluxo encerra sem enviar nova mensagem.
Fase 4: Finalização e Envio
Nós: 10-wait → 11-flow-variable---set-message-payload → 12-rabbit---send-to-queue
- Aguarda 15 minutos.
- Consolida o payload final contendo
initial_dataecampaign_trigger. - Publica a mensagem na fila
zapzap_requests_abandono_ofertapara que o serviço de mensageria realize o disparo.
Dependências Externas
Fluxos Chamados (Jumps)
| Fluxo | Nó | Propósito | Dados Enviados | Retorno Esperado |
|---|---|---|---|---|
format-phone | 5-jump---format-phone | Normalizar o número de telefone para o padrão E.164. | Dados do usuário | Telefone 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étrica | Valor | Descrição |
|---|---|---|
| Cooldown | 48 Horas | Intervalo mínimo entre disparos. |
| Delay de Segurança | 15 Minutos | Tempo de espera no nó 10 antes do envio final. |
Changelog
| Data | Versão | Alteração |
|---|---|---|
| 2026-01-11 | 1.0 | Documentação inicial do fluxo gerada. |