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,371 @@
|
|
|
1
|
+
# CDP Edge — SDK Reference
|
|
2
|
+
> API pública do `cdpTrack.js` — todas as funções, parâmetros e exemplos.
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Instalação
|
|
7
|
+
|
|
8
|
+
```html
|
|
9
|
+
<!-- No <head> -->
|
|
10
|
+
<script type="module">
|
|
11
|
+
import { init } from '/js/cdpTrack.js';
|
|
12
|
+
await init();
|
|
13
|
+
</script>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Após `init()`, todas as funções ficam disponíveis em `window.cdpTrack`.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## init()
|
|
21
|
+
|
|
22
|
+
Inicializa o SDK completo. Deve ser chamado uma vez por página.
|
|
23
|
+
|
|
24
|
+
```javascript
|
|
25
|
+
import { init } from '/js/cdpTrack.js';
|
|
26
|
+
await init();
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**O que faz internamente:**
|
|
30
|
+
1. Google Consent Mode v2 (defaults negados — LGPD compliant)
|
|
31
|
+
2. Anti-blocking (retry automático com beacon fallback)
|
|
32
|
+
3. Micro-events (scroll, tempo, vídeo, clique, hover)
|
|
33
|
+
4. Auto-captura de formulários de lead
|
|
34
|
+
5. Salva contexto de afiliado no localStorage (UTM resurrection)
|
|
35
|
+
6. passCheckoutParams (injeta `_cdp_uid` nos links de checkout)
|
|
36
|
+
7. Behavior Engine (scoring avançado)
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## track(eventName, data?)
|
|
41
|
+
|
|
42
|
+
Função principal. Envia qualquer evento para o Worker.
|
|
43
|
+
|
|
44
|
+
```javascript
|
|
45
|
+
await window.cdpTrack.track('EventName', {
|
|
46
|
+
// dados do evento
|
|
47
|
+
});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Parâmetros:**
|
|
51
|
+
|
|
52
|
+
| Parâmetro | Tipo | Descrição |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| `eventName` | `string` | Nome do evento (ver Events Reference) |
|
|
55
|
+
| `data` | `object` | Dados do evento (opcional) |
|
|
56
|
+
|
|
57
|
+
**O que é enviado automaticamente** (sem precisar passar):
|
|
58
|
+
- `event_id` — UUID único gerado no browser
|
|
59
|
+
- `user_id` — `_cdp_uid` (cookie first-party)
|
|
60
|
+
- `session_id` — sessionStorage ID
|
|
61
|
+
- `utms` — utm_source, utm_medium, utm_campaign, utm_content, utm_term
|
|
62
|
+
- `click_ids` — fbp, fbc, gclid, wbraid, gbraid, ttclid, rclid
|
|
63
|
+
- `page_url` — `window.location.href`
|
|
64
|
+
- `referrer` — `document.referrer`
|
|
65
|
+
- `user_agent` — `navigator.userAgent`
|
|
66
|
+
- `behavioral_data` — engagement score completo
|
|
67
|
+
|
|
68
|
+
**Retorno:**
|
|
69
|
+
```javascript
|
|
70
|
+
{
|
|
71
|
+
success: true,
|
|
72
|
+
event_id: "1711234567890_abc123def",
|
|
73
|
+
result: { ... }
|
|
74
|
+
}
|
|
75
|
+
// ou em caso de erro:
|
|
76
|
+
{
|
|
77
|
+
success: false,
|
|
78
|
+
error: "mensagem de erro",
|
|
79
|
+
event_id: "...",
|
|
80
|
+
attempts: 3
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## trackLead(userData, form?)
|
|
87
|
+
|
|
88
|
+
Atalho para captura de lead. Aceita dados crus — o Worker faz SHA256.
|
|
89
|
+
|
|
90
|
+
```javascript
|
|
91
|
+
await window.cdpTrack.trackLead({
|
|
92
|
+
email: 'fulano@exemplo.com',
|
|
93
|
+
phone: '11999998888',
|
|
94
|
+
firstName: 'João',
|
|
95
|
+
lastName: 'Silva'
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// Com formulário HTML (extrai campos automaticamente)
|
|
99
|
+
const form = document.querySelector('#form-lead');
|
|
100
|
+
await window.cdpTrack.trackLead({}, form);
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Parâmetros aceitos:**
|
|
104
|
+
|
|
105
|
+
| Campo | Tipo | Normalização automática |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| `email` | string | lowercase + trim |
|
|
108
|
+
| `phone` | string | DDI 55 + somente dígitos |
|
|
109
|
+
| `firstName` | string | Title Case |
|
|
110
|
+
| `lastName` | string | Title Case |
|
|
111
|
+
| `city` | string | lowercase + sem acentos |
|
|
112
|
+
| `state` | string | uppercase |
|
|
113
|
+
| `zip` | string | somente dígitos |
|
|
114
|
+
| `country` | string | lowercase |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## trackPurchase(orderData)
|
|
119
|
+
|
|
120
|
+
Atalho para compra confirmada.
|
|
121
|
+
|
|
122
|
+
```javascript
|
|
123
|
+
await window.cdpTrack.trackPurchase({
|
|
124
|
+
value: 297.00,
|
|
125
|
+
currency: 'BRL',
|
|
126
|
+
order_id: 'ORD-12345',
|
|
127
|
+
email: 'fulano@exemplo.com',
|
|
128
|
+
content_name: 'Curso XYZ',
|
|
129
|
+
content_ids: ['SKU-001']
|
|
130
|
+
});
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## trackViewContent(contentData)
|
|
136
|
+
|
|
137
|
+
Visualização de produto ou oferta.
|
|
138
|
+
|
|
139
|
+
```javascript
|
|
140
|
+
await window.cdpTrack.trackViewContent({
|
|
141
|
+
content_name: 'Página de Vendas — Curso XYZ',
|
|
142
|
+
content_type: 'product',
|
|
143
|
+
value: 297.00,
|
|
144
|
+
currency: 'BRL'
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## trackAddToCart(cartData)
|
|
151
|
+
|
|
152
|
+
Adição ao carrinho.
|
|
153
|
+
|
|
154
|
+
```javascript
|
|
155
|
+
await window.cdpTrack.trackAddToCart({
|
|
156
|
+
content_id: 'SKU-001',
|
|
157
|
+
content_name: 'Produto XYZ',
|
|
158
|
+
value: 97.00,
|
|
159
|
+
currency: 'BRL',
|
|
160
|
+
num_items: 1
|
|
161
|
+
});
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## updateConsent(params)
|
|
167
|
+
|
|
168
|
+
Atualiza o Google Consent Mode v2 após o usuário aceitar o banner de cookies.
|
|
169
|
+
|
|
170
|
+
```javascript
|
|
171
|
+
// Usuário aceitou tudo
|
|
172
|
+
window.cdpTrack.updateConsent({ analytics: true, ads: true });
|
|
173
|
+
|
|
174
|
+
// Só analytics, rejeitou anúncios
|
|
175
|
+
window.cdpTrack.updateConsent({ analytics: true, ads: false });
|
|
176
|
+
|
|
177
|
+
// Rejeitou tudo
|
|
178
|
+
window.cdpTrack.updateConsent({ analytics: false, ads: false });
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
O consentimento é persistido no `localStorage` e restaurado automaticamente em visitas futuras.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## getUserId()
|
|
186
|
+
|
|
187
|
+
Retorna o `_cdp_uid` (cookie first-party, 365 dias).
|
|
188
|
+
|
|
189
|
+
```javascript
|
|
190
|
+
const uid = window.cdpTrack.getUserId();
|
|
191
|
+
// "1711234567890_abc123def"
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## getUserIdWithFallback()
|
|
197
|
+
|
|
198
|
+
Retorna o `_cdp_uid` com fallback para o `localStorage` (útil para afiliados e links em nova aba).
|
|
199
|
+
|
|
200
|
+
```javascript
|
|
201
|
+
const uid = window.cdpTrack.getUserIdWithFallback();
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Prioridade:** cookie → localStorage (`_cdp_aff`) → string vazia.
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## getUTMs()
|
|
209
|
+
|
|
210
|
+
Retorna os UTMs capturados da URL atual.
|
|
211
|
+
|
|
212
|
+
```javascript
|
|
213
|
+
const utms = window.cdpTrack.getUTMs();
|
|
214
|
+
// {
|
|
215
|
+
// utm_source: "meta",
|
|
216
|
+
// utm_medium: "paid",
|
|
217
|
+
// utm_campaign: "curso-xyz",
|
|
218
|
+
// utm_content: "video-1",
|
|
219
|
+
// utm_term: ""
|
|
220
|
+
// }
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## getUTMsWithFallback()
|
|
226
|
+
|
|
227
|
+
Retorna UTMs da URL ou do localStorage (fallback de 30 dias — attribution resurrection para afiliados).
|
|
228
|
+
|
|
229
|
+
```javascript
|
|
230
|
+
const utms = window.cdpTrack.getUTMsWithFallback();
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
**Prioridade:** URL params → localStorage (`_cdp_aff`) → objeto vazio.
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## getSessionId()
|
|
238
|
+
|
|
239
|
+
Retorna o session ID (cross-tab, expira ao fechar o browser).
|
|
240
|
+
|
|
241
|
+
```javascript
|
|
242
|
+
const sid = window.cdpTrack.getSessionId();
|
|
243
|
+
// "1711234567890_xyz456abc"
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## passCheckoutParams(options?)
|
|
249
|
+
|
|
250
|
+
Injeta UTMs e `_cdp_uid` nos links de checkout externos. Chamado automaticamente em `init()`.
|
|
251
|
+
|
|
252
|
+
```javascript
|
|
253
|
+
// Chamada manual com configuração customizada
|
|
254
|
+
passCheckoutParams({
|
|
255
|
+
platforms: ['hotmart', 'kiwify', 'ticto'],
|
|
256
|
+
domains: ['meusite.com/checkout'] // domínios customizados
|
|
257
|
+
});
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Plataformas suportadas e parâmetros injetados:**
|
|
261
|
+
|
|
262
|
+
| Plataforma | Parâmetros |
|
|
263
|
+
|---|---|
|
|
264
|
+
| Hotmart | `xcod` (user_id) + `sck` (utm_source\|medium\|campaign\|content\|term) |
|
|
265
|
+
| Kiwify | `src` (utm_source) + `utm_medium` + `utm_campaign` |
|
|
266
|
+
| Eduzz | `src` (utm_source) |
|
|
267
|
+
| Monetizze | `src` (utm_source) |
|
|
268
|
+
| CartPanda | utm_* passthrough direto |
|
|
269
|
+
| Ticto | utm_* + `user_id` |
|
|
270
|
+
| Custom | utm_* + `cdp_uid` |
|
|
271
|
+
|
|
272
|
+
**Nota:** links adicionados dinamicamente (lazy load, pop-ups) são rastreados automaticamente via `MutationObserver`.
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## setupAutoFormCapture()
|
|
277
|
+
|
|
278
|
+
Intercepta submits de formulários com campos de email ou telefone e dispara `trackLead()` automaticamente. Chamado em `init()` por padrão.
|
|
279
|
+
|
|
280
|
+
```javascript
|
|
281
|
+
// Já é chamado em init(). Para uso manual:
|
|
282
|
+
setupAutoFormCapture();
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Para desabilitar:
|
|
286
|
+
```javascript
|
|
287
|
+
// Em tracking.config.js
|
|
288
|
+
export default {
|
|
289
|
+
autoCaptureForms: false,
|
|
290
|
+
// ...
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## Micro-events — getVideoSummary()
|
|
297
|
+
|
|
298
|
+
Retorna o estado agregado de todos os vídeos na página (útil para VSL multi-vídeo).
|
|
299
|
+
|
|
300
|
+
```javascript
|
|
301
|
+
import { getVideoSummary } from '/js/micro-events.js';
|
|
302
|
+
|
|
303
|
+
const summary = getVideoSummary();
|
|
304
|
+
// {
|
|
305
|
+
// totalVideos: 2,
|
|
306
|
+
// startedCount: 1,
|
|
307
|
+
// completedCount: 0,
|
|
308
|
+
// maxProgress: 75 // maior % atingida entre todos os vídeos
|
|
309
|
+
// }
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## Eventos DOM customizados
|
|
315
|
+
|
|
316
|
+
O `micro-events.js` emite eventos DOM que a página pode ouvir para reagir ao comportamento do usuário:
|
|
317
|
+
|
|
318
|
+
```javascript
|
|
319
|
+
// Destravar CTA quando vídeo atingir 75%
|
|
320
|
+
window.addEventListener('cdp:VideoProgress', (e) => {
|
|
321
|
+
if (e.detail.progress_percent >= 75) {
|
|
322
|
+
document.getElementById('cta').style.display = 'block';
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
// Mostrar formulário de lead ao 50% do scroll
|
|
327
|
+
window.addEventListener('cdp:Scroll', (e) => {
|
|
328
|
+
if (e.detail.scroll_depth >= 50) {
|
|
329
|
+
document.getElementById('lead-form').classList.remove('hidden');
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
// Eventos disponíveis:
|
|
334
|
+
// cdp:Scroll, cdp:TimeOnPage, cdp:VideoPlay, cdp:VideoProgress,
|
|
335
|
+
// cdp:VideoComplete, cdp:VideoDropout, cdp:VideoPause, cdp:VideoSeek,
|
|
336
|
+
// cdp:Click, cdp:CTAHover, cdp:RapidClicks
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## tracking.config.js — Configuração do SDK
|
|
342
|
+
|
|
343
|
+
```javascript
|
|
344
|
+
// extracted-skill/tracking-events-generator/tracking.config.js
|
|
345
|
+
export default {
|
|
346
|
+
// IDs de plataformas
|
|
347
|
+
metaPixelId: 'SEU_PIXEL_ID',
|
|
348
|
+
ga4Id: 'G-XXXXXXXXXX',
|
|
349
|
+
tiktokPixelId: 'CXXXXXXXXXXXXXXX',
|
|
350
|
+
|
|
351
|
+
// Endpoint do Worker
|
|
352
|
+
endpoint: 'https://track.seudominio.com.br/track',
|
|
353
|
+
|
|
354
|
+
// Comportamento
|
|
355
|
+
autoCaptureForms: true, // captura formulários automaticamente
|
|
356
|
+
passCheckoutParams: true, // injeta params em links de checkout
|
|
357
|
+
initBehaviorEngine: true, // scoring avançado
|
|
358
|
+
|
|
359
|
+
// Plataformas para passCheckoutParams
|
|
360
|
+
platforms: ['hotmart', 'kiwify', 'ticto'],
|
|
361
|
+
|
|
362
|
+
// Google Consent Mode v2
|
|
363
|
+
consent: {
|
|
364
|
+
defaultDenied: true, // começa negado (LGPD compliant)
|
|
365
|
+
waitForUpdate: 500, // ms aguardar CMP
|
|
366
|
+
urlPassthrough: true, // preserva gclid/fbclid sem consent
|
|
367
|
+
},
|
|
368
|
+
|
|
369
|
+
debug: false // true para logs no console
|
|
370
|
+
};
|
|
371
|
+
```
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# WhatsApp CTWA — Click to WhatsApp Tracking
|
|
2
|
+
|
|
3
|
+
## O que é CTWA
|
|
4
|
+
|
|
5
|
+
Click to WhatsApp (CTWA) é um formato de anúncio no Facebook/Instagram onde o botão
|
|
6
|
+
de ação abre diretamente o WhatsApp em vez de direcionar para uma landing page.
|
|
7
|
+
|
|
8
|
+
O problema clássico: sem landing page, o pixel do browser não dispara, e a Meta
|
|
9
|
+
não consegue atribuir a conversão ao anúncio automaticamente.
|
|
10
|
+
|
|
11
|
+
A solução implementada aqui: o webhook do WhatsApp Business recebe cada mensagem
|
|
12
|
+
recebida, extrai o `ctwa_clid` (identificador do clique no anúncio) e envia um
|
|
13
|
+
evento `Contact` para a Meta Conversions API com `action_source: "chat"`.
|
|
14
|
+
Isso fecha o loop clique → conversa e aparece no Gerenciador de Eventos.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Fluxo Completo
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
[Anúncio Meta — Click to WhatsApp]
|
|
22
|
+
↓
|
|
23
|
+
Usuário clica no botão "Enviar Mensagem"
|
|
24
|
+
↓
|
|
25
|
+
Meta injeta ctwa_clid no deep link do WhatsApp
|
|
26
|
+
↓
|
|
27
|
+
WhatsApp abre → usuário envia mensagem
|
|
28
|
+
↓
|
|
29
|
+
Meta Cloud API → POST /webhook/whatsapp (worker)
|
|
30
|
+
↓
|
|
31
|
+
Worker extrai: phone + ctwa_clid + ad_id + headline
|
|
32
|
+
↓
|
|
33
|
+
D1 armazena em whatsapp_contacts
|
|
34
|
+
↓
|
|
35
|
+
Meta CAPI ← evento "Contact" com:
|
|
36
|
+
• ph = SHA256(phone) → Advanced Matching por telefone
|
|
37
|
+
• ctwa_clid = click ID → atribuição ao anúncio
|
|
38
|
+
• action_source = "chat" → obrigatório para CTWA
|
|
39
|
+
↓
|
|
40
|
+
[Gerenciador de Eventos mostra a conversão]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Dados Capturados
|
|
46
|
+
|
|
47
|
+
| Campo | Origem | Enviado ao CAPI | Hasheado |
|
|
48
|
+
|-------|--------|-----------------|----------|
|
|
49
|
+
| Telefone | `message.from` | `ph` | SHA-256 |
|
|
50
|
+
| Click ID | `message.referral.ctwa_clid` | `ctwa_clid` | Não |
|
|
51
|
+
| ID do anúncio | `message.referral.source_id` | — (armazenado no D1) | — |
|
|
52
|
+
| URL do anúncio | `message.referral.source_url` | `event_source_url` | Não |
|
|
53
|
+
| Título do anúncio | `message.referral.headline` | — (armazenado no D1) | — |
|
|
54
|
+
| IP | Header CF-Connecting-IP | `client_ip_address` | Não |
|
|
55
|
+
| User-Agent | Header User-Agent | `client_user_agent` | Não |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Endpoints
|
|
60
|
+
|
|
61
|
+
### `GET /webhook/whatsapp`
|
|
62
|
+
Verificação do webhook pela Meta (feita uma vez ao cadastrar).
|
|
63
|
+
|
|
64
|
+
Parâmetros recebidos:
|
|
65
|
+
- `hub.mode` = `subscribe`
|
|
66
|
+
- `hub.verify_token` = valor do secret `WA_WEBHOOK_VERIFY_TOKEN`
|
|
67
|
+
- `hub.challenge` = número aleatório que deve ser devolvido
|
|
68
|
+
|
|
69
|
+
Resposta: devolve o `hub.challenge` como texto puro com status 200.
|
|
70
|
+
|
|
71
|
+
### `POST /webhook/whatsapp`
|
|
72
|
+
Recebe eventos de mensagens da Meta Cloud API.
|
|
73
|
+
|
|
74
|
+
Processa apenas mensagens do tipo `messages` com `referral.ctwa_clid` (anúncios CTWA).
|
|
75
|
+
Mensagens orgânicas (sem referral) são recebidas com 200 mas não geram evento no CAPI.
|
|
76
|
+
|
|
77
|
+
Resposta: `{ "ok": true, "processed": N, "results": [...] }`
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Banco de Dados (D1)
|
|
82
|
+
|
|
83
|
+
### Tabela `whatsapp_contacts`
|
|
84
|
+
|
|
85
|
+
```sql
|
|
86
|
+
CREATE TABLE whatsapp_contacts (
|
|
87
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
88
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
89
|
+
phone_hash TEXT NOT NULL, -- SHA256(phone) — enviado ao CAPI como "ph"
|
|
90
|
+
phone_raw TEXT NOT NULL, -- número normalizado (ex: 5511999998888)
|
|
91
|
+
wamid TEXT UNIQUE, -- ID da mensagem (deduplicação)
|
|
92
|
+
ctwa_clid TEXT, -- click ID do anúncio (não hasheado)
|
|
93
|
+
ad_id TEXT, -- ID do anúncio
|
|
94
|
+
source_url TEXT, -- URL do anúncio
|
|
95
|
+
headline TEXT, -- título do anúncio
|
|
96
|
+
capi_sent INTEGER DEFAULT 0, -- 0=pendente | 1=enviado
|
|
97
|
+
capi_event_id TEXT, -- event_id para deduplicação no CAPI
|
|
98
|
+
message_body TEXT -- texto da primeira mensagem
|
|
99
|
+
);
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
A coluna `capi_sent` é atualizada para `1` após confirmação de sucesso da CAPI.
|
|
103
|
+
A coluna `wamid` tem índice UNIQUE — garante que a mesma mensagem não seja processada duas vezes.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Secrets Necessários
|
|
108
|
+
|
|
109
|
+
| Secret | Descrição | Como configurar |
|
|
110
|
+
|--------|-----------|-----------------|
|
|
111
|
+
| `WA_WEBHOOK_VERIFY_TOKEN` | Token de verificação do webhook (você define) | `wrangler secret put WA_WEBHOOK_VERIFY_TOKEN` |
|
|
112
|
+
| `META_ACCESS_TOKEN` | Token da Meta Conversions API | Já configurado |
|
|
113
|
+
| `META_PIXEL_ID` | ID do Pixel Meta | Já em `wrangler.toml` |
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Como Configurar no Meta Business Manager
|
|
118
|
+
|
|
119
|
+
1. Acesse [business.facebook.com](https://business.facebook.com)
|
|
120
|
+
2. Menu lateral → **WhatsApp** → **Configuration**
|
|
121
|
+
3. Seção **Webhook** → clique em **Edit**
|
|
122
|
+
4. Preencha:
|
|
123
|
+
- **Callback URL:** `https://server-edge-tracker.suporte-ed9.workers.dev/webhook/whatsapp`
|
|
124
|
+
- **Verify Token:** valor do secret `WA_WEBHOOK_VERIFY_TOKEN`
|
|
125
|
+
5. Clique em **Verify and Save**
|
|
126
|
+
6. Após verificar, clique em **Manage** → ative o campo **`messages`**
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Como Criar um Anúncio CTWA
|
|
131
|
+
|
|
132
|
+
No Gerenciador de Anúncios (ads.manager.facebook.com):
|
|
133
|
+
|
|
134
|
+
1. **Objetivo da campanha:** `Mensagens`
|
|
135
|
+
2. **Destino:** `WhatsApp`
|
|
136
|
+
3. **Número de WhatsApp:** selecione o número conectado ao Business Manager
|
|
137
|
+
4. O anúncio vai gerar automaticamente o `ctwa_clid` para cada clique
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Eventos no Gerenciador de Eventos
|
|
142
|
+
|
|
143
|
+
Após o primeiro contato via CTWA, no Gerenciador de Eventos da Meta você verá:
|
|
144
|
+
|
|
145
|
+
- **Nome do evento:** `Contact`
|
|
146
|
+
- **Origem do evento:** `chat`
|
|
147
|
+
- **Correspondência:** `Telephone` (via Advanced Matching pelo telefone hasheado)
|
|
148
|
+
- **ID do clique:** `ctwa_clid` vinculado ao anúncio
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Próximos Eventos (Qualificação no Funil)
|
|
153
|
+
|
|
154
|
+
Depois do `Contact` inicial, você pode enviar eventos adicionais conforme o lead avança:
|
|
155
|
+
|
|
156
|
+
| Momento | Endpoint | `eventName` | Dados extras |
|
|
157
|
+
|---------|----------|-------------|-------------|
|
|
158
|
+
| Lead qualificado no chat | `POST /track` | `Lead` | `phone`, `value` estimado |
|
|
159
|
+
| Venda confirmada no chat | `POST /track` | `Purchase` | `phone`, `value`, `currency` |
|
|
160
|
+
|
|
161
|
+
Exemplo de chamada para registrar uma venda fechada pelo WhatsApp:
|
|
162
|
+
|
|
163
|
+
```javascript
|
|
164
|
+
fetch('https://server-edge-tracker.suporte-ed9.workers.dev/track', {
|
|
165
|
+
method: 'POST',
|
|
166
|
+
headers: { 'Content-Type': 'application/json' },
|
|
167
|
+
body: JSON.stringify({
|
|
168
|
+
eventName: 'Purchase',
|
|
169
|
+
phone: '5511999998888',
|
|
170
|
+
value: 297.00,
|
|
171
|
+
currency: 'BRL',
|
|
172
|
+
pageUrl: 'https://wa.me/',
|
|
173
|
+
})
|
|
174
|
+
});
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Troubleshooting
|
|
180
|
+
|
|
181
|
+
### Webhook não verifica
|
|
182
|
+
- Confirme que o `WA_WEBHOOK_VERIFY_TOKEN` foi salvo com `wrangler secret put`
|
|
183
|
+
- Confirme que o worker foi deployado após a configuração do secret
|
|
184
|
+
- Teste manualmente: `GET /webhook/whatsapp?hub.mode=subscribe&hub.verify_token=SEU_TOKEN&hub.challenge=12345`
|
|
185
|
+
|
|
186
|
+
### Evento não aparece no Gerenciador de Eventos
|
|
187
|
+
- Confirme que `META_ACCESS_TOKEN` está configurado e válido
|
|
188
|
+
- Verifique a tabela `whatsapp_contacts` no D1: `capi_sent = 0` indica falha no envio
|
|
189
|
+
- Verifique a tabela `api_failures` para detalhes do erro
|
|
190
|
+
|
|
191
|
+
### Mensagem recebida mas sem ctwa_clid
|
|
192
|
+
- O usuário abriu o WhatsApp diretamente (não veio de anúncio CTWA)
|
|
193
|
+
- O contato ainda é salvo no D1, mas sem atribuição ao anúncio
|
|
194
|
+
- O evento `Contact` é enviado mesmo sem ctwa_clid (com apenas o telefone hasheado)
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Arquivos Relacionados
|
|
199
|
+
|
|
200
|
+
| Arquivo | Descrição |
|
|
201
|
+
|---------|-----------|
|
|
202
|
+
| `server-edge-tracker/worker.js` | Função `processWhatsAppWebhook()` (linha ~943) e rotas (linha ~2182) |
|
|
203
|
+
| `server-edge-tracker/migrate-v6.sql` | Migration que criou a tabela `whatsapp_contacts` |
|
|
204
|
+
| `server-edge-tracker/wrangler.toml` | Secret `WA_WEBHOOK_VERIFY_TOKEN` documentado |
|
|
205
|
+
| `server-edge-tracker/schema.sql` | Schema completo do D1 (referência) |
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
*Implementado em: 30 de março de 2026. CDP Edge v1.2 — WhatsApp CTWA Module.*
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Índice de Arquivos - CDP Edge
|
|
2
|
+
|
|
3
|
+
**Última atualização:** 2026-03-28
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 📚 NÚCLEO
|
|
8
|
+
|
|
9
|
+
| Categoria | Arquivos |
|
|
10
|
+
|---------|----------|
|
|
11
|
+
| **Orquestração** | `agents/master-orchestrator.md` |
|
|
12
|
+
| **Documentação Principal** | `SKILL.md`, `knowledge-base.md` |
|
|
13
|
+
| **Núcleo de Agentes** | `agents/` |
|
|
14
|
+
| **Modelos de Cenário** | `models/scenarios/` |
|
|
15
|
+
| **Infraestrutura** | `server-edge-tracker/` |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 🗂️ AGENTES ORQUESTRADORES
|
|
20
|
+
|
|
21
|
+
| Agente | Arquivo | Descrição |
|
|
22
|
+
|---------|----------|----------|
|
|
23
|
+
| **Master Orchestrator** | `agents/master-orchestrator.md` | Coordena todo o fluxo |
|
|
24
|
+
| **Code Guardian** | `agents/code-guardian-agent.md` | Integridade contínua — padrões, nomenclatura, pré-commit |
|
|
25
|
+
| **Browser Tracking** | `agents/browser-tracking.md` | SDK cdpTrack.js |
|
|
26
|
+
| **Server Tracking** | `agents/server-tracking.md` | Infraestrutura Cloudflare |
|
|
27
|
+
| **Database** | `agents/database-agent.md` | D1 Enterprise — Schema, queries, migrações |
|
|
28
|
+
| **Page Analyzer** | `agents/page-analyzer.md` | Análise de páginas |
|
|
29
|
+
| **Premium Tracking** | `agents/premium-tracking-intelligence-agent.md` | Estratégia de tracking |
|
|
30
|
+
| **Meta** | `agents/meta-agent.md` | Facebook/Instagram Pixel + CAPI |
|
|
31
|
+
| **Google** | `agents/google-agent.md` | GA4 + Google Ads |
|
|
32
|
+
| **TikTok** | `agents/tiktok-agent.md` | TikTok Pixel + Events API |
|
|
33
|
+
| **Spotify** | `agents/spotify-agent.md` | Spotify Ads Conversions |
|
|
34
|
+
| **Validator** | `agents/validator-agent.md` | Controle de qualidade |
|
|
35
|
+
| **LinkedIn** | `agents/linkedin-agent.md` | LinkedIn Conversions |
|
|
36
|
+
| **Snapchat** | `agents/snapchat-agent.md` | Snapchat Pixel + Conversions |
|
|
37
|
+
| **Twitter/X** | `agents/twitter-agent.md` | Twitter Conversions API |
|
|
38
|
+
| **Pinterest** | `agents/pinterest-agent.md` | Pinterest Conversions |
|
|
39
|
+
| **Reddit** | `agents/reddit-agent.md` | Reddit Conversions |
|
|
40
|
+
| **Bing** | `agents/bing-agent.md` | Bing UET |
|
|
41
|
+
| **WhatsApp** | `agents/whatsapp-agent.md` | Meta Cloud API |
|
|
42
|
+
| **Email** | `agents/email-agent.md` | Resend Transacional |
|
|
43
|
+
| **Dashboard** | `agents/dashboard-agent.md` | Métricas + Reports |
|
|
44
|
+
| **Debug** | `agents/debug-agent.md` | Diagnóstico de falhas |
|
|
45
|
+
| **Attribution** | `agents/attribution-agent.md` | Atribuição Multi-Touch |
|
|
46
|
+
| **Security Enterprise** | `agents/security-enterprise-agent.md` | Rate Limiting + Audit |
|
|
47
|
+
| **Performance** | `agents/performance-optimization-agent.md` | Caching + Otimização |
|
|
48
|
+
| **Compliance** | `agents/compliance-agent.md` | GDPR/LGPD/CCPA |
|
|
49
|
+
| **CRM Integration** | `agents/crm-integration-agent.md` | HubSpot/Salesforce |
|
|
50
|
+
| **Fingerprint** | `agents/fingerprint-agent.md` | UTM + Lead Lock |
|
|
51
|
+
| **Localization** | `agents/localization-agent.md` | Moedas/Checkout |
|
|
52
|
+
| **LTV Predictor** | `agents/ltv-predictor-agent.md` | Predição de LTV |
|
|
53
|
+
| **A/B Testing** | `agents/ab-testing-agent.md` | Edge Route Optimization |
|
|
54
|
+
| **Webhook** | `agents/webhook-agent.md` | Hotmart/Kiwify/Eduzz |
|
|
55
|
+
| **Tracking Plan** | `agents/tracking-plan-agent.md` | Plano de Tracking |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 📖 MODELOS DE CENÁRIO
|
|
60
|
+
|
|
61
|
+
| Categoria | Arquivos |
|
|
62
|
+
|---------|----------|
|
|
63
|
+
| **Comportamento** | `models/scenarios/behavior-engine.js` | Human-Behavior Engine |
|
|
64
|
+
| **Lead Capture** | `models/captura-de-lead.md` |
|
|
65
|
+
| **Lead + Webhook** | `models/captura-lead-evento-externo.md` |
|
|
66
|
+
| **Checkout Próprio** | `models/checkout-proprio.md` |
|
|
67
|
+
| **Trafego Direto** | `models/trafego-direto.md` |
|
|
68
|
+
| **Página Obrigado** | `models/pagina-obrigado.md` |
|
|
69
|
+
| **Webinar** | `models/webinar-registration.md` |
|
|
70
|
+
| **Quiz Funnel** | `models/quiz-funnel.md` |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 🔧 INFRAESTRURA
|
|
75
|
+
|
|
76
|
+
| Arquivo | Descrição |
|
|
77
|
+
|---------|----------|
|
|
78
|
+
| **Worker Principal** | `server-edge-tracker/worker.js` | Handler `/api/*` |
|
|
79
|
+
| **Schema D1** | `server-edge-tracker/schema.sql` | Banco de dados |
|
|
80
|
+
| **Config Wrangler** | `server-edge-tracker/wrangler.toml` | Deploy config |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 📝 CONTRATOS
|
|
85
|
+
|
|
86
|
+
| Arquivo | Descrição |
|
|
87
|
+
|---------|----------|
|
|
88
|
+
| `package.json` | Configuração do pacote npx |
|
|
89
|
+
| `bin/cdp-edge.js` | Entry point do CLI |
|
|
90
|
+
| `dist/commands/` | Comandos do CLI (setup, analyze, server, validate, infra) |
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
**Total de arquivos indexados:** 40+ arquivos principais
|