cdp-edge 1.2.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 (128) hide show
  1. package/README.md +367 -0
  2. package/bin/cdp-edge.js +61 -0
  3. package/contracts/api-versions.json +368 -0
  4. package/dist/commands/analyze.js +52 -0
  5. package/dist/commands/infra.js +54 -0
  6. package/dist/commands/install.js +168 -0
  7. package/dist/commands/server.js +174 -0
  8. package/dist/commands/setup.js +123 -0
  9. package/dist/commands/validate.js +84 -0
  10. package/dist/index.js +12 -0
  11. package/docs/CI-CD-SETUP.md +217 -0
  12. package/docs/PixelBuilder-Documentacao-Completa (2).docx +0 -0
  13. package/docs/events-reference.md +359 -0
  14. package/docs/installation.md +155 -0
  15. package/docs/quick-start.md +185 -0
  16. package/docs/sdk-reference.md +371 -0
  17. package/docs/whatsapp-ctwa.md +209 -0
  18. package/extracted-skill/tracking-events-generator/INDEX.md +94 -0
  19. package/extracted-skill/tracking-events-generator/INSTALACAO-CDPEDGE.md +58 -0
  20. package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +594 -0
  21. package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +412 -0
  22. package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +333 -0
  23. package/extracted-skill/tracking-events-generator/SKILL.md +257 -0
  24. package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -0
  25. package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +54 -0
  26. package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +1304 -0
  27. package/extracted-skill/tracking-events-generator/agents/bing-agent.md +76 -0
  28. package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +264 -0
  29. package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +149 -0
  30. package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +2077 -0
  31. package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +1419 -0
  32. package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +456 -0
  33. package/extracted-skill/tracking-events-generator/agents/database-agent.md +667 -0
  34. package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1455 -0
  35. package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +224 -0
  36. package/extracted-skill/tracking-events-generator/agents/email-agent.md +61 -0
  37. package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +52 -0
  38. package/extracted-skill/tracking-events-generator/agents/google-agent.md +109 -0
  39. package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +365 -0
  40. package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +643 -0
  41. package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +62 -0
  42. package/extracted-skill/tracking-events-generator/agents/localization-agent.md +55 -0
  43. package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +59 -0
  44. package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +900 -0
  45. package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +1922 -0
  46. package/extracted-skill/tracking-events-generator/agents/memory-agent.json +109 -0
  47. package/extracted-skill/tracking-events-generator/agents/memory-agent.md +703 -0
  48. package/extracted-skill/tracking-events-generator/agents/meta-agent.md +110 -0
  49. package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +255 -0
  50. package/extracted-skill/tracking-events-generator/agents/performance-agent.md +1157 -0
  51. package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +1432 -0
  52. package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +310 -0
  53. package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +849 -0
  54. package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +250 -0
  55. package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +313 -0
  56. package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1752 -0
  57. package/extracted-skill/tracking-events-generator/agents/server-tracking.md +1188 -0
  58. package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +383 -0
  59. package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +111 -0
  60. package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +364 -0
  61. package/extracted-skill/tracking-events-generator/agents/validator-agent.md +267 -0
  62. package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +69 -0
  63. package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +76 -0
  64. package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +699 -0
  65. package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +422 -0
  66. package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -0
  67. package/extracted-skill/tracking-events-generator/cdpTrack.js +641 -0
  68. package/extracted-skill/tracking-events-generator/contracts/api-versions.json +368 -0
  69. package/extracted-skill/tracking-events-generator/docs/guia-cloudflare-iniciante.md +107 -0
  70. package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -0
  71. package/extracted-skill/tracking-events-generator/evals/evals.json +235 -0
  72. package/extracted-skill/tracking-events-generator/integration-test.js +497 -0
  73. package/extracted-skill/tracking-events-generator/knowledge-base.md +2894 -0
  74. package/extracted-skill/tracking-events-generator/micro-events.js +992 -0
  75. package/extracted-skill/tracking-events-generator/models/captura-de-lead.md +78 -0
  76. package/extracted-skill/tracking-events-generator/models/captura-lead-evento-externo.md +99 -0
  77. package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +111 -0
  78. package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +672 -0
  79. package/extracted-skill/tracking-events-generator/models/pagina-obrigado.md +55 -0
  80. package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -0
  81. package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -0
  82. package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -0
  83. package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +68 -0
  84. package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -0
  85. package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -0
  86. package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -0
  87. package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -0
  88. package/extracted-skill/tracking-events-generator/models/scenarios/real-estate-logic.md +50 -0
  89. package/extracted-skill/tracking-events-generator/models/scenarios/sales-page-logic.md +50 -0
  90. package/extracted-skill/tracking-events-generator/models/trafego-direto.md +582 -0
  91. package/extracted-skill/tracking-events-generator/models/webinar-registration.md +63 -0
  92. package/extracted-skill/tracking-events-generator/tracking.config.js +46 -0
  93. package/extracted-skill/tracking-events-generator/walkthrough.md +26 -0
  94. package/package.json +75 -0
  95. package/server-edge-tracker/INSTALAR.md +328 -0
  96. package/server-edge-tracker/migrate-new-db.sql +137 -0
  97. package/server-edge-tracker/migrate-v2.sql +16 -0
  98. package/server-edge-tracker/migrate-v3.sql +6 -0
  99. package/server-edge-tracker/migrate-v4.sql +18 -0
  100. package/server-edge-tracker/migrate-v5.sql +17 -0
  101. package/server-edge-tracker/migrate-v6.sql +24 -0
  102. package/server-edge-tracker/migrate.sql +111 -0
  103. package/server-edge-tracker/schema.sql +265 -0
  104. package/server-edge-tracker/worker.js +2574 -0
  105. package/server-edge-tracker/wrangler.toml +85 -0
  106. package/templates/afiliado-sem-landing.md +312 -0
  107. package/templates/captura-de-lead.md +78 -0
  108. package/templates/captura-lead-evento-externo.md +99 -0
  109. package/templates/checkout-proprio.md +111 -0
  110. package/templates/install/.claude/commands/cdp.md +1 -0
  111. package/templates/install/CLAUDE.md +65 -0
  112. package/templates/linkedin/tag-template.js +46 -0
  113. package/templates/multi-step-checkout.md +673 -0
  114. package/templates/pagina-obrigado.md +55 -0
  115. package/templates/pinterest/conversions-api-template.js +144 -0
  116. package/templates/pinterest/event-mappings.json +48 -0
  117. package/templates/pinterest/tag-template.js +28 -0
  118. package/templates/quiz-funnel.md +68 -0
  119. package/templates/reddit/conversions-api-template.js +205 -0
  120. package/templates/reddit/event-mappings.json +56 -0
  121. package/templates/reddit/pixel-template.js +46 -0
  122. package/templates/scenarios/behavior-engine.js +402 -0
  123. package/templates/scenarios/real-estate-logic.md +50 -0
  124. package/templates/scenarios/sales-page-logic.md +50 -0
  125. package/templates/spotify/pixel-template.js +46 -0
  126. package/templates/trafego-direto.md +582 -0
  127. package/templates/vsl-page.md +292 -0
  128. package/templates/webinar-registration.md +63 -0
