cdp-edge 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +324 -0
  2. package/bin/cdp-edge.js +71 -0
  3. package/contracts/agent-versions.json +679 -0
  4. package/contracts/api-versions.json +372 -0
  5. package/contracts/types.ts +81 -0
  6. package/dist/commands/analyze.js +52 -0
  7. package/dist/commands/infra.js +54 -0
  8. package/dist/commands/install.js +191 -0
  9. package/dist/commands/server.js +174 -0
  10. package/dist/commands/setup.js +355 -0
  11. package/dist/commands/validate.js +248 -0
  12. package/dist/index.js +12 -0
  13. package/dist/sdk/cdpTrack.js +2095 -0
  14. package/dist/sdk/cdpTrack.min.js +64 -0
  15. package/dist/sdk/install-snippet.html +10 -0
  16. package/docs/CI-CD-SETUP.md +217 -0
  17. package/docs/events-reference.md +359 -0
  18. package/docs/installation.md +155 -0
  19. package/docs/quick-start.md +185 -0
  20. package/docs/sdk-reference.md +371 -0
  21. package/docs/whatsapp-ctwa.md +210 -0
  22. package/extracted-skill/tracking-events-generator/INDEX.md +94 -0
  23. package/extracted-skill/tracking-events-generator/INSTALACAO-CDPEDGE.md +58 -0
  24. package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +683 -0
  25. package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +513 -0
  26. package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +333 -0
  27. package/extracted-skill/tracking-events-generator/SKILL.md +257 -0
  28. package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -0
  29. package/extracted-skill/tracking-events-generator/agents/ab-ltv-agent.md +196 -0
  30. package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +54 -0
  31. package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +1304 -0
  32. package/extracted-skill/tracking-events-generator/agents/bidding-agent.md +347 -0
  33. package/extracted-skill/tracking-events-generator/agents/bing-agent.md +66 -0
  34. package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +364 -0
  35. package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +149 -0
  36. package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +2097 -0
  37. package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +1459 -0
  38. package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +456 -0
  39. package/extracted-skill/tracking-events-generator/agents/database-agent.md +668 -0
  40. package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1455 -0
  41. package/extracted-skill/tracking-events-generator/agents/devops-agent.md +232 -0
  42. package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +238 -0
  43. package/extracted-skill/tracking-events-generator/agents/email-agent.md +88 -0
  44. package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +257 -0
  45. package/extracted-skill/tracking-events-generator/agents/fraud-detection-agent.md +143 -0
  46. package/extracted-skill/tracking-events-generator/agents/google-agent.md +235 -0
  47. package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +525 -0
  48. package/extracted-skill/tracking-events-generator/agents/lead-scoring-agent.md +282 -0
  49. package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +173 -0
  50. package/extracted-skill/tracking-events-generator/agents/localization-agent.md +55 -0
  51. package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +59 -0
  52. package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +960 -0
  53. package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +2154 -0
  54. package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +304 -0
  55. package/extracted-skill/tracking-events-generator/agents/memory-agent.json +25 -0
  56. package/extracted-skill/tracking-events-generator/agents/memory-agent.md +878 -0
  57. package/extracted-skill/tracking-events-generator/agents/meta-agent.md +118 -0
  58. package/extracted-skill/tracking-events-generator/agents/ml-clustering-agent.md +749 -0
  59. package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +272 -0
  60. package/extracted-skill/tracking-events-generator/agents/performance-agent.md +1167 -0
  61. package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +1442 -0
  62. package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +318 -0
  63. package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +849 -0
  64. package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +258 -0
  65. package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +321 -0
  66. package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1861 -0
  67. package/extracted-skill/tracking-events-generator/agents/server-tracking.md +1188 -0
  68. package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +391 -0
  69. package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +182 -0
  70. package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +459 -0
  71. package/extracted-skill/tracking-events-generator/agents/utm-agent.md +322 -0
  72. package/extracted-skill/tracking-events-generator/agents/validator-agent.md +271 -0
  73. package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +177 -0
  74. package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +129 -0
  75. package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +707 -0
  76. package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +537 -0
  77. package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -0
  78. package/extracted-skill/tracking-events-generator/cdpTrack.js +640 -0
  79. package/extracted-skill/tracking-events-generator/contracts/api-versions.json +372 -0
  80. package/extracted-skill/tracking-events-generator/docs/guia-cloudflare-iniciante.md +107 -0
  81. package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -0
  82. package/extracted-skill/tracking-events-generator/evals/evals.json +235 -0
  83. package/extracted-skill/tracking-events-generator/integration-test.js +497 -0
  84. package/extracted-skill/tracking-events-generator/knowledge-base.md +3066 -0
  85. package/extracted-skill/tracking-events-generator/micro-events.js +992 -0
  86. package/extracted-skill/tracking-events-generator/models/captura-de-lead.md +78 -0
  87. package/extracted-skill/tracking-events-generator/models/captura-lead-evento-externo.md +99 -0
  88. package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +111 -0
  89. package/extracted-skill/tracking-events-generator/models/lancamento-imobiliario.md +344 -0
  90. package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +672 -0
  91. package/extracted-skill/tracking-events-generator/models/pagina-obrigado.md +55 -0
  92. package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -0
  93. package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -0
  94. package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -0
  95. package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +132 -0
  96. package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -0
  97. package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -0
  98. package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -0
  99. package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -0
  100. package/extracted-skill/tracking-events-generator/models/scenarios/real-estate-logic.md +50 -0
  101. package/extracted-skill/tracking-events-generator/models/scenarios/sales-page-logic.md +50 -0
  102. package/extracted-skill/tracking-events-generator/models/trafego-direto.md +582 -0
  103. package/extracted-skill/tracking-events-generator/models/webinar-registration.md +63 -0
  104. package/extracted-skill/tracking-events-generator/route-intent-capture.js +222 -0
  105. package/extracted-skill/tracking-events-generator/tracking.config.js +46 -0
  106. package/extracted-skill/tracking-events-generator/walkthrough.md +26 -0
  107. package/package.json +89 -0
  108. package/scripts/build-sdk.js +106 -0
  109. package/server-edge-tracker/.client.env.example +14 -0
  110. package/server-edge-tracker/INSTALAR.md +527 -0
  111. package/server-edge-tracker/SEGMENTATION-DOCS.md +513 -0
  112. package/server-edge-tracker/config/utm-mapping.json +64 -0
  113. package/server-edge-tracker/deploy-client.cjs +76 -0
  114. package/server-edge-tracker/index.ts +1164 -0
  115. package/server-edge-tracker/migrate-new-db.sql +137 -0
  116. package/server-edge-tracker/migrate-v2.sql +16 -0
  117. package/server-edge-tracker/migrate-v3.sql +6 -0
  118. package/server-edge-tracker/migrate-v4.sql +18 -0
  119. package/server-edge-tracker/migrate-v5.sql +17 -0
  120. package/server-edge-tracker/migrate-v6.sql +24 -0
  121. package/server-edge-tracker/migrate-v7.sql +64 -0
  122. package/server-edge-tracker/migrate.sql +111 -0
  123. package/server-edge-tracker/modules/db.ts +702 -0
  124. package/server-edge-tracker/modules/dispatch/ga4.ts +72 -0
  125. package/server-edge-tracker/modules/dispatch/meta.ts +143 -0
  126. package/server-edge-tracker/modules/dispatch/platforms.ts +255 -0
  127. package/server-edge-tracker/modules/dispatch/tiktok.ts +107 -0
  128. package/server-edge-tracker/modules/dispatch/whatsapp.ts +279 -0
  129. package/server-edge-tracker/modules/intelligence.ts +589 -0
  130. package/server-edge-tracker/modules/ml/bidding.ts +247 -0
  131. package/server-edge-tracker/modules/ml/fraud.ts +302 -0
  132. package/server-edge-tracker/modules/ml/logistic.ts +226 -0
  133. package/server-edge-tracker/modules/ml/ltv.ts +531 -0
  134. package/server-edge-tracker/modules/ml/matchquality.ts +232 -0
  135. package/server-edge-tracker/modules/ml/quiz.ts +343 -0
  136. package/server-edge-tracker/modules/ml/roas.ts +255 -0
  137. package/server-edge-tracker/modules/ml/segmentation.ts +407 -0
  138. package/server-edge-tracker/modules/nurture.ts +257 -0
  139. package/server-edge-tracker/modules/utils.ts +311 -0
  140. package/server-edge-tracker/modules/utm/utm-enricher.ts +231 -0
  141. package/server-edge-tracker/schema-ab-ltv.sql +97 -0
  142. package/server-edge-tracker/schema-bidding.sql +86 -0
  143. package/server-edge-tracker/schema-fraud.sql +90 -0
  144. package/server-edge-tracker/schema-indexes.sql +67 -0
  145. package/server-edge-tracker/schema-ltv-feedback.sql +11 -0
  146. package/server-edge-tracker/schema-quiz.sql +52 -0
  147. package/server-edge-tracker/schema-sales-engine.sql +113 -0
  148. package/server-edge-tracker/schema-segmentation.sql +219 -0
  149. package/server-edge-tracker/schema-utm.sql +82 -0
  150. package/server-edge-tracker/schema.sql +265 -0
  151. package/server-edge-tracker/types.ts +258 -0
  152. package/server-edge-tracker/wrangler.toml +136 -0
  153. package/templates/afiliado-sem-landing.md +312 -0
  154. package/templates/captura-de-lead.md +78 -0
  155. package/templates/captura-lead-evento-externo.md +99 -0
  156. package/templates/checkout-proprio.md +111 -0
  157. package/templates/install/.claude/commands/cdp.md +1 -0
  158. package/templates/install/CLAUDE.md +65 -0
  159. package/templates/lancamento-imobiliario.md +344 -0
  160. package/templates/linkedin/tag-template.js +46 -0
  161. package/templates/multi-step-checkout.md +672 -0
  162. package/templates/pagina-obrigado.md +55 -0
  163. package/templates/pinterest/conversions-api-template.js +144 -0
  164. package/templates/pinterest/event-mappings.json +48 -0
  165. package/templates/pinterest/tag-template.js +28 -0
  166. package/templates/quiz-funnel.md +132 -0
  167. package/templates/reddit/conversions-api-template.js +205 -0
  168. package/templates/reddit/event-mappings.json +56 -0
  169. package/templates/reddit/pixel-template.js +19 -0
  170. package/templates/scenarios/behavior-engine.js +425 -0
  171. package/templates/scenarios/real-estate-logic.md +50 -0
  172. package/templates/scenarios/sales-page-logic.md +50 -0
  173. package/templates/spotify/pixel-template.js +46 -0
  174. package/templates/trafego-direto.md +582 -0
  175. package/templates/vsl-page.md +292 -0
  176. package/templates/webinar-registration.md +63 -0
