Pular para conteúdo

identify()

Identifica usuários para Advanced Matching no Google Tag Manager e Facebook Pixel, melhorando taxas de conversão e precisão de rastreamento.


📋 Visão Geral

O método identify() permite associar dados do usuário (email, telefone, nome) ao sistema de consentimento Complyr. Esses dados são automaticamente hasheados com SHA-256 antes de serem enviados para plataformas de marketing, garantindo conformidade com LGPD.

Características: - ✅ SHA-256 Automático: Dados nunca enviados em texto plano - ✅ Advanced Matching: Aumenta match rate do Facebook Pixel em até 20% - ✅ Enhanced Conversions: Melhora precisão do Google Ads - ✅ Cross-Device Tracking: Rastreia usuário entre dispositivos - ✅ Síncrono: Execução imediata sem Promise - ✅ LGPD Compliant: Requer consentimento de marketing ou personalização


🎯 Casos de Uso

Quando Usar

  • Após Login: Identificar usuário autenticado
  • Pós-Cadastro: Associar novo usuário aos eventos de conversão
  • Checkout: Melhorar precisão de eventos de compra
  • Formulários de Lead: Captura de leads para remarketing
  • Newsletter: Identificação via email marketing
  • Enhanced Conversions: Google Ads com dados de primeira parte

Quando NÃO Usar

  • ❌ Antes de obter consentimento (bloqueado automaticamente)
  • ❌ Com dados de terceiros (apenas dados coletados pelo seu site)
  • ❌ Para armazenamento de dados pessoais (use seu backend)
  • ❌ Com identificadores não normalizados (CPF, RG - use email/telefone)

📚 Assinatura do Método

TypeScript

interface ComplyrAPI {
  /**
   * Identifica o usuário para Advanced Matching
   * @param identificationType - Tipo de identificação ('email', 'phone', 'name')
   * @param userIdentifier - Valor do identificador (hasheado automaticamente com SHA-256)
   * @throws {Error} Se identificationType for inválido
   * @remarks
   * - Requer consentimento de marketing ou personalização
   * - Email é automaticamente normalizado (lowercase, trim)
   * - Telefone deve estar em formato internacional (+5511...)
   * - Dados são hasheados com SHA-256 antes de enviar
   */
  identify(identificationType: string, userIdentifier: string): void;
}

JavaScript

window.complyr.identify(identificationType, userIdentifier);

🔧 Parâmetros

identificationType (string, obrigatório)

Tipo de identificação a ser associada ao usuário.

Valores Aceitos:

Valor Descrição Formato Match Rate
'email' Email do usuário user@example.com ⭐⭐⭐⭐⭐ (Melhor)
'phone' Telefone do usuário +5511987654321 ⭐⭐⭐⭐ (Ótimo)
'name' Nome completo João Silva ⭐⭐⭐ (Bom)

Recomendação: Use múltiplos identificadores para maximizar match rate:

// Melhor: 3 identificadores
window.complyr.identify('email', user.email);
window.complyr.identify('phone', user.phone);
window.complyr.identify('name', user.name);

// Bom: 2 identificadores
window.complyr.identify('email', user.email);
window.complyr.identify('phone', user.phone);

// Mínimo: 1 identificador (email recomendado)
window.complyr.identify('email', user.email);

userIdentifier (string, obrigatório)

Valor do identificador a ser associado ao usuário.

Validação Automática:

Email: - Convertido para lowercase automaticamente - Espaços removidos (trim) - Validação de formato básica - Exemplo: USER@EXAMPLE.COMuser@example.com → SHA-256 hash

Phone: - Deve incluir código do país (+55) - Apenas números (sem parênteses, hífens, espaços) - Formato internacional recomendado - Exemplo: +5511987654321

Name: - Nome completo (primeiro + sobrenome) - Espaços extras removidos - Exemplo: João Silva

Hashing SHA-256:

Todos os valores são automaticamente hasheados antes de enviar:

