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.
- package/README.md +367 -0
- package/bin/cdp-edge.js +61 -0
- package/contracts/api-versions.json +368 -0
- package/dist/commands/analyze.js +52 -0
- package/dist/commands/infra.js +54 -0
- package/dist/commands/install.js +168 -0
- package/dist/commands/server.js +174 -0
- package/dist/commands/setup.js +123 -0
- package/dist/commands/validate.js +84 -0
- package/dist/index.js +12 -0
- package/docs/CI-CD-SETUP.md +217 -0
- package/docs/PixelBuilder-Documentacao-Completa (2).docx +0 -0
- package/docs/events-reference.md +359 -0
- package/docs/installation.md +155 -0
- package/docs/quick-start.md +185 -0
- package/docs/sdk-reference.md +371 -0
- package/docs/whatsapp-ctwa.md +209 -0
- package/extracted-skill/tracking-events-generator/INDEX.md +94 -0
- package/extracted-skill/tracking-events-generator/INSTALACAO-CDPEDGE.md +58 -0
- package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +594 -0
- package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +412 -0
- package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +333 -0
- package/extracted-skill/tracking-events-generator/SKILL.md +257 -0
- package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -0
- package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +54 -0
- package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +1304 -0
- package/extracted-skill/tracking-events-generator/agents/bing-agent.md +76 -0
- package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +264 -0
- package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +149 -0
- package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +2077 -0
- package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +1419 -0
- package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +456 -0
- package/extracted-skill/tracking-events-generator/agents/database-agent.md +667 -0
- package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1455 -0
- package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +224 -0
- package/extracted-skill/tracking-events-generator/agents/email-agent.md +61 -0
- package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +52 -0
- package/extracted-skill/tracking-events-generator/agents/google-agent.md +109 -0
- package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +365 -0
- package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +643 -0
- package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +62 -0
- package/extracted-skill/tracking-events-generator/agents/localization-agent.md +55 -0
- package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +59 -0
- package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +900 -0
- package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +1922 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.json +109 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.md +703 -0
- package/extracted-skill/tracking-events-generator/agents/meta-agent.md +110 -0
- package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +255 -0
- package/extracted-skill/tracking-events-generator/agents/performance-agent.md +1157 -0
- package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +1432 -0
- package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +310 -0
- package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +849 -0
- package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +250 -0
- package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +313 -0
- package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1752 -0
- package/extracted-skill/tracking-events-generator/agents/server-tracking.md +1188 -0
- package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +383 -0
- package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +111 -0
- package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +364 -0
- package/extracted-skill/tracking-events-generator/agents/validator-agent.md +267 -0
- package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +69 -0
- package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +76 -0
- package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +699 -0
- package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +422 -0
- package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -0
- package/extracted-skill/tracking-events-generator/cdpTrack.js +641 -0
- package/extracted-skill/tracking-events-generator/contracts/api-versions.json +368 -0
- package/extracted-skill/tracking-events-generator/docs/guia-cloudflare-iniciante.md +107 -0
- package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -0
- package/extracted-skill/tracking-events-generator/evals/evals.json +235 -0
- package/extracted-skill/tracking-events-generator/integration-test.js +497 -0
- package/extracted-skill/tracking-events-generator/knowledge-base.md +2894 -0
- package/extracted-skill/tracking-events-generator/micro-events.js +992 -0
- package/extracted-skill/tracking-events-generator/models/captura-de-lead.md +78 -0
- package/extracted-skill/tracking-events-generator/models/captura-lead-evento-externo.md +99 -0
- package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +111 -0
- package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +672 -0
- package/extracted-skill/tracking-events-generator/models/pagina-obrigado.md +55 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -0
- package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +68 -0
- package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -0
- package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -0
- package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/real-estate-logic.md +50 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/sales-page-logic.md +50 -0
- package/extracted-skill/tracking-events-generator/models/trafego-direto.md +582 -0
- package/extracted-skill/tracking-events-generator/models/webinar-registration.md +63 -0
- package/extracted-skill/tracking-events-generator/tracking.config.js +46 -0
- package/extracted-skill/tracking-events-generator/walkthrough.md +26 -0
- package/package.json +75 -0
- package/server-edge-tracker/INSTALAR.md +328 -0
- package/server-edge-tracker/migrate-new-db.sql +137 -0
- package/server-edge-tracker/migrate-v2.sql +16 -0
- package/server-edge-tracker/migrate-v3.sql +6 -0
- package/server-edge-tracker/migrate-v4.sql +18 -0
- package/server-edge-tracker/migrate-v5.sql +17 -0
- package/server-edge-tracker/migrate-v6.sql +24 -0
- package/server-edge-tracker/migrate.sql +111 -0
- package/server-edge-tracker/schema.sql +265 -0
- package/server-edge-tracker/worker.js +2574 -0
- package/server-edge-tracker/wrangler.toml +85 -0
- package/templates/afiliado-sem-landing.md +312 -0
- package/templates/captura-de-lead.md +78 -0
- package/templates/captura-lead-evento-externo.md +99 -0
- package/templates/checkout-proprio.md +111 -0
- package/templates/install/.claude/commands/cdp.md +1 -0
- package/templates/install/CLAUDE.md +65 -0
- package/templates/linkedin/tag-template.js +46 -0
- package/templates/multi-step-checkout.md +673 -0
- package/templates/pagina-obrigado.md +55 -0
- package/templates/pinterest/conversions-api-template.js +144 -0
- package/templates/pinterest/event-mappings.json +48 -0
- package/templates/pinterest/tag-template.js +28 -0
- package/templates/quiz-funnel.md +68 -0
- package/templates/reddit/conversions-api-template.js +205 -0
- package/templates/reddit/event-mappings.json +56 -0
- package/templates/reddit/pixel-template.js +46 -0
- package/templates/scenarios/behavior-engine.js +402 -0
- package/templates/scenarios/real-estate-logic.md +50 -0
- package/templates/scenarios/sales-page-logic.md +50 -0
- package/templates/spotify/pixel-template.js +46 -0
- package/templates/trafego-direto.md +582 -0
- package/templates/vsl-page.md +292 -0
- 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.
|