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,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