// Você envia:
window.complyr.identify('email', 'usuario@example.com');

// Complyr hasheia e envia:
// SHA-256: '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8'

// Email original NUNCA é transmitido em texto plano

↩️ Valor de Retorno

Tipo: void (síncrono)

O método não retorna nenhum valor. A identificação é processada imediatamente e enviada para os sistemas configurados (GTM, Facebook Pixel).


💡 Exemplos de Uso

Exemplo 1: Identificação Após Login

// Após login bem-sucedido
async function handleLogin(email, password) {
  try {
    // 1. Autenticar usuário
    const user = await api.login(email, password);

    // 2. Identificar no Complyr para Advanced Matching
    if (window.complyr) {
      window.complyr.identify('email', user.email);

      // Opcional: adicionar mais identificadores
      if (user.phone) {
        window.complyr.identify('phone', user.phone);
      }

      if (user.name) {
        window.complyr.identify('name', user.name);
      }
    }

    // 3. Redirecionar para dashboard
    window.location.href = '/dashboard';

  } catch (error) {
    console.error('Login failed:', error);
    showError('Credenciais inválidas');
  }
}

Exemplo 2: React Hook - Identificação Automática

// hooks/useComplyrIdentify.ts
import { useEffect } from 'react';
import { useAuth } from '@/contexts/auth-context';

/**
 * Hook que identifica automaticamente o usuário logado no Complyr
 */
export function useComplyrIdentify() {
  const { user } = useAuth();

  useEffect(() => {
    // Só identificar se usuário autenticado
    if (!user?.email) {
      return;
    }

    // Aguardar Complyr carregar
    const identifyUser = () => {
      if (window.complyr && typeof window.complyr.identify === 'function') {
        // Email (obrigatório)
        window.complyr.identify('email', user.email);

        // Telefone (opcional)
        if (user.phone) {
          window.complyr.identify('phone', user.phone);
        }

        // Nome (opcional)
        if (user.name) {
          window.complyr.identify('name', user.name);
        }

        console.log('✅ Usuário identificado no Complyr:', user.email);
      } else {
        // Complyr ainda não carregou, tentar novamente
        setTimeout(identifyUser, 100);
      }
    };

    identifyUser();
  }, [user]);
}

// Uso no componente raiz autenticado
// app/dashboard/layout.tsx
export default function DashboardLayout({ children }) {
  useComplyrIdentify(); // Auto-identificar usuário logado

  return (
    <div className="dashboard-layout">
      {children}
    </div>
  );
}

Exemplo 3: Vue.js Composable

// composables/useComplyrIdentify.ts
import { watch } from 'vue';
import { useUserStore } from '@/stores/user';

/**
 * Composable para identificar usuário no Complyr
 */
export function useComplyrIdentify() {
  const userStore = useUserStore();

  // Reagir a mudanças no usuário
  watch(
    () => userStore.user,
    (user) => {
      if (!user?.email) {
        return;
      }

      const identifyUser = () => {
        if (window.complyr) {
          window.complyr.identify('email', user.email);

          if (user.phone) {
            window.complyr.identify('phone', user.phone);
          }

          if (user.name) {
            window.complyr.identify('name', user.name);
          }
        } else {
          setTimeout(identifyUser, 100);
        }
      };

      identifyUser();
    },
    { immediate: true }
  );
}

Uso:

<!-- app.vue -->
<script setup lang="ts">
import { useComplyrIdentify } from '@/composables/useComplyrIdentify';

// Identificar automaticamente quando usuário logar
useComplyrIdentify();
</script>

Exemplo 4: Formulário de Cadastro

<!-- Formulário de cadastro -->
<form id="register-form">
  <input type="email" name="email" placeholder="Email" required>
  <input type="tel" name="phone" placeholder="Telefone">
  <input type="text" name="name" placeholder="Nome completo" required>
  <input type="password" name="password" placeholder="Senha" required>

  <label>
    <input type="checkbox" name="terms" required>
    Aceito os termos de uso
  </label>

  <button type="submit">Criar conta</button>
