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ável | Origem | Tipo | Obrigatório | Descrição | Uso no Fluxo |
|---|---|---|---|---|---|
event_type | input | string | Sim | Nome do tipo de evento | Usado no payload para FastQueue e HubSpot |
metadata | input | object | Não | Metadados do evento (env, source, correlation_id) | Enriquecimento do evento |
payload | input | object | Sim | Dados detalhados do evento | Expandido para variáveis de fluxo |
deal_id | input | string | Não | ID do Negócio no HubSpot | Associação do evento no HubSpot |
contact_id | input | string | Não | ID do Contato no HubSpot | Associação alternativa no HubSpot |
Variáveis Internas (Flow Variables)
| Variável | Criada em | Tipo | Fonte | Descrição |
|---|---|---|---|---|
flow.flow_slug | Nó 2 | string | payload.flow_slug | Identificador do fluxo origem |
flow.ai | Nó 2 | boolean | payload.ai | Se houve uso de IA |
flow.template | Nó 2 | string | payload.template | Template utilizado |
flow.classification | Nó 2 | string | payload.classification | Classificação do atendimento |
flow.channel | Nó 2 | string | payload.channel | Canal de comunicação |
flow.is_weekend | Nó 6 | string | 5a-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: 1 → 2 → 3 → [4a, 4b, 4c, 4d]
Ações:
- Mapeia inputs para variáveis de fluxo.
- Expande o objeto
payloadem múltiplas variáveis individuais para facilitar o uso posterior. - 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: 5a → 6 → 7 → [8a ou 8b]
Lógica de Associação:
- Verifica Deal ID: Se
flow.deal_idexiste, envia evento para endpoint de Deals (8a). - Verifica Contact ID: Se não houver Deal ID, mas houver
flow.contact_id, envia para endpoint de Contacts (9b). - 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).