@@ -0,0 +1,78 @@
1
+ # Modelo: Captura de Lead (Cloudflare Native)
2
+
3
+ Este modelo é destinado a páginas de captura de leads (Opt-in), onde o objetivo principal é coletar o e-mail e/ou telefone do usuário antes de redirecioná-lo para a próxima etapa do funil.
4
+
5
+ ---
6
+
7
+ ## 🏗️ ARQUITETURA TÉCNICA (Quantum Tier)
8
+
9
+ O rastreamento é realizado de forma síncrona com o envio do formulário:
10
+ 1. **Página**: Captura os dados do formulário e envia via `cdpTrack.track()`.
11
+ 2. **Servidor (Worker)**: Recebe os dados, realiza o hashing SHA-256 e envia para as APIs.
12
+ 3. **Database (D1)**: Armazena o lead e vincula aos IDs de rastreamento (`fbp`, `fbc`).
13
+
14
+ ---
15
+
16
+ ## 📘 EVENTOS PRINCIPAIS
17
+
18
+ | Evento | Gatilho | PII (Dados Pessoais) |
19
+ |---|---|---|
20
+ | **PageView** | Carregamento da página | IP, User-Agent, URL |
21
+ | **Lead** | Clique no botão de enviar | E-mail, Telefone, Nome (crus) |
22
+
23
+ ---
24
+
25
+ ## 🛠️ PASSO 1: CONFIGURAÇÃO DO SITE
26
+
27
+ ### 1.1 SDK de Rastreamento (Header)
28
+ ```html
29
+ <script src="/js/cdpTrack.js" async></script>
30
+ <script>
31
+ window.cdpConfig = {
32
+ metaId: 'SEU_PIXEL_ID',
33
+ ttId: 'SEU_TIKTOK_ID'
34
+ };
35
+ </script>
36
+ ```
37
+
38
+ ### 1.2 Captura do Formulário
39
+ Este script deve ser inserido antes da tag `</body>`. Ele garante que o evento seja enviado antes do redirecionamento.
40
+
41
+ ```javascript
42
+ <script>
43
+ document.querySelector('#meu-formulario').addEventListener('submit', async (e) => {
44
+ e.preventDefault();
45
+
46
+ const leadData = {
47
+ email: e.target.email.value,
48
+ phone: e.target.phone.value,
49
+ first_name: e.target.name.value,
50
+ event_id: cdpTrack.generateId() // ID único para deduplicação
51
+ };
52
+
53
+ // Envia para o Worker (Cloudflare)
54
+ await cdpTrack.track('Lead', leadData);
55
+
56
+ // Prossegue com o envio real do formulário
57
+ e.target.submit();
58
+ });
59
+ </script>
60
+ ```
61
+
62
+ ---
63
+
64
+ ## ⚡ PASSO 2: SERVIDOR (CLOUDFLARE WORKER)
65
+
66
+ O PlayerBuilder Quantum Tier processa o evento via Cloudflare Worker:
67
+ 1. **Deduplicação**: Utiliza o `event_id` do browser para 100% de precisão na Meta CAPI.
68
+ 2. **Advanced Matching**: Aplica SHA256 em `email`, `phone`, `first_name` e `last_name` (WebCrypto native).
69
+ 3. **D1 Store**: Salva o lead e o Identity Graph na tabela `leads`.
70
+ 4. **API Dispatch**: Envia assincronamente para Meta CAPI (v22.0) e TikTok Events API (v1.3).
71
+
72
+ ---
73
+
74
+ ## ✅ VALIDAÇÃO TÉCNICA
75
+
76
+ - **Deduplicação**: Verifique se o `event_id` gerado no site é o mesmo recebido no Gerenciador de Eventos.
77
+ - **Match Quality**: O envio de e-mail e telefone hasheados pelo servidor garante a máxima pontuação de qualidade.
78
+ - **Persistência**: O lead deve aparecer no banco D1 imediatamente após o envio.
@@ -0,0 +1,99 @@
1
+ # Modelo: Captura com Evento Externo (Cloudflare Native)
2
+
3
+ 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.
4
+
5
+ ---
6
+
7
+ ## 🏗️ ARQUITETURA TÉCNICA (Quantum Tier)
8
+
9
+ O fluxo de dados segue o enriquecimento de identidade:
10
+ 1. **Site**: Captura o lead e gera o `event_id` inicial, disparando para o Worker.
11
+ 2. **Servidor (Worker)**: Salva o lead no D1 vinculando e-mail aos cookies (`fbp`, `fbc`, `ttp`).
12
+ 3. **Webhook**: O Worker recebe a venda, busca o lead no D1 e dispara a CAPI com todos os dados recuperados.
13
+
14
+ ---
15
+
16
+ ## 🛠️ PASSO 1: CONFIGURAÇÃO DO SITE
17
+
18
+ ### 1.1 SDK de Rastreamento
19
+ ```html
20
+ <script src="/js/cdpTrack.js" async></script>
21
+ <script>
22
+ window.cdpConfig = {
23
+ metaId: 'SEU_PIXEL_ID',
24
+ ttId: 'SEU_TIKTOK_ID'
25
+ };
26
+ </script>
27
+ ```
28
+
29
+ ### 1.2 Captura de Lead
30
+ ```javascript
31
+ document.querySelector('#form-lead').addEventListener('submit', async (e) => {
32
+ e.preventDefault();
33
+
34
+ const leadData = {
35
+ email: e.target.email.value,
36
+ phone: e.target.phone.value,
37
+ first_name: e.target.name.value,
38
+ event_id: cdpTrack.generateId()
39
+ };
40
+
41
+ await cdpTrack.track('Lead', leadData);
42
+
43
+ e.target.submit();
44
+ });
45
+ ```
46
+
47
+ ---
48
+
49
+ ## 🖥️ PASSO 2: RECEBIMENTO DE WEBHOOK
50
+
51
+ O Worker recebe o Webhook da plataforma de vendas, busca o lead no D1 e dispara as APIs.
52
+
53
+ ### 2.1 Exemplo de Lógica no Worker
54
+ ```javascript
55
+ export default {
56
+ async fetch(request, env, ctx) {
57
+ if (request.method === 'POST') {
58
+ const payload = await request.json();
59
+ const email = payload.email || payload.customer?.email;
60
+
61
+ // Busca o lead no banco D1
62
+ const lead = await env.DB.prepare(
63
+ "SELECT * FROM leads WHERE email = ?"
64
+ ).bind(email).first();
65
+
66
+ if (lead) {
67
+ const capiData = {
68
+ event_name: 'Purchase',
69
+ event_id: payload.transaction_id,
70
+ user_data: {
71
+ em: lead.email,
72
+ ph: lead.phone,
73
+ fbp: lead.fbp,
74
+ fbc: lead.fbc,
75
+ client_ip_address: lead.ip,
76
+ client_user_agent: lead.ua
77
+ },
78
+ custom_data: {
79
+ value: payload.price,
80
+ currency: 'BRL'
81
+ }
82
+ };
83
+
84
+ ctx.waitUntil(dispatchCAPI(capiData, env));
85
+ }
86
+
87
+ return new Response('OK', { status: 200 });
88
+ }
89
+ }
90
+ }
91
+ ```
92
+
93
+ ---
94
+
95
+ ## ✅ VALIDAÇÃO TÉCNICA
96
+
97
+ - **Enriquecimento**: Verifique se a CAPI está enviando os campos `fbp` e `fbc` mesmo em eventos que vêm de Webhook.
98
+ - **Match Quality**: O cruzamento via e-mail no D1 deve garantir uma pontuação máxima de qualidade no Gerenciador de Eventos.
99
+ - **Deduplicação**: O `event_id` da venda deve ser o ID de transação da plataforma.
@@ -0,0 +1,111 @@
1
+ # Modelo: Checkout Próprio (Cloudflare Native)
2
+
3
+ Este modelo é destinado a checkouts integrados diretamente no seu site (WooCommerce, Shopify, ou checkouts customizados). O rastreamento cobre desde a entrada no checkout até a confirmação de compra na infraestrutura Cloudflare.
4
+
5
+ ---
6
+
7
+ ## 🏗️ ARQUITETURA TÉCNICA (Quantum Tier)
8
+
9
+ Fluxo de conversão:
10
+ 1. **Site**: Captura de passos (`InitiateCheckout`, `AddPaymentInfo`) via Fetch direto.
11
+ 2. **Servidor (Worker)**: Processamento e despacho para as APIs.
12
+ 3. **D1 Database**: Repositório de pedidos e perfis de compradores.
13
+
14
+ ---
15
+
16
+ ## 📘 IDENTIFICADORES
17
+
18
+ | Evento | Gatilho | Dados Enviados |
19
+ |---|---|---|
20
+ | `InitiateCheckout` | Entrada na página de checkout | `email`, `phone` (se preenchidos) |
21
+ | `AddPaymentInfo` | Seleção da forma de pagamento | `email`, `payment_type` |
22
+ | `Purchase` | Clique no botão de finalizar | `email`, `value`, `order_id` |
23
+
24
+ ---
25
+
26
+ ## 🛠️ PASSO 1: CONFIGURAÇÃO DO SITE
27
+
28
+ ### 1.1 Script de Tracking de Checkout
29
+ Este script captura dados à medida que o usuário preenche o formulário.
30
+
31
+ ```javascript
32
+ <script>
33
+ (function() {
34
+ const WORKER_URL = 'https://api.seusite.com/api/tracking';
35
+
36
+ // Atualização de identidade ao sair do campo (Blur Event)
37
+ const inputs = document.querySelectorAll('input[type="email"], input[type="tel"]');
38
+ inputs.forEach(input => {
39
+ input.addEventListener('blur', function() {
40
+ window.cdpTrack('IdentityUpdate', {
41
+ email: document.querySelector('[name="email"]')?.value || '',
42
+ phone: document.querySelector('[name="phone"]')?.value || ''
43
+ });
44
+ });
45
+ });
46
+
47
+ // Evento: Entrada no Checkout
48
+ window.cdpTrack('InitiateCheckout', {
49
+ num_items: 1,
50
+ content_name: 'Produto Premium'
51
+ });
52
+
53
+ // Evento: Finalizar Compra
54
+ const purchaseBtn = document.querySelector('#btn-finalizar');
55
+ purchaseBtn?.addEventListener('click', function() {
56
+ window.cdpTrack('Purchase', {
57
+ value: 197.00,
58
+ currency: 'BRL',
59
+ order_id: 'ord_' + Date.now()
60
+ });
61
+ });
62
+ })();
63
+ </script>
64
+ ```
65
+
66
+ ---
67
+
68
+ ## ⚡ PASSO 2: SERVIDOR (CLOUDFLARE WORKER)
69
+
70
+ O Worker gerencia o estado da transação e a persistência.
71
+
72
+ ### 2.1 Persistência de Pedido
73
+ Ao receber o evento `Purchase`, o Worker salva na tabela `leads` com o status correspondente.
74
+
75
+ ### 2.2 Despacho para APIs
76
+ - O Worker envia `Purchase` para as APIs (Meta CAPI v22.0, TikTok v1.3).
77
+ - O `InitiateCheckout` prévio no D1 permite automação de recuperação de carrinho.
78
+
79
+ ---
80
+
81
+ ## 📊 PASSO 3: BANCO DE DADOS D1
82
+
83
+ ```sql
84
+ INSERT INTO leads (
85
+ event_name, event_id, email, value, currency, utm_source, page_url
86
+ ) VALUES (?, ?, ?, ?, ?, ?, ?);
87
+ ```
88
+
89
+ ---
90
+
91
+ ## ✅ VALIDAÇÃO TÉCNICA
92
+
93
+ - **Captura Intermediária**: Verifique se o e-mail é enviado ao Worker antes do clique final (evento Blur).
94
+ - **Deduplicação**: O `order_id` deve ser utilizado como `event_id`.
95
+ - **Integridade D1**: O valor da compra e moeda devem ser gravados corretamente no banco.
96
+
97
+ ---
98
+
99
+ ## 🔄 EXEMPLOS DE INTEGRAÇÃO
100
+
101
+ ### Stripe
102
+ ```javascript
103
+ stripe.confirmPayment({ ... }).then(result => {
104
+ if (!result.error) {
105
+ cdpTrack.track('Purchase', { value: 197.0, order_id: result.paymentIntent.id });
106
+ }
107
+ });
108
+ ```
109
+
110
+ ### Mercado Pago / PagSeguro
111
+ Chamar o disparo de `Purchase` no callback de `status === 'approved'`.
@@ -0,0 +1,344 @@
1
+ # Modelo: Lançamento Imobiliário (Cloudflare Native)
2
+
3
+ Template para páginas de lançamento imobiliário com formulário de interesse, galeria, mapa/localização, simulador de financiamento, vídeo de tour, calendário de agendamento e botão WhatsApp.
4
+
5
+ ---
6
+
7
+ ## 🏗️ ARQUITETURA TÉCNICA (Quantum Tier)
8
+
9
+ ```
10
+ Browser (cdpTrack.js)
11
+ ├─ PageView → ao carregar
12
+ ├─ ViewContent → ao entrar na galeria
13
+ ├─ FindLocation → ao interagir com mapa/localização
14
+ ├─ video_25/50/75/complete → ao assistir tour virtual
15
+ ├─ CustomizeProduct → ao usar simulador de financiamento
16
+ ├─ AddToWishlist → ao favoritar imóvel
17
+ ├─ Contact → ao clicar em WhatsApp/telefone
18
+ ├─ Schedule → ao confirmar agendamento de visita
19
+ └─ Lead → ao enviar formulário (PII completo)
20
+
21
+
22
+ Cloudflare Worker (same-domain /track)
23
+ ├─ Fraud Gate
24
+ ├─ LTV Prediction (Granite 4.0 Micro) + score por eventType
25
+ ├─ D1: upsertProfile, identity graph, distanceKm
26
+ └─ CAPI dispatch: Meta v22.0 + GA4 + TikTok v1.3
27
+ ```
28
+
29
+ ---
30
+
31
+ ## 📘 MAPA DE EVENTOS
32
+
33
+ | Evento | Gatilho | Sinal para as plataformas |
34
+ |---|---|---|
35
+ | `PageView` | Carregamento | Topo do funil |
36
+ | `ViewContent` | Entra na galeria de fotos | Interesse no produto |
37
+ | `FindLocation` | Clica em mapa / "Como chegar" / abre localização | Intenção de visita física — +10 LTV |
38
+ | `video_25` / `video_50` / `video_75` / `video_complete` | Tour virtual / VSL em % assistido | Engajamento profundo |
39
+ | `CustomizeProduct` | Usa simulador de financiamento/parcelas/FGTS | Intenção de compra máxima — +15 LTV |
40
+ | `AddToWishlist` | Clica em "Favoritar" / coração | Interesse persistente — +8 LTV |
41
+ | `Contact` | Clica em WhatsApp ou telefone | Alta intenção de contato |
42
+ | `Schedule` | Confirma agendamento de visita | Conversão de visita |
43
+ | `Lead` | Envia formulário (nome/email/telefone) | Conversão principal com PII |
44
+
45
+ ---
46
+
47
+ ## 🛠️ PASSO 1: CONFIGURAÇÃO DO SDK
48
+
49
+ ### 1.1 Header
50
+ ```html
51
+ <script src="/js/cdpTrack.js" async></script>
52
+ <script>
53
+ window.cdpConfig = {
54
+ metaId: 'SEU_PIXEL_ID',
55
+ ttId: 'SEU_TIKTOK_ID',
56
+ trackEndpoint: '/track'
57
+ };
58
+ </script>
59
+ ```
60
+
61
+ ---
62
+
63
+ ## 🛠️ PASSO 2: EVENTOS DE COMPORTAMENTO
64
+
65
+ ### 2.1 PageView (automático via SDK)
66
+ O SDK dispara automaticamente. Não precisa de código adicional.
67
+
68
+ ---
69
+
70
+ ### 2.2 ViewContent — Galeria de fotos
71
+ ```javascript
72
+ // Dispara quando usuário abre/rola a galeria de imagens
73
+ document.querySelector('.galeria-imovel, [data-section="gallery"]')?.addEventListener('click', () => {
74
+ cdpTrack.track('ViewContent', {
75
+ contentName: 'Galeria — [NOME DO EMPREENDIMENTO]',
76
+ contentCategory: 'imovel',
77
+ funnel_stage: 'gallery_view',
78
+ });
79
+ });
80
+ ```
81
+
82
+ ---
83
+
84
+ ### 2.3 FindLocation — Mapa / Localização
85
+ ```javascript
86
+ // Dispara quando usuário clica no mapa, "Como chegar" ou "Ver localização"
87
+ document.querySelectorAll(
88
+ 'a[href*="maps"], a[href*="waze"], [data-section="localizacao"], #mapa, .btn-localizacao, .btn-como-chegar'
89
+ ).forEach(el => {
90
+ el.addEventListener('click', () => {
91
+ cdpTrack.track('FindLocation', {
92
+ contentName: 'Localização — [NOME DO EMPREENDIMENTO]',
93
+ contentCategory: 'imovel',
94
+ funnel_stage: 'map_view',
95
+ // Coordenadas do empreendimento (preencher):
96
+ property_lat: -23.5505, // latitude
97
+ property_lng: -46.6333, // longitude
98
+ });
99
+ });
100
+ });
101
+ ```
102
+
103
+ ---
104
+
105
+ ### 2.4 Vídeo / Tour Virtual
106
+ ```javascript
107
+ // Para vídeo HTML5 nativo:
108
+ const video = document.querySelector('video#tour-virtual, video.tour-360');
109
+ if (video) {
110
+ const fired = new Set();
111
+ video.addEventListener('timeupdate', () => {
112
+ const pct = Math.floor((video.currentTime / video.duration) * 100);
113
+ if (pct >= 25 && !fired.has(25)) {
114
+ fired.add(25);
115
+ cdpTrack.track('video_25', { contentName: 'Tour Virtual — [NOME DO EMPREENDIMENTO]' });
116
+ }
117
+ if (pct >= 50 && !fired.has(50)) {
118
+ fired.add(50);
119
+ cdpTrack.track('video_50', { contentName: 'Tour Virtual — [NOME DO EMPREENDIMENTO]' });
120
+ }
121
+ if (pct >= 75 && !fired.has(75)) {
122
+ fired.add(75);
123
+ cdpTrack.track('video_75', { contentName: 'Tour Virtual — [NOME DO EMPREENDIMENTO]' });
124
+ }
125
+ });
126
+ video.addEventListener('ended', () => {
127
+ cdpTrack.track('video_complete', { contentName: 'Tour Virtual — [NOME DO EMPREENDIMENTO]' });
128
+ });
129
+ }
130
+
131
+ // Para YouTube embed (via YouTube API):
132
+ // Adicionar ?enablejsapi=1 na URL do iframe e usar onStateChange
133
+ // Ver: https://developers.google.com/youtube/iframe_api_reference
134
+ ```
135
+
136
+ ---
137
+
138
+ ### 2.5 CustomizeProduct — Simulador de Financiamento
139
+ ```javascript
140
+ // Dispara quando usuário interage com o simulador de parcelas/FGTS/Caixa
141
+ const simulador = document.querySelector(
142
+ '#simulador, .simulador-financiamento, [data-section="simulacao"], form.simulador'
143
+ );
144
+
145
+ if (simulador) {
146
+ // Dispara ao 1º interact (foco em qualquer campo do simulador)
147
+ let simuladorFired = false;
148
+ simulador.addEventListener('focusin', () => {
149
+ if (simuladorFired) return;
150
+ simuladorFired = true;
151
+ cdpTrack.track('CustomizeProduct', {
152
+ contentName: 'Simulador de Financiamento — [NOME DO EMPREENDIMENTO]',
153
+ contentCategory: 'imovel',
154
+ funnel_stage: 'financing_simulation',
155
+ intentionLevel: 'comprador',
156
+ });
157
+ });
158
+
159
+ // Dispara também ao clicar em "Simular" / "Calcular"
160
+ simulador.querySelector('button[type="submit"], .btn-simular, .btn-calcular')?.addEventListener('click', () => {
161
+ const valorImovel = simulador.querySelector('input[name="valor"], #valor-imovel')?.value;
162
+ cdpTrack.track('CustomizeProduct', {
163
+ contentName: 'Simulação Concluída — [NOME DO EMPREENDIMENTO]',
164
+ contentCategory: 'imovel',
165
+ funnel_stage: 'financing_simulation',
166
+ intentionLevel: 'comprador',
167
+ value: valorImovel ? parseFloat(valorImovel.replace(/\D/g, '')) : undefined,
168
+ currency: 'BRL',
169
+ });
170
+ });
171
+ }
172
+ ```
173
+
174
+ ---
175
+
176
+ ### 2.6 AddToWishlist — Favoritar Imóvel
177
+ ```javascript
178
+ // Dispara quando usuário clica em favoritar / ícone de coração
179
+ document.querySelectorAll('.btn-favoritar, .icon-heart, [data-action="favoritar"], .favorito').forEach(el => {
180
+ el.addEventListener('click', () => {
181
+ cdpTrack.track('AddToWishlist', {
182
+ contentName: '[NOME DO EMPREENDIMENTO]',
183
+ contentCategory: 'imovel',
184
+ funnel_stage: 'wishlist',
185
+ });
186
+ });
187
+ });
188
+ ```
189
+
190
+ ---
191
+
192
+ ### 2.7 Contact — WhatsApp / Telefone
193
+ ```javascript
194
+ // WhatsApp
195
+ document.querySelectorAll('a[href*="wa.me"], a[href*="whatsapp.com"], .btn-whatsapp').forEach(el => {
196
+ el.addEventListener('click', () => {
197
+ cdpTrack.track('Contact', {
198
+ contentName: 'WhatsApp — [NOME DO EMPREENDIMENTO]',
199
+ contentCategory: 'imovel_whatsapp',
200
+ funnel_stage: 'whatsapp_click',
201
+ intentionLevel: 'comprador',
202
+ });
203
+ });
204
+ });
205
+
206
+ // Telefone
207
+ document.querySelectorAll('a[href^="tel:"], .btn-ligar, .btn-telefone').forEach(el => {
208
+ el.addEventListener('click', () => {
209
+ cdpTrack.track('Contact', {
210
+ contentName: 'Telefone — [NOME DO EMPREENDIMENTO]',
211
+ contentCategory: 'imovel_telefone',
212
+ funnel_stage: 'phone_click',
213
+ intentionLevel: 'comprador',
214
+ });
215
+ });
216
+ });
217
+ ```
218
+
219
+ ---
220
+
221
+ ### 2.8 Schedule — Calendário de Agendamento de Visita
222
+ ```javascript
223
+ // Dispara quando usuário CONFIRMA o agendamento (não ao abrir o calendário)
224
+ // Adaptar ao provider: Calendly, Google Calendar, formulário próprio
225
+
226
+ // Exemplo com Calendly:
227
+ window.addEventListener('message', (e) => {
228
+ if (e.data?.event === 'calendly.event_scheduled') {
229
+ cdpTrack.track('Schedule', {
230
+ contentName: 'Visita Agendada — [NOME DO EMPREENDIMENTO]',
231
+ contentCategory: 'imovel',
232
+ funnel_stage: 'schedule_confirmed',
233
+ intentionLevel: 'comprador',
234
+ // Dados do lead do Calendly (se disponíveis via payload):
235
+ email: e.data?.payload?.invitee?.email,
236
+ firstName: e.data?.payload?.invitee?.first_name,
237
+ });
238
+ }
239
+ });
240
+
241
+ // Exemplo com formulário próprio de agendamento:
242
+ document.querySelector('#form-agendamento')?.addEventListener('submit', async (e) => {
243
+ e.preventDefault();
244
+ const data = new FormData(e.target);
245
+ await cdpTrack.track('Schedule', {
246
+ contentName: 'Visita Agendada — [NOME DO EMPREENDIMENTO]',
247
+ contentCategory: 'imovel',
248
+ funnel_stage: 'schedule_confirmed',
249
+ intentionLevel: 'comprador',
250
+ email: data.get('email'),
251
+ phone: data.get('phone'),
252
+ firstName: data.get('nome')?.split(' ')[0],
253
+ });
254
+ e.target.submit();
255
+ });
256
+ ```
257
+
258
+ ---
259
+
260
+ ### 2.9 Lead — Formulário Principal de Interesse
261
+ ```javascript
262
+ document.querySelector('#form-interesse, #form-lead, form.form-contato')?.addEventListener('submit', async (e) => {
263
+ e.preventDefault();
264
+
265
+ await cdpTrack.track('Lead', {
266
+ // PII — enviados hasheados pelo Worker
267
+ email: e.target.email?.value?.trim(),
268
+ phone: e.target.phone?.value?.trim() || e.target.telefone?.value?.trim(),
269
+ firstName: e.target.nome?.value?.split(' ')[0]?.trim(),
270
+ lastName: e.target.nome?.value?.split(' ').slice(1).join(' ')?.trim(),
271
+
272
+ // Contexto
273
+ contentName: '[NOME DO EMPREENDIMENTO]',
274
+ contentCategory: 'imovel',
275
+ intentionLevel: 'comprador',
276
+ funnel_stage: 'lead_form',
277
+
278
+ // UTMs capturados pelo SDK automaticamente
279
+ // Coordenadas do imóvel para distância geoespacial no Worker:
280
+ property_lat: -23.5505,
281
+ property_lng: -46.6333,
282
+ });
283
+
284
+ // Redirecionar para obrigado
285
+ window.location.href = '/obrigado';
286
+ });
287
+ ```
288
+
289
+ ---
290
+
291
+ ## 📊 LTV por Evento — O que o Worker calcula
292
+
293
+ | Evento | Bonus LTV Score | Multiplicador Valor |
294
+ |---|---|---|
295
+ | `Lead` (utm_source=facebook, intention=comprador) | ~65–80 pts | 3.5× → **High** |
296
+ | `CustomizeProduct` | +15 pts automático | Score sobe para High |
297
+ | `FindLocation` | +10 pts automático | Puxa Medium → High |
298
+ | `AddToWishlist` | +8 pts automático | Sinal de retargeting |
299
+ | `Schedule` (visita confirmada) | intention=comprador → +20 pts | Máximo High |
300
+ | `Contact` (WhatsApp) | Sem LTV (evento de sinal) | — |
301
+
302
+ ---
303
+
304
+ ## 🔄 FLUXO COMPLETO DO LEAD IMOBILIÁRIO
305
+
306
+ ```
307
+ Usuário chega na landing
308
+
309
+ ├─ PageView → sinal de alcance
310
+ ├─ ViewContent (galeria) → interesse qualificado
311
+ ├─ video_50 (tour) → engajamento profundo
312
+ ├─ FindLocation (mapa) → intenção de visita física (+10 LTV)
313
+ ├─ CustomizeProduct (simulador) → intenção máxima (+15 LTV)
314
+ ├─ Contact (WhatsApp) → ação de contato
315
+ ├─ Schedule (agendamento) → visita confirmada
316
+ └─ Lead (formulário) → conversão principal
317
+
318
+
319
+ Worker: LTV score ~75-90 → High → valor 3.5× injetado
320
+
321
+
322
+ Meta CAPI + GA4 + TikTok recebem Lead com value=R$689
323
+
324
+
325
+ Algoritmo de Meta aprende a buscar mais leads de alto valor
326
+ ```
327
+
328
+ ---
329
+
330
+ ## 📋 CHECKLIST DE IMPLEMENTAÇÃO
331
+
332
+ - [ ] SDK `cdpTrack.js` carregando no `<head>`
333
+ - [ ] `PageView` disparando (automático)
334
+ - [ ] `ViewContent` na galeria
335
+ - [ ] `FindLocation` no mapa e botão "Como chegar"
336
+ - [ ] Vídeo/tour instrumentado (`video_25`, `video_75`, `video_complete`)
337
+ - [ ] `CustomizeProduct` no simulador de financiamento
338
+ - [ ] `AddToWishlist` no botão de favoritar
339
+ - [ ] `Contact` nos botões de WhatsApp e telefone
340
+ - [ ] `Schedule` no calendário (Calendly ou formulário próprio)
341
+ - [ ] `Lead` no formulário principal com PII e `property_lat/lng`
342
+ - [ ] Verificar `/health` retornando `d1: ok, kv: ok, ai: ok`
343
+ - [ ] Testar evento `Lead` no Meta Events Manager → Test Events
344
+ - [ ] Confirmar LTV na resposta JSON do `/track` (`class: "High"`)