</form>

<script>
document.getElementById('register-form').addEventListener('submit', async function(e) {
  e.preventDefault();

  const formData = new FormData(e.target);

  try {
    // 1. Criar conta
    const user = await api.register({
      email: formData.get('email'),
      phone: formData.get('phone'),
      name: formData.get('name'),
      password: formData.get('password')
    });

    // 2. Identificar no Complyr ANTES de redirecionar
    if (window.complyr) {
      window.complyr.identify('email', user.email);

      if (user.phone) {
        window.complyr.identify('phone', user.phone);
      }

      if (user.name) {
        window.complyr.identify('name', user.name);
      }
    }

    // 3. Disparar evento de conversão (tracked automaticamente com dados identificados)
    if (window.fbq) {
      fbq('track', 'CompleteRegistration');
    }

    if (window.gtag) {
      gtag('event', 'sign_up', {
        method: 'Email'
      });
    }

    // 4. Redirecionar
    alert('Conta criada com sucesso!');
    window.location.href = '/dashboard';

  } catch (error) {
    console.error('Registration failed:', error);
    alert('Erro ao criar conta. Tente novamente.');
  }
});
</script>

Exemplo 5: E-commerce - Checkout

// Página de checkout
window.addEventListener('complyr:loaded', function() {
  // Identificar usuário no checkout (se autenticado)
  const userEmail = getCurrentUser()?.email;

  if (userEmail && window.complyr) {
    window.complyr.identify('email', userEmail);
  }
});

// Evento de compra com identificação
function trackPurchase(order) {
  // 1. Identificar comprador
  if (window.complyr) {
    window.complyr.identify('email', order.customer.email);

    if (order.customer.phone) {
      window.complyr.identify('phone', order.customer.phone);
    }

    if (order.customer.name) {
      window.complyr.identify('name', order.customer.name);
    }
  }

  // 2. Disparar evento de compra (com dados identificados)
  if (window.fbq) {
    fbq('track', 'Purchase', {
      value: order.total,
      currency: 'BRL',
      content_ids: order.items.map(item => item.id),
      content_type: 'product'
    });
  }

  if (window.gtag) {
    gtag('event', 'purchase', {
      transaction_id: order.id,
      value: order.total,
      currency: 'BRL',
      items: order.items
    });
  }
}

Exemplo 6: Next.js - Middleware de Identificação

// middleware/complyr-identify.ts
import { NextRequest, NextResponse } from 'next/server';

export async function middleware(request: NextRequest) {
  const response = NextResponse.next();

  // Se usuário autenticado, injetar script de identificação
  const user = await getUserFromRequest(request);

  if (user?.email) {
    // Adicionar script inline para identificar usuário
    const script = `
      <script>
        (function() {
          function identifyUser() {
            if (window.complyr) {
              window.complyr.identify('email', '${user.email}');
              ${user.phone ? `window.complyr.identify('phone', '${user.phone}');` : ''}
              ${user.name ? `window.complyr.identify('name', '${user.name}');` : ''}
            } else {
              setTimeout(identifyUser, 100);
            }
          }

          if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', identifyUser);
          } else {
            identifyUser();
          }
        })();
      </script>
    `;

    // Injetar script no HTML
    response.headers.set('X-Complyr-Identify', 'true');
  }

  return response;
}

Exemplo 7: WordPress - Identificação Automática

<?php
/**
 * Plugin Name: Complyr Auto Identify
 * Description: Identifica usuários logados automaticamente no Complyr
 */

