# Modelo: Captura com Evento Externo (Cloudflare Native)

Este modelo combina a captura de leads no site com o recebimento de eventos externos (Webhooks) de plataformas de vendas (Ticto, Hotmart, Kiwify, Eduzz, etc.). Os dados são cruzados no banco **D1** para garantir uma atribuição de alta qualidade.

---

## 🏗️ ARQUITETURA TÉCNICA (Quantum Tier)

O fluxo de dados segue o enriquecimento de identidade:
1. **Site**: Captura o lead e gera o `event_id` inicial, disparando para o Worker.
2. **Servidor (Worker)**: Salva o lead no D1 vinculando e-mail aos cookies (`fbp`, `fbc`, `ttp`).
3. **Webhook**: O Worker recebe a venda, busca o lead no D1 e dispara a CAPI com todos os dados recuperados.

---

## 🛠️ PASSO 1: CONFIGURAÇÃO DO SITE

### 1.1 SDK de Rastreamento
```html
<script src="/js/cdpTrack.js" async></script>
<script>
  window.cdpConfig = {
    metaId: 'SEU_PIXEL_ID',
    ttId: 'SEU_TIKTOK_ID'
  };
</script>
```

### 1.2 Captura de Lead
```javascript
document.querySelector('#form-lead').addEventListener('submit', async (e) => {
  e.preventDefault();
  
  const leadData = {
    email: e.target.email.value,
    phone: e.target.phone.value,
    first_name: e.target.name.value,
    event_id: cdpTrack.generateId()
  };

  await cdpTrack.track('Lead', leadData);
  
  e.target.submit();
});
```

---

## 🖥️ PASSO 2: RECEBIMENTO DE WEBHOOK

O Worker recebe o Webhook da plataforma de vendas, busca o lead no D1 e dispara as APIs.

### 2.1 Exemplo de Lógica no Worker
```javascript
export default {
  async fetch(request, env, ctx) {
    if (request.method === 'POST') {
      const payload = await request.json();
      const email = payload.email || payload.customer?.email;

      // Busca o lead no banco D1
      const lead = await env.DB.prepare(
        "SELECT * FROM leads WHERE email = ?"
      ).bind(email).first();

      if (lead) {
        const capiData = {
          event_name: 'Purchase',
          event_id: payload.transaction_id,
          user_data: {
            em: lead.email,
            ph: lead.phone,
            fbp: lead.fbp,
            fbc: lead.fbc,
            client_ip_address: lead.ip,
            client_user_agent: lead.ua
          },
          custom_data: {
            value: payload.price,
            currency: 'BRL'
          }
        };

        ctx.waitUntil(dispatchCAPI(capiData, env));
      }

      return new Response('OK', { status: 200 });
    }
  }
}
```

---

## ✅ VALIDAÇÃO TÉCNICA

- **Enriquecimento**: Verifique se a CAPI está enviando os campos `fbp` e `fbc` mesmo em eventos que vêm de Webhook.
- **Match Quality**: O cruzamento via e-mail no D1 deve garantir uma pontuação máxima de qualidade no Gerenciador de Eventos.
- **Deduplicação**: O `event_id` da venda deve ser o ID de transação da plataforma.
