GOOGLE_ANALYTICS - Rastreamento GA4
O que é este Node?
O GOOGLE_ANALYTICS é o node responsável por enviar eventos de rastreamento para o Google Analytics 4 (GA4) através da Measurement Protocol API, permitindo tracking de comportamento de usuários e conversões.
Por que este Node existe?
Integrar analytics manualmente requer conhecimento técnico da API do Google. O GOOGLE_ANALYTICS existe para:
- Rastreamento automático: Envia eventos para GA4 sem código customizado
- Análise de comportamento: Permite entender como usuários interagem com seus flows
- Métricas de conversão: Rastreia funis, conversões e objetivos
- Integração nativa: Funciona direto com Google Analytics 4 Measurement Protocol
Como funciona internamente?
Quando o GOOGLE_ANALYTICS é executado, o sistema:
- Valida configuração: Verifica se GA_MEASUREMENT_ID e GA_API_SECRET estão definidos
- Prepara payload: Cria estrutura de evento com client_id, nome e propriedades
- Envia para GA4: Faz POST para
https://www.google-analytics.com/mp/collect - Processa resposta: Google Analytics aceita evento assincronamente
- Se erro de config: Retorna erro de configuração ausente
- Se sucesso: Confirma envio do evento
Código interno (analytics-executor.service.ts:239-281):
private async executeGoogleAnalytics(operation: string, eventName: string, properties: any, userId: string, context: any): Promise<any> {
const measurementId = process.env.GA_MEASUREMENT_ID;
const apiSecret = process.env.GA_API_SECRET;
if (!measurementId || !apiSecret) {
throw new Error('Google Analytics configuration missing');
}
const payload = {
client_id: userId || this.generateClientId(),
events: [{
name: eventName,
parameters: {
...properties,
session_id: context.sessionId,
engagement_time_msec: 100
}
}]
};
try {
const url = `https://www.google-analytics.com/mp/collect?measurement_id=${measurementId}&api_secret=${apiSecret}`;
await firstValueFrom(
this.httpService.post(url, payload, {
headers: {
'Content-Type': 'application/json'
}
})
);
return {
success: true,
action: 'google_analytics_event_sent',
provider: 'google_analytics',
eventName: eventName,
properties: properties,
timestamp: new Date().toISOString()
};
} catch (error) {
throw new Error(`Google Analytics tracking failed: ${error.message}`);
}
}
Quando você DEVE usar este Node?
Use GOOGLE_ANALYTICS sempre que precisar de tracking com Google Analytics 4:
Casos de uso
- Rastrear conversões: "Usuário completou compra no WhatsApp"
- Análise de funil: "Usuário chegou no passo 3 do cadastro"
- Eventos customizados: "Botão clicado", "Formulário enviado"
- E-commerce tracking: "Produto adicionado ao carrinho"
- Engajamento: "Tempo de sessão", "Páginas visitadas"
Quando NÃO usar GOOGLE_ANALYTICS
- Mixpanel é melhor: Use MIXPANEL para análise de produto detalhada
- Segment como hub: Use SEGMENT para enviar para múltiplas plataformas
- Analytics simples: Use CUSTOM_EVENT para tracking interno
Parâmetros Detalhados
provider (string, obrigatório)
O que é: Define o provedor de analytics. Para Google Analytics, use "google_analytics".
Padrão: N/A (obrigatório)
Flow completo para testar:
{
"name": "Teste Google Analytics - Provider",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "analytics_1",
"type": "analytics",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Rastrear Evento GA4",
"parameters": {
"provider": "google_analytics",
"eventName": "flow_started",
"properties": {
"flow_name": "Onboarding",
"flow_version": "1.0"
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "✅ Evento enviado para Google Analytics!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "analytics_1" },
{ "source": "analytics_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Execute o flow. Verifique no Google Analytics (Relatórios > Eventos em tempo real) se o evento flow_started aparece.
eventName (string, obrigatório)
O que é: Nome do evento a ser rastreado no Google Analytics.
Flow completo para testar:
{
"name": "Teste Google Analytics - Event Name",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "analytics_1",
"type": "analytics",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Rastrear Conversão",
"parameters": {
"provider": "google_analytics",
"eventName": "purchase",
"properties": {
"currency": "BRL",
"value": 99.90,
"items": [
{
"item_id": "SKU123",
"item_name": "Produto Teste",
"price": 99.90,
"quantity": 1
}
]
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "💰 Compra rastreada no Google Analytics!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "analytics_1" },
{ "source": "analytics_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Execute o flow. Confira em Google Analytics > Monetização se a compra foi registrada.
properties (object, opcional)
O que é: Propriedades customizadas do evento (dimensões e métricas).
Flow completo para testar:
{
"name": "Teste Google Analytics - Properties",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "analytics_1",
"type": "analytics",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Evento com Propriedades",
"parameters": {
"provider": "google_analytics",
"eventName": "button_click",
"properties": {
"button_name": "subscribe",
"button_location": "header",
"button_color": "blue",
"user_segment": "premium",
"campaign_id": "summer_2025"
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Clique rastreado com 5 propriedades customizadas!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "analytics_1" },
{ "source": "analytics_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Verifique no GA4 se as propriedades customizadas aparecem como parâmetros do evento.
userId (string, opcional)
O que é: Identificador único do usuário para vincular eventos ao mesmo perfil.
Flow completo para testar:
{
"name": "Teste Google Analytics - User ID",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Pedir Email",
"parameters": {
"message": "Qual seu email?",
"variable": "user_email"
}
}
},
{
"id": "analytics_1",
"type": "analytics",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Rastrear com User ID",
"parameters": {
"provider": "google_analytics",
"eventName": "user_login",
"userId": "{{user_email}}",
"properties": {
"login_method": "whatsapp"
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Login rastreado para: {{user_email}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "analytics_1" },
{ "source": "analytics_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite um email. O evento será vinculado ao client_id baseado nesse email.
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| provider | string | Sim | Deve ser "google_analytics" |
| eventName | string | Sim | Nome do evento (ex: "purchase", "sign_up") |
| properties | object | Não | Propriedades customizadas do evento |
| userId | string | Não | Identificador único do usuário |
| operation | string | Não | Tipo de operação (padrão: "track") |
Configuração Necessária
Variáveis de Ambiente
Adicione no arquivo .env:
GA_MEASUREMENT_ID=G-XXXXXXXXXX
GA_API_SECRET=seu_api_secret_aqui
Como obter as credenciais:
- Measurement ID:
- Acesse Google Analytics
- Admin > Data Streams > Selecione seu stream
-
Copie o "Measurement ID" (formato: G-XXXXXXXXXX)
-
API Secret:
- Mesma tela do Measurement ID
- Role até "Measurement Protocol API secrets"
- Clique em "Create" e copie o secret gerado
Exemplo 1: Rastrear Funil de Conversão
Objetivo: Rastrear cada etapa de um funil de vendas no Google Analytics.
JSON para Importar
{
"name": "Google Analytics - Funil de Vendas",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "analytics_1",
"type": "analytics",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Etapa 1: Visualização",
"parameters": {
"provider": "google_analytics",
"eventName": "view_item",
"properties": {
"item_id": "PROD123",
"item_name": "Curso TypeScript",
"price": 297.00,
"currency": "BRL"
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Oferta",
"parameters": {
"message": "🎓 Curso TypeScript - R$ 297\n\nDeseja comprar?"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Capturar Resposta",
"parameters": {
"message": "Digite SIM para comprar",
"variable": "resposta"
}
}
},
{
"id": "analytics_2",
"type": "analytics",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Etapa 2: Add to Cart",
"parameters": {
"provider": "google_analytics",
"eventName": "add_to_cart",
"properties": {
"item_id": "PROD123",
"item_name": "Curso TypeScript",
"price": 297.00,
"currency": "BRL",
"quantity": 1
}
}
}
},
{
"id": "analytics_3",
"type": "analytics",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Etapa 3: Purchase",
"parameters": {
"provider": "google_analytics",
"eventName": "purchase",
"properties": {
"transaction_id": "TXN_{{$timestamp}}",
"value": 297.00,
"currency": "BRL",
"items": [
{
"item_id": "PROD123",
"item_name": "Curso TypeScript",
"price": 297.00,
"quantity": 1
}
]
}
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "✅ Compra confirmada!\n\n📊 Todo o funil foi rastreado no Google Analytics."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "analytics_1" },
{ "source": "analytics_1", "target": "message_1" },
{ "source": "message_1", "target": "input_2" },
{ "source": "input_2", "target": "analytics_2" },
{ "source": "analytics_2", "target": "analytics_3" },
{ "source": "analytics_3", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: 🎓 Curso TypeScript - R$ 297. Deseja comprar?
Usuário: SIM
Sistema: ✅ Compra confirmada! Todo o funil foi rastreado no Google Analytics.
Exemplo 2: Rastrear Engajamento de Conteúdo
Objetivo: Monitorar quanto tempo usuários passam em diferentes seções do flow.
JSON para Importar
{
"name": "Google Analytics - Engajamento",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "analytics_1",
"type": "analytics",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Página Inicial",
"parameters": {
"provider": "google_analytics",
"eventName": "page_view",
"properties": {
"page_title": "Home",
"page_location": "/home",
"engagement_time_msec": 5000
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Conteúdo",
"parameters": {
"message": "📚 Bem-vindo ao nosso curso!\n\nEscolha:\n1. Módulo 1\n2. Módulo 2"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Escolha",
"parameters": {
"message": "Digite 1 ou 2",
"variable": "modulo"
}
}
},
{
"id": "analytics_2",
"type": "analytics",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Rastrear Escolha",
"parameters": {
"provider": "google_analytics",
"eventName": "select_content",
"properties": {
"content_type": "module",
"content_id": "module_{{modulo}}",
"engagement_time_msec": 3000
}
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "✅ Módulo {{modulo}} selecionado!\n\n📊 Escolha rastreada no GA4."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1300, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "analytics_1" },
{ "source": "analytics_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "analytics_2" },
{ "source": "analytics_2", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: 📚 Bem-vindo ao nosso curso! Escolha: 1. Módulo 1 2. Módulo 2
Usuário: 1
Sistema: ✅ Módulo 1 selecionado! Escolha rastreada no GA4.
Resposta do Node
{
"success": true,
"action": "google_analytics_event_sent",
"provider": "google_analytics",
"eventName": "purchase",
"properties": {
"transaction_id": "TXN123",
"value": 297.00,
"currency": "BRL"
},
"timestamp": "2025-01-15T10:30:00.000Z"
}
Eventos Recomendados GA4
E-commerce
view_item- Visualização de produtoadd_to_cart- Adicionar ao carrinhobegin_checkout- Iniciar checkoutpurchase- Compra concluídarefund- Reembolso
Engajamento
page_view- Visualização de páginaselect_content- Seleção de conteúdoshare- Compartilhamentovideo_start- Início de vídeovideo_complete- Vídeo completo
Conversões
sign_up- Cadastrologin- Logingenerate_lead- Lead geradosubscribe- Assinatura
Boas Práticas
✅ SIM:
- Use eventos padrão do GA4 quando possível
- Inclua currency e value em eventos de e-commerce
- Defina userId para rastrear jornada completa
- Teste eventos em tempo real antes de produção
- Use propriedades descritivas e consistentes
❌ NÃO:
- Não envie dados sensíveis (senhas, CPF, cartões)
- Não use nomes de eventos genéricos ("click", "event")
- Não esqueça de configurar GA_MEASUREMENT_ID e GA_API_SECRET
- Não envie mais de 25 eventos por requisição
Dicas
💡 Dica 1: Use Google Analytics Debugger para validar eventos em tempo real (Relatórios > Tempo Real > Visão geral de eventos)
💡 Dica 2: Configure conversões em Admin > Eventos > Marcar como conversão para eventos importantes
💡 Dica 3: Use client_id consistente para vincular eventos da mesma sessão/usuário
💡 Dica 4: Combine com Google Tag Manager para criar triggers e variáveis avançadas
💡 Dica 5: Monitore limites da API (500 eventos por segundo por property)
Próximo Node
→ MIXPANEL - Event tracking com análise de produto → SEGMENT - Hub de analytics multi-plataforma → AMPLITUDE - Product analytics avançado