// Adicionar script de identificação para usuários logados
function complyr_auto_identify() {
    // Apenas para usuários autenticados
    if (!is_user_logged_in()) {
        return;
    }

    $current_user = wp_get_current_user();

    if (!$current_user->user_email) {
        return;
    }
    ?>
    <script>
    (function() {
        function identifyCurrentUser() {
            if (window.complyr && typeof window.complyr.identify === 'function') {
                // Email
                window.complyr.identify('email', '<?php echo esc_js($current_user->user_email); ?>');

                // Nome (se disponível)
                <?php if ($current_user->display_name): ?>
                window.complyr.identify('name', '<?php echo esc_js($current_user->display_name); ?>');
                <?php endif; ?>

                // Telefone (se disponível via user meta)
                <?php
                $phone = get_user_meta($current_user->ID, 'phone', true);
                if ($phone):
                ?>
                window.complyr.identify('phone', '<?php echo esc_js($phone); ?>');
                <?php endif; ?>

                console.log('Complyr: Usuário identificado');
            } else {
                // Aguardar Complyr carregar
                setTimeout(identifyCurrentUser, 100);
            }
        }

        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', identifyCurrentUser);
        } else {
            identifyCurrentUser();
        }
    })();
    </script>
    <?php
}
add_action('wp_footer', 'complyr_auto_identify');

// Identificar após login do WordPress
function complyr_identify_on_login($user_login, $user) {
    // Armazenar flag para identificar na próxima página
    set_transient('complyr_identify_' . $user->ID, true, 60);
}
add_action('wp_login', 'complyr_identify_on_login', 10, 2);

🔄 Fluxo de Execução

sequenceDiagram
    participant App as Aplicação
    participant Complyr as window.complyr
    participant Consent as Consent Check
    participant Hash as SHA-256 Hasher
    participant GTM as Google Tag Manager
    participant FB as Facebook Pixel

    App->>Complyr: identify('email', 'user@example.com')

    Complyr->>Complyr: Validar parâmetros

    alt Parâmetros inválidos
        Complyr-->>App: throw Error
    end

    Complyr->>Consent: Verificar consentimento de marketing/personalização

    alt Sem consentimento
        Complyr-->>App: Bloqueado silenciosamente (retorna void)
        Note over Complyr,App: Não dispara erro, apenas ignora
    end

    Complyr->>Complyr: Normalizar valor (lowercase, trim)

    Complyr->>Hash: Hashear com SHA-256

    Hash-->>Complyr: Hash gerado

    Complyr->>GTM: Atualizar dataLayer com hash

    GTM->>GTM: Enhanced Conversions ativo

    Complyr->>FB: Atualizar fbq('init') com hash

    FB->>FB: Advanced Matching ativo

    Complyr-->>App: void (concluído)

    Note over App,FB: Email original NUNCA exposto

🔒 Segurança e Privacidade

SHA-256 Hashing Automático

O Complyr garante que dados pessoais nunca sejam transmitidos em texto plano:

// Você fornece:
window.complyr.identify('email', 'usuario@example.com');

// Complyr processa:
// 1. Normaliza: 'usuario@example.com' → 'usuario@example.com'
// 2. Hasheia: SHA-256 → '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8'
// 3. Envia: Apenas o hash para GTM e Facebook Pixel

// Email original NÃO é transmitido ou armazenado em cookies

Benefícios: - ✅ LGPD Art. 46: Segurança técnica adequada - ✅ Não Reversível: Impossível decodificar o hash - ✅ Matching Preservado: Plataformas conseguem fazer match do hash - ✅ Zero Exposição: Nenhum dado pessoal em rede ou logs


Validação de Consentimento

O método identify() só funciona se o usuário aceitou finalidades de: - Marketing (recomendado), ou - Personalização

// Usuário SEM consentimento de marketing
window.complyr.identify('email', 'user@example.com');
// → Bloqueado silenciosamente (não dispara erro)
// → Dados NÃO são enviados

// Usuário COM consentimento de marketing
window.complyr.identify('email', 'user@example.com');
// → Dados hasheados e enviados para GTM e Facebook Pixel
// → Advanced Matching ativado

Verificar consentimento antes de identificar:

window.addEventListener('complyr:consent-updated', function(event) {
  const { purposes } = event.detail;

  if (purposes.marketing || purposes.personalization) {
    // Usuário aceitou, pode identificar
    const user = getCurrentUser();

    if (user?.email) {
      window.complyr.identify('email', user.email);
    }
  } else {
    console.log('Consentimento negado - identificação bloqueada');
  }
});

⚙️ Integração com Plataformas

Google Tag Manager (Enhanced Conversions)

O Complyr envia hashes para dataLayer automaticamente:

// Você chama:
window.complyr.identify('email', 'user@example.com');
window.complyr.identify('phone', '+5511987654321');

// Complyr atualiza dataLayer:
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  'event': 'complyr_user_identified',
  'user_data': {
    'email_hash': '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8',
    'phone_hash': '...'
  }
});

Configurar Enhanced Conversions no GTM:

  1. Criar variável de dataLayer: user_data.email_hash
  2. Adicionar em tag do Google Ads
  3. Habilitar "Enhanced Conversions" na tag
  4. Usar variável como "User-Provided Data"

Facebook Pixel (Advanced Matching)

O Complyr atualiza fbq('init') com hashes automaticamente:

// Você chama:
window.complyr.identify('email', 'user@example.com');

// Complyr atualiza Facebook Pixel:
fbq('init', 'SEU_PIXEL_ID', {
  em: '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8', // email hash
  // ph, fn adicionados se identificados
}, {
  agent: 'complyr'
});

Aumento de Match Rate:

Identificadores Match Rate Aproximado
Nenhum ~40-50%
Email ~65-75%
Email + Telefone ~75-85%
Email + Telefone + Nome ~85-95%

⚠️ Tratamento de Erros

Erros Comuns

1. Tipo de Identificação Inválido

// ❌ ERRO
window.complyr.identify('cpf', '12345678900');
// Error: Invalid identification type 'cpf'

// ✅ SOLUÇÃO
// Usar apenas tipos suportados: 'email', 'phone', 'name'
window.complyr.identify('email', 'user@example.com');

2. Valor Vazio

// ❌ ERRO
window.complyr.identify('email', '');
// Error: User identifier cannot be empty

// ✅ SOLUÇÃO
const email = user?.email;

if (email) {
  window.complyr.identify('email', email);
} else {
  console.warn('Email não disponível para identificação');
}

3. Complyr Não Carregado

// ❌ ERRO
window.complyr.identify('email', 'user@example.com');
// TypeError: Cannot read property 'identify' of undefined

// ✅ SOLUÇÃO 1: Aguardar evento
window.addEventListener('complyr:loaded', function() {
  window.complyr.identify('email', 'user@example.com');
});

// ✅ SOLUÇÃO 2: Verificação defensiva
if (window.complyr && typeof window.complyr.identify === 'function') {
  window.complyr.identify('email', 'user@example.com');
} else {
  console.warn('Complyr não disponível');
}

4. Formato de Telefone Inválido

// ❌ RUIM: Formato brasileiro sem código internacional
window.complyr.identify('phone', '(11) 98765-4321');

// ✅ BOM: Formato internacional
window.complyr.identify('phone', '+5511987654321');

// Função auxiliar para normalizar telefone
function normalizePhone(phone) {
  // Remover caracteres não numéricos
  const digits = phone.replace(/\D/g, '');

  // Adicionar +55 se não tiver código do país
  if (digits.length === 11 && !digits.startsWith('55')) {
    return `+55${digits}`;
  }

  return `+${digits}`;
}

// Uso
const phone = normalizePhone(user.phone); // '(11) 98765-4321' → '+5511987654321'
window.complyr.identify('phone', phone);

Try/Catch Recomendado

