Store Analytics Event

Visão Geral

Este fluxo é responsável por receber eventos de analytics, enfileirá-los para processamento assíncrono (via FastQueue) e, posteriormente, enviá-los para o HubSpot (documentar integração), associando-os a Negócios (Deals) ou Contatos (Contacts) conforme a disponibilidade de identificadores.

Objetivo

Centralizar e garantir a persistência de eventos de analytics gerados em diversos pontos da plataforma.

  • Alta Disponibilidade: Utiliza uma fila (FastQueue) para garantir que picos de eventos não sobrecarreguem o sistema.
  • Enriquecimento de CRM: Sincroniza dados de interação (como uso de IA, templates, canais) diretamente no HubSpot para análises operacionais.
  • Teste A/B: Distribui a carga de requisições de enfileiramento em 4 rotas para balanceamento ou testes.

Diagrama de Fluxo

graph TD
    Start((Início)) --> N1[1-flow-variables]
    N1 --> N2[2-flow-variables---payload-spread]
    N2 --> N3{3-split---teste-a-b}
    
    N3 -->|25%| N4a[4a-request--store-event-1]
    N3 -->|25%| N4b[4b-request--store-event-2]
    N3 -->|25%| N4c[4c-request--store-event-3]
    N3 -->|25%| N4d[4d-request--store-event-4]
    
    N4a -->|Sucesso| N5a[5a-code---converter-timestamp]
    N4b -->|Sucesso| N5a
    N4c -->|Sucesso| N5a
    N4d -->|Sucesso| N5a
    
    N4a -->|Erro| N5b[5b-end-flow]
    N4b -->|Erro| N5b
    N4c -->|Erro| N5b
    N4d -->|Erro| N5b
    
    N5a --> N6[6-flow-variables---is-weekend]
    N6 --> N7{7-conditional--se-deal-id-existe}
    
    N7 -->|Sim| N8a[8a-request---enviar-evento-hubspot]
    N7 -->|Não| N8b{8b-conditional---se-contact-id-existe}
    
    N8a -->|Sucesso| N10a((10a-end-flow---success))
    N8a -->|Erro| N10b((10b-end-flow---error))
    
    N8b -->|Sim| N9b[9b-request---enviar-evento-hubspot]
    N8b -->|Não| N10a
    
    N9b -->|Sucesso| N10a
    N9b -->|Erro| N10b

    classDef default fill:#f9f9f9,stroke:#333,stroke-width:1px;
    classDef request fill:#e1f5ff,stroke:#0077b6,stroke-width:2px;
    classDef condition fill:#ffe1e1,stroke:#d90429,stroke-width:2px;
    classDef endNode fill:#e9ecef,stroke:#adb5bd,stroke-width:2px;
    
    class N4a,N4b,N4c,N4d,N8a,N9b request;
    class N3,N7,N8b condition;
    class N5b,N10a,N10b endNode;

Variáveis do Fluxo

Variáveis de Entrada (Input)

VariávelOrigemTipoObrigatórioDescriçãoUso no Fluxo
event_typeinputstringSimNome do tipo de eventoUsado no payload para FastQueue e HubSpot
metadatainputobjectNãoMetadados do evento (env, source, correlation_id)Enriquecimento do evento
payloadinputobjectSimDados detalhados do eventoExpandido para variáveis de fluxo
deal_idinputstringNãoID do Negócio no HubSpotAssociação do evento no HubSpot
contact_idinputstringNãoID do Contato no HubSpotAssociação alternativa no HubSpot

Variáveis Internas (Flow Variables)

VariávelCriada emTipoFonteDescrição
flow.flow_slugNó 2stringpayload.flow_slugIdentificador do fluxo origem
flow.aiNó 2booleanpayload.aiSe houve uso de IA
flow.templateNó 2stringpayload.templateTemplate utilizado
flow.classificationNó 2stringpayload.classificationClassificação do atendimento
flow.channelNó 2stringpayload.channelCanal de comunicação
flow.is_weekendNó 6string5a-code”sim” ou “não” indicando fim de semana

Fluxo Detalhado

Fase 1: Inicialização e Enfileiramento

O fluxo inicia recebendo os dados do evento e preparando as variáveis. Em seguida, utiliza uma estratégia de Split para distribuir as requisições de enfileiramento (FastQueue) em 4 rotas, garantindo balanceamento.

Nós: 123 → [4a, 4b, 4c, 4d]

Ações:

  1. Mapeia inputs para variáveis de fluxo.
  2. Expande o objeto payload em múltiplas variáveis individuais para facilitar o uso posterior.
  3. Divide a execução em 4 caminhos (25% cada) para enviar o evento para a API FastQueue.

Fase 2: Processamento e Envio ao HubSpot

Após o enfileiramento com sucesso, o fluxo calcula se o evento ocorreu em um fim de semana e tenta enviar os dados para o HubSpot, priorizando a associação com um Negócio (Deal). Se não houver Deal ID, tenta associar a um Contato.

Nós: 5a67 → [8a ou 8b]

Lógica de Associação:

  1. Verifica Deal ID: Se flow.deal_id existe, envia evento para endpoint de Deals (8a).
  2. Verifica Contact ID: Se não houver Deal ID, mas houver flow.contact_id, envia para endpoint de Contacts (9b).
  3. Sem ID: Se nenhum ID estiver presente, o fluxo finaliza com sucesso (10a), assumindo que o enfileiramento na Fase 1 foi o suficiente.

Dependências Externas

Webhooks / APIs

FastQueue Enqueue

  • Endpoint: POST https://fastqueue-api.kloudbr.net/queues/zapzap_requests_analytics_events/enqueue
  • Propósito: Enfileirar o evento para processamento assíncrono garantido.
  • Fila Relacionada: Analytics Events Queue
  • Consumidor: N8N Store Analytics Events
  • Nós: 4a, 4b, 4c, 4d

HubSpot Events API

  • Endpoint: POST https://api.hubspot.com/events/v3/send
  • Propósito: Registrar o evento na timeline do CRM (Deal ou Contact).
  • Auth: Bearer Token (env.hubspot_token)
  • Nós: 8a (Deal), 9b (Contact)

Saída (Output)

Cenários de Finalização

Sucesso (10a-end-flow---success)

  • O evento foi enfileirado na FastQueue E (enviado ao HubSpot OU não possuía IDs para envio).

Erro (10b-end-flow---error ou 5b-end-flow)

  • Falha ao enfileirar na FastQueue (5b).
  • Falha ao enviar para o HubSpot (10b).