@@ -0,0 +1,292 @@
1
+ # Template: Página VSL — Video Sales Letter
2
+ > Página de vendas centrada em vídeo (YouTube, Vimeo ou player nativo).
3
+ > O vídeo é o principal elemento de conversão — tudo gira em torno de quem assistiu quanto.
4
+ > Infraestrutura: Cloudflare Workers + D1 (100% Native)
5
+
6
+ **Quando usar este modelo:**
7
+ - VSL (Video Sales Letter) com vídeo como principal argumento de venda
8
+ - Webclasse / Aula gratuita antes do pitch
9
+ - Lançamento com vídeo de antecipação + oferta no final
10
+ - Série de vídeos com desbloqueio progressivo
11
+
12
+ **Diferença dos outros modelos:**
13
+ - Engajamento medido por **progresso de vídeo**, não apenas por scroll
14
+ - `VideoDropout` registra o **segundo exato** em que cada usuário parou de assistir
15
+ - CTA só aparece/destrava após threshold de vídeo (ex: 75%)
16
+ - Lead capture disparado **dentro do vídeo** (ex: ao atingir 50% do progresso)
17
+
18
+ ---
19
+
20
+ ## Arquitetura Técnica
21
+
22
+ ```
23
+ ┌─────────────────────────────────────────────────────────────────┐
24
+ │ Browser: Página VSL │
25
+ │ │
26
+ │ 1. PageView → Worker (entrada do usuário) │
27
+ │ 2. VideoPlay → Worker (interesse confirmado) │
28
+ │ 3. VideoProgress 25/50/75/100 → Worker (qualificação) │
29
+ │ 4. VideoDropout → Worker (segundo exato de abandono) │
30
+ │ 5. Lead (se formulário aparecer após threshold) → Worker │
31
+ │ 6. InitiateCheckout (CTA destravado pelo vídeo) → Worker │
32
+ └─────────────────────────────────────────────────────────────────┘
33
+
34
+
35
+ ┌─────────────────────────────────────────────────────────────────┐
36
+ │ Cloudflare Worker │
37
+ │ │
38
+ │ /api/tracking: │
39
+ │ VideoProgress 75% → Meta: ViewContent + TikTok: ViewContent │
40
+ │ Lead → Meta: Lead + GA4: generate_lead + TikTok: SubmitForm │
41
+ │ InitiateCheckout → Meta + GA4 + TikTok │
42
+ │ │
43
+ │ D1: behavioral_events (dropout_percent, dropout_second) │
44
+ └─────────────────────────────────────────────────────────────────┘
45
+ ```
46
+
47
+ ---
48
+
49
+ ## Passo 1 — Instalação do SDK
50
+
51
+ ```html
52
+ <!-- No <head> -->
53
+ <script type="module">
54
+ import { init, track, trackLead } from '/js/cdpTrack.js';
55
+ import { getVideoSummary } from '/js/micro-events.js';
56
+
57
+ window.cdpGetVideoSummary = getVideoSummary;
58
+ await init();
59
+ </script>
60
+ ```
61
+
62
+ O `initMicroEvents()` é chamado automaticamente dentro de `init()` e detecta todos os vídeos da página.
63
+
64
+ ---
65
+
66
+ ## Passo 2 — Marcar os Vídeos para Tracking
67
+
68
+ ### YouTube Embed
69
+ ```html
70
+ <!-- Adicionar id para identificação -->
71
+ <iframe
72
+ id="vsl-main"
73
+ src="https://www.youtube.com/embed/XXXXXXXXX?enablejsapi=1"
74
+ data-video-id="vsl-principal"
75
+ allow="autoplay"
76
+ allowfullscreen>
77
+ </iframe>
78
+ ```
79
+
80
+ > O `enablejsapi=1` é necessário. O SDK injeta automaticamente se não estiver na URL.
81
+
82
+ ### Vimeo Embed
83
+ ```html
84
+ <iframe
85
+ id="vsl-main"
86
+ src="https://player.vimeo.com/video/XXXXXXXXX"
87
+ data-video-id="vsl-principal"
88
+ allow="autoplay; fullscreen">
89
+ </iframe>
90
+ ```
91
+
92
+ ### Player HTML5 Nativo
93
+ ```html
94
+ <video
95
+ id="vsl-main"
96
+ data-video-id="vsl-principal"
97
+ controls
98
+ preload="metadata">
99
+ <source src="/videos/vsl.mp4" type="video/mp4">
100
+ </video>
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Passo 3 — Lógica de Desbloqueio de CTA por Progresso de Vídeo
106
+
107
+ A técnica mais eficaz: o botão de compra fica oculto e só aparece quando o usuário atinge um threshold do vídeo.
108
+
109
+ ```html
110
+ <!-- CTA inicialmente oculto -->
111
+ <div id="cta-container" style="display:none; opacity:0; transition: opacity 0.5s;">
112
+ <a href="https://pay.hotmart.com/XXXXXX" class="btn-comprar">
113
+ Quero Garantir Minha Vaga →
114
+ </a>
115
+ </div>
116
+
117
+ <script>
118
+ // Ouve eventos do cdpTrack para destravar o CTA
119
+ window.addEventListener('cdp:VideoProgress', (e) => {
120
+ const { progress_percent, video_id } = e.detail;
121
+
122
+ // Destravar CTA ao atingir 75% do vídeo
123
+ if (progress_percent >= 75 && video_id === 'vsl-principal') {
124
+ const cta = document.getElementById('cta-container');
125
+ cta.style.display = 'block';
126
+ setTimeout(() => { cta.style.opacity = '1'; }, 100);
127
+
128
+ // Disparar ViewContent: sinal forte de intenção
129
+ window.cdpTrack.track('ViewContent', {
130
+ content_name: 'VSL 75% - CTA Destravado',
131
+ content_type: 'video',
132
+ video_progress: 75
133
+ });
134
+ }
135
+ });
136
+
137
+ // Formulário de lead que aparece a 50%
138
+ window.addEventListener('cdp:VideoProgress', (e) => {
139
+ if (e.detail.progress_percent >= 50 && e.detail.video_id === 'vsl-principal') {
140
+ document.getElementById('lead-form-container')?.classList.remove('hidden');
141
+ }
142
+ });
143
+ </script>
144
+ ```
145
+
146
+ Para emitir o evento custom, adicionar no dispatcher de `micro-events.js` (ou escutar via worker callback):
147
+
148
+ ```javascript
149
+ // Em micro-events.js — dispatchEvent já chama cdpTrack.track()
150
+ // Para emitir evento DOM customizado em paralelo:
151
+ function dispatchEvent(eventName, data = {}) {
152
+ if (typeof cdpTrack !== 'undefined' && cdpTrack.track) {
153
+ cdpTrack.track(eventName, data);
154
+ }
155
+ // Evento DOM para código da página reagir
156
+ window.dispatchEvent(new CustomEvent(`cdp:${eventName}`, { detail: data }));
157
+ }
158
+ ```
159
+
160
+ ---
161
+
162
+ ## Passo 4 — Mapeamento de Eventos de Vídeo para Plataformas
163
+
164
+ | Evento CDP | Meta CAPI | GA4 | TikTok | Gatilho |
165
+ |---|---|---|---|---|
166
+ | VideoPlay | — | video_start | — | Usuário deu play |
167
+ | VideoProgress 25% | — | video_progress | — | Assistiu 25% |
168
+ | VideoProgress 50% | ViewContent | video_progress | ViewContent | Assistiu 50% |
169
+ | VideoProgress 75% | ViewContent | video_progress | ViewContent | Assistiu 75% — CTA aparece |
170
+ | VideoProgress 100% | ViewContent | video_complete | ViewContent | Assistiu tudo |
171
+ | VideoDropout | — | (behavioral) | — | Parou antes do fim |
172
+ | Lead | Lead | generate_lead | SubmitForm | Formulário preenchido no vídeo |
173
+ | InitiateCheckout | InitiateCheckout | begin_checkout | InitiateCheckout | Clicou no CTA |
174
+
175
+ ### Configurar no Worker (`worker.js`) — handler de VideoProgress:
176
+
177
+ ```javascript
178
+ // Dentro do handler /api/tracking, adicionar case para VideoProgress
179
+ case 'VideoProgress':
180
+ const vp = payload.behavioral_data?.progress_percent || 0;
181
+ // Só disparar plataformas em thresholds significativos
182
+ if (vp >= 50) {
183
+ await Promise.allSettled([
184
+ sendMetaCapi(env, 'ViewContent', payload, {
185
+ content_name: `VSL ${vp}%`,
186
+ content_type: 'video',
187
+ }),
188
+ sendGA4(env, 'video_progress', payload, { percent: vp }),
189
+ sendTikTokEvents(env, 'ViewContent', payload),
190
+ ]);
191
+ }
192
+ // Sempre salvar no D1 (para dropout heatmap)
193
+ await saveVideoEvent(env.DB, payload);
194
+ break;
195
+
196
+ case 'VideoDropout':
197
+ // Registrar no D1 para análise de abandono por minuto
198
+ await env.DB.prepare(`
199
+ INSERT INTO behavioral_events (uid, event_type, event_data, created_at)
200
+ VALUES (?, 'VideoDropout', ?, datetime('now'))
201
+ `).bind(
202
+ payload.user_id,
203
+ JSON.stringify({
204
+ video_id: payload.behavioral_data.video_id,
205
+ dropout_percent: payload.behavioral_data.dropout_percent,
206
+ dropout_second: payload.behavioral_data.dropout_second,
207
+ })
208
+ ).run();
209
+ break;
210
+ ```
211
+
212
+ ---
213
+
214
+ ## Passo 5 — Dashboard de Dropout Heatmap
215
+
216
+ Consulta D1 para ver onde os usuários abandonam o vídeo:
217
+
218
+ ```sql
219
+ -- Distribuição de abandono por segmento de 10%
220
+ SELECT
221
+ ROUND(CAST(json_extract(event_data, '$.dropout_percent') AS INTEGER) / 10.0) * 10 AS percent_bucket,
222
+ COUNT(*) AS abandonos,
223
+ AVG(json_extract(event_data, '$.dropout_second')) AS media_segundo
224
+ FROM behavioral_events
225
+ WHERE event_type = 'VideoDropout'
226
+ AND json_extract(event_data, '$.video_id') = 'vsl-principal'
227
+ AND created_at >= datetime('now', '-7 days')
228
+ GROUP BY percent_bucket
229
+ ORDER BY percent_bucket;
230
+
231
+ -- Taxa de conclusão por cohort de tráfego
232
+ SELECT
233
+ l.utm_source,
234
+ COUNT(DISTINCT b.uid) AS viewers,
235
+ SUM(CASE WHEN json_extract(b.event_data, '$.dropout_percent') >= 75 THEN 1 ELSE 0 END) AS chegaram_75,
236
+ ROUND(
237
+ 100.0 * SUM(CASE WHEN json_extract(b.event_data, '$.dropout_percent') >= 75 THEN 1 ELSE 0 END)
238
+ / COUNT(DISTINCT b.uid), 1
239
+ ) AS taxa_conclusao_75pct
240
+ FROM behavioral_events b
241
+ LEFT JOIN leads l ON l.user_id = b.uid
242
+ WHERE b.event_type = 'VideoDropout'
243
+ AND b.created_at >= datetime('now', '-30 days')
244
+ GROUP BY l.utm_source
245
+ ORDER BY viewers DESC;
246
+ ```
247
+
248
+ ---
249
+
250
+ ## Checklist de Verificação
251
+
252
+ ```
253
+ [ ] SDK instalado no <head> com type="module"
254
+ [ ] Vídeo com id ou data-video-id para identificação
255
+ [ ] enablejsapi=1 na URL do YouTube (ou deixar o SDK injetar)
256
+ [ ] CTA oculto inicialmente, destravado por VideoProgress
257
+ [ ] worker.js: case 'VideoProgress' e 'VideoDropout' implementados
258
+ [ ] D1: tabela behavioral_events existente (migrate-v2.sql ou superior)
259
+ [ ] Testar: abrir o vídeo, pausar a 30%, verificar VideoDropout no D1
260
+ [ ] Testar: assistir até 75%, verificar CTA aparecendo + ViewContent no D1
261
+ [ ] Query de dropout heatmap retornando dados
262
+ ```
263
+
264
+ ---
265
+
266
+ ## Fluxo Completo de Uma Sessão VSL
267
+
268
+ ```
269
+ 1. Usuário chega via anúncio Meta
270
+ └─ cdp_uid gerado (cookie 365 dias)
271
+ └─ UTMs salvos (_cdp_aff no localStorage — fallback de afiliado)
272
+ └─ PageView → Worker → D1 + Meta PageView + GA4 page_view
273
+
274
+ 2. Usuário dá play no vídeo
275
+ └─ VideoPlay → Worker → D1 behavioral_events
276
+
277
+ 3. Usuário assiste até 50%
278
+ └─ VideoProgress 25% → Worker
279
+ └─ VideoProgress 50% → Worker → Meta ViewContent + Formulário de lead aparece
280
+
281
+ 4. Usuário para de assistir a 62% (abandono)
282
+ └─ VideoPause → VideoDropout(62%, segundo 743) → Worker → D1
283
+
284
+ 5. (Outro cenário) Usuário assiste até 75%
285
+ └─ VideoProgress 75% → Worker → Meta ViewContent + CTA destrava
286
+ └─ Usuário clica no CTA → InitiateCheckout → Worker
287
+ └─ Usuário compra na Hotmart → webhook → Worker → Meta Purchase CAPI
288
+
289
+ 6. Otimização
290
+ └─ Dashboard mostra: 68% dos usuários abandonam entre 45-60% do vídeo
291
+ └─ Ação: testar pitch antecipado no minuto 40
292
+ ```
@@ -0,0 +1,63 @@
1
+ # Modelo: Inscrição em Webinar (Cloudflare Native)
2
+
3
+ Este modelo é destinado a páginas de inscrição em webinars, focando na captura de leads e no início da jornada de conteúdo ao vivo.
4
+
5
+ ---
6
+
7
+ ## 🏗️ ARQUITETURA TÉCNICA (Quantum Tier)
8
+
9
+ O rastreamento segue o fluxo de registro e confirmação:
10
+ 1. **Página de Inscrição**: Captura de dados pessoais e disparo do evento `CompleteRegistration`.
11
+ 2. **Servidor (Worker)**: Hashing SHA-256 e persistência no banco D1.
12
+ 3. **Database (D1)**: Armazena o lead com a categoria de webinar para segmentação futura.
13
+
14
+ ---
15
+
16
+ ## 📘 EVENTOS PRINCIPAIS
17
+
18
+ | Evento | Gatilho | PII (Dados Pessoais) |
19
+ |---|---|---|
20
+ | **PageView** | Acesso à página | Dados de navegação |
21
+ | **CompleteRegistration** | Sucesso na inscrição | E-mail, Telefone, Nome |
22
+
23
+ ---
24
+
25
+ ## 🛠️ PASSO 1: CONFIGURAÇÃO DO SITE
26
+
27
+ ### 1.1 Captura de Inscrição
28
+ Este código deve ser vinculado ao evento de sucesso do formulário de inscrição.
29
+
30
+ ```javascript
31
+ document.querySelector('#form-webinar').addEventListener('submit', async (e) => {
32
+ e.preventDefault();
33
+
34
+ const registrationData = {
35
+ email: e.target.email.value,
36
+ phone: e.target.phone.value,
37
+ webinar_id: 'webinar_lancamento_01',
38
+ event_id: cdpTrack.generateId()
39
+ };
40
+
41
+ // Envio para o Worker
42
+ await cdpTrack.track('CompleteRegistration', registrationData);
43
+
44
+ e.target.submit();
45
+ });
46
+ ```
47
+
48
+ ---
49
+
50
+ ## ⚡ PASSO 2: SERVIDOR (CLOUDFLARE WORKER)
51
+
52
+ O Worker executa:
53
+ - **Hashing**: Proteção de dados via SHA-256.
54
+ - **D1 Store**: Gravação do lead e vinculação de UTMs para análise de ROI.
55
+ - **API Dispatch**: Envio para Meta CAPI (v22.0) e TikTok Events API (v1.3).
56
+
57
+ ---
58
+
59
+ ## ✅ VALIDAÇÃO TÉCNICA
60
+
61
+ - **Deduplicação**: Verifique se o `event_id` é único.
62
+ - **Match Quality**: Conferir se e-mail e telefone estão sendo enviados hasheados pelo servidor.
63
+ - **Persistência**: O lead deve aparecer no D1 com o identificador do webinar correspondente.