function identifyUserSafely(user) {
  try {
    if (!window.complyr) {
      throw new Error('Complyr não está carregado');
    }

    if (!user?.email) {
      throw new Error('Email do usuário não disponível');
    }

    // Email (obrigatório)
    window.complyr.identify('email', user.email);

    // Telefone (opcional)
    if (user.phone) {
      const normalizedPhone = normalizePhone(user.phone);
      window.complyr.identify('phone', normalizedPhone);
    }

    // Nome (opcional)
    if (user.name) {
      window.complyr.identify('name', user.name);
    }

    console.log('✅ Usuário identificado:', user.email);

  } catch (error) {
    console.error('❌ Erro ao identificar usuário:', error);

    // Enviar para sistema de logging
    if (window.Sentry) {
      Sentry.captureException(error, {
        tags: { feature: 'complyr-identify' },
        extra: { userEmail: user?.email }
      });
    }
  }
}

📊 Verificação e Debug

Console Logging

// Ativar logs detalhados
localStorage.setItem('complyr_debug', 'true');
location.reload();

// Verá logs como:
// [Complyr] User identified: email
// [Complyr] Normalized value: user@example.com
// [Complyr] SHA-256 hash: 5e884898...
// [Complyr] Consent check: GRANTED (marketing)
// [Complyr] Sent to GTM dataLayer
// [Complyr] Sent to Facebook Pixel

Facebook Pixel Helper (Chrome Extension)

  1. Instalar Facebook Pixel Helper
  2. Abrir DevTools → Facebook Pixel Helper
  3. Identificar usuário no console:
    window.complyr.identify('email', 'test@example.com');
    
  4. Verificar em "Advanced Matching":
  5. em: Hash do email (presente ✅)
  6. ph: Hash do telefone (se fornecido)
  7. fn: Hash do nome (se fornecido)

Google Tag Assistant

  1. Instalar Tag Assistant Legacy
  2. Iniciar gravação
  3. Identificar usuário:
    window.complyr.identify('email', 'test@example.com');
    
  4. Verificar em dataLayer:
  5. event: complyr_user_identified
  6. user_data.email_hash: Hash presente ✅

DevTools Console

// Verificar se Complyr está disponível
console.log('Complyr:', window.complyr);

// Verificar método identify
console.log('identify disponível:', typeof window.complyr?.identify === 'function');

// Verificar consentimento atual
const consent = JSON.parse(localStorage.getItem('complyr_consent') || '{}');
console.log('Consentimento:', consent);
console.log('Marketing:', consent.purposes?.marketing); // true/false

// Verificar dataLayer GTM
console.log('dataLayer:', window.dataLayer);

// Verificar Facebook Pixel
console.log('fbq:', typeof window.fbq);

✅ Melhores Práticas

DOs ✅

// ✅ Aguardar Complyr carregar
window.addEventListener('complyr:loaded', function() {
  window.complyr.identify('email', user.email);
});

// ✅ Usar múltiplos identificadores
window.complyr.identify('email', user.email);
window.complyr.identify('phone', user.phone);
window.complyr.identify('name', user.name);

// ✅ Normalizar telefone para formato internacional
const phone = user.phone.replace(/\D/g, ''); // Remover não-numéricos
window.complyr.identify('phone', `+55${phone}`);

// ✅ Identificar após eventos importantes
// Login
handleLogin().then(() => {
  window.complyr.identify('email', user.email);
});

// Cadastro
handleRegister().then(() => {
  window.complyr.identify('email', user.email);
});

// Checkout
beginCheckout().then(() => {
  window.complyr.identify('email', order.customerEmail);
});

// ✅ Verificar consentimento antes de identificar
if (hasMarketingConsent()) {
  window.complyr.identify('email', user.email);
}

// ✅ Tratar erros graciosamente
try {
  window.complyr.identify('email', user.email);
} catch (error) {
  console.error('Erro ao identificar:', error);
}

DON'Ts ❌

// ❌ NÃO identificar sem aguardar Complyr carregar
window.complyr.identify('email', user.email);
// TypeError: complyr is undefined

// ❌ NÃO usar identificadores não suportados
window.complyr.identify('cpf', '12345678900');
// Error: Invalid identification type

// ❌ NÃO passar valores vazios
window.complyr.identify('email', '');
// Error: Empty identifier

// ❌ NÃO passar telefone em formato brasileiro sem código
window.complyr.identify('phone', '11987654321');
// Ruim: falta +55

// ❌ NÃO identificar antes de obter consentimento
// (bloqueado automaticamente, mas má prática tentar)
window.complyr.identify('email', user.email);
// Se usuário não aceitou marketing: silenciosamente bloqueado

// ❌ NÃO hashear manualmente
const hash = sha256(user.email);
window.complyr.identify('email', hash);
// Complyr hasheia automaticamente!

// ❌ NÃO armazenar dados pessoais em localStorage/cookies
localStorage.setItem('user_email', user.email);
// Violação de LGPD - use apenas identify()

🔗 Recursos Relacionados

Métodos da API: - loadPolicy() - Carregar e exibir políticas - acceptPolicy() - Registrar aceitação de política - revokeConsent() - Revogar consentimento - openPreferences() - Abrir modal de preferências

Recursos: - window.complyr - Objeto global da API - Eventos JavaScript - Lista completa de eventos - Exemplos Práticos - Casos de uso completos

Integrações: - Google Tag Manager - Configurar Enhanced Conversions - Facebook Pixel - Advanced Matching - Aumentar match rate


❓ Perguntas Frequentes

P: Os dados são enviados em texto plano?

R: Não! Todos os dados são automaticamente hasheados com SHA-256 antes de serem enviados. O email original nunca é transmitido pela rede ou armazenado em cookies.


P: Preciso de consentimento para usar identify()?

R: Sim! O método só funciona se o usuário aceitou: - Marketing (recomendado), ou - Personalização

Se o usuário não aceitou, identify() é bloqueado silenciosamente.


P: Posso identificar múltiplas vezes?

R: Sim! Recomendamos chamar identify() múltiplas vezes com diferentes tipos para maximizar o match rate:

window.complyr.identify('email', user.email);
window.complyr.identify('phone', user.phone);
window.complyr.identify('name', user.name);

P: Como verificar se a identificação funcionou?

R: Use ferramentas de debug:

  1. Facebook Pixel Helper: Verifique "Advanced Matching" com em, ph, fn
  2. Google Tag Assistant: Veja user_data no dataLayer
  3. Console Complyr: Ative localStorage.setItem('complyr_debug', 'true')

P: O que acontece se eu identificar antes de obter consentimento?

R: O método é bloqueado silenciosamente. Não dispara erro, mas os dados não são enviados. É melhor identificar APÓS verificar consentimento:

window.addEventListener('complyr:consent-updated', function(event) {
  if (event.detail.purposes.marketing) {
    window.complyr.identify('email', user.email);
  }
});

P: Posso identificar usuários não autenticados?

R: Tecnicamente sim, mas não é recomendado. Use identify() apenas para usuários autenticados ou que forneceram dados em formulários (newsletter, checkout).


P: O Facebook Pixel precisa de configuração adicional?

R: Não! O Complyr atualiza automaticamente o fbq('init') com os hashes. Certifique-se apenas de: 1. Facebook Pixel instalado via GTM 2. Consentimento de marketing aceito 3. Chamar identify() após login/cadastro


P: Qual formato de telefone usar?

R: Formato internacional com código do país:

// ✅ Correto
window.complyr.identify('phone', '+5511987654321');

// ❌ Incorreto
window.complyr.identify('phone', '(11) 98765-4321'); // Falta +55

P: Posso usar CPF ou RG como identificador?

R: Não. O método aceita apenas: - 'email' - 'phone' - 'name'

CPF/RG não são suportados por plataformas de Advanced Matching (Facebook, Google).


📞 Suporte

Dúvidas sobre identify()?