cdp-edge 2.5.6 → 2.5.7
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 +5 -8
- package/contracts/agent-versions.json +2 -2
- package/contracts/api-versions.json +8 -8
- package/extracted-skill/tracking-events-generator/INSTALACAO-CDPEDGE.md +2 -2
- package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +3 -3
- package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +1 -1
- package/extracted-skill/tracking-events-generator/SKILL.md +4 -4
- package/extracted-skill/tracking-events-generator/advanced-matching.js +1 -1
- package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +3 -3
- package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +2 -2
- package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +2 -2
- package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +6 -6
- package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +12 -12
- package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/memory-agent.md +8 -8
- package/extracted-skill/tracking-events-generator/agents/meta-agent.md +8 -8
- package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/server-tracking.md +9 -9
- package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +5 -5
- package/extracted-skill/tracking-events-generator/agents/validator-agent.md +8 -8
- package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +4 -4
- package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +7 -7
- package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +16 -16
- package/extracted-skill/tracking-events-generator/agents/zapman-agent.md +189 -0
- package/extracted-skill/tracking-events-generator/cdpTrack.js +1 -1
- package/extracted-skill/tracking-events-generator/contracts/api-versions.json +8 -8
- package/extracted-skill/tracking-events-generator/docs/guia-cloudflare-iniciante.md +2 -2
- package/extracted-skill/tracking-events-generator/evals/evals.json +5 -5
- package/extracted-skill/tracking-events-generator/knowledge-base.md +5 -5
- package/extracted-skill/tracking-events-generator/models/captura-de-lead.md +1 -1
- package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +1 -1
- package/extracted-skill/tracking-events-generator/models/lancamento-imobiliario.md +1 -1
- package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +5 -5
- package/extracted-skill/tracking-events-generator/models/pagina-obrigado.md +1 -1
- package/extracted-skill/tracking-events-generator/models/trafego-direto.md +4 -4
- package/extracted-skill/tracking-events-generator/models/webinar-registration.md +1 -1
- package/package.json +1 -1
- package/server-edge-tracker/INSTALAR.md +3 -3
- package/server-edge-tracker/index.ts +37 -36
- package/server-edge-tracker/modules/db.ts +1 -1
- package/server-edge-tracker/modules/dispatch/crm.ts +26 -363
- package/server-edge-tracker/modules/dispatch/meta.ts +2 -2
- package/server-edge-tracker/modules/dispatch/whatsapp.ts +7 -18
- package/server-edge-tracker/modules/intelligence.ts +4 -4
- package/server-edge-tracker/modules/nurture.ts +1 -1
- package/server-edge-tracker/schema.sql +1 -1
- package/server-edge-tracker/types.ts +6 -8
- package/server-edge-tracker/wrangler.toml +143 -140
- package/templates/captura-de-lead.md +1 -1
- package/templates/checkout-proprio.md +1 -1
- package/templates/lancamento-imobiliario.md +1 -1
- package/templates/multi-step-checkout.md +5 -5
- package/templates/pagina-obrigado.md +1 -1
- package/templates/trafego-direto.md +4 -4
- package/templates/webinar-registration.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/evo-crm-agent.md +0 -253
|
@@ -1,140 +1,143 @@
|
|
|
1
|
-
name = "server-edge-tracker"
|
|
2
|
-
# Entry point: worker.js (monólito original, 100% compatível)
|
|
3
|
-
# Para usar a versão modular ES Modules: altere para main = "index.ts"
|
|
4
|
-
main = "index.ts"
|
|
5
|
-
compatibility_date = "2025-01-01"
|
|
6
|
-
compatibility_flags = ["nodejs_compat"]
|
|
7
|
-
workers_dev = true
|
|
8
|
-
|
|
9
|
-
# ── Worker Routes — same-domain tracking (imune a bloqueios) ─────────────────
|
|
10
|
-
#
|
|
11
|
-
# [[routes]]
|
|
12
|
-
# pattern = "SEU_DOMINIO/track*"
|
|
13
|
-
# zone_name = "SEU_DOMINIO"
|
|
14
|
-
#
|
|
15
|
-
# [[routes]]
|
|
16
|
-
# pattern = "*.SEU_DOMINIO/track*"
|
|
17
|
-
# zone_name = "SEU_DOMINIO"
|
|
18
|
-
|
|
19
|
-
# [[routes]]
|
|
20
|
-
# pattern = "SEU_DOMINIO/
|
|
21
|
-
# zone_name = "SEU_DOMINIO"
|
|
22
|
-
#
|
|
23
|
-
# [[routes]]
|
|
24
|
-
# pattern = "
|
|
25
|
-
# zone_name = "SEU_DOMINIO"
|
|
26
|
-
|
|
27
|
-
#
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
# ──
|
|
43
|
-
#
|
|
44
|
-
#
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
#
|
|
68
|
-
#
|
|
69
|
-
#
|
|
70
|
-
[[
|
|
71
|
-
binding
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
#
|
|
76
|
-
#
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
#
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
#
|
|
89
|
-
#
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
#
|
|
124
|
-
#
|
|
125
|
-
#
|
|
126
|
-
#
|
|
127
|
-
# wrangler secret put
|
|
128
|
-
# wrangler secret put
|
|
129
|
-
# wrangler secret put
|
|
130
|
-
# wrangler secret put
|
|
131
|
-
# wrangler secret put
|
|
132
|
-
# wrangler secret put
|
|
133
|
-
# wrangler secret put
|
|
134
|
-
# wrangler secret put
|
|
135
|
-
# wrangler secret put
|
|
136
|
-
# wrangler secret put
|
|
137
|
-
# wrangler secret put
|
|
138
|
-
# wrangler secret put
|
|
139
|
-
# wrangler secret put
|
|
140
|
-
# wrangler secret put
|
|
1
|
+
name = "server-edge-tracker"
|
|
2
|
+
# Entry point: worker.js (monólito original, 100% compatível)
|
|
3
|
+
# Para usar a versão modular ES Modules: altere para main = "index.ts"
|
|
4
|
+
main = "index.ts"
|
|
5
|
+
compatibility_date = "2025-01-01"
|
|
6
|
+
compatibility_flags = ["nodejs_compat"]
|
|
7
|
+
workers_dev = true
|
|
8
|
+
|
|
9
|
+
# ── Worker Routes — same-domain tracking (imune a bloqueios) ─────────────────
|
|
10
|
+
# Configurar por projeto antes do deploy:
|
|
11
|
+
# [[routes]]
|
|
12
|
+
# pattern = "SEU_DOMINIO/track*"
|
|
13
|
+
# zone_name = "SEU_DOMINIO"
|
|
14
|
+
#
|
|
15
|
+
# [[routes]]
|
|
16
|
+
# pattern = "*.SEU_DOMINIO/track*"
|
|
17
|
+
# zone_name = "SEU_DOMINIO"
|
|
18
|
+
#
|
|
19
|
+
# [[routes]]
|
|
20
|
+
# pattern = "SEU_DOMINIO/webhook/*"
|
|
21
|
+
# zone_name = "SEU_DOMINIO"
|
|
22
|
+
#
|
|
23
|
+
# [[routes]]
|
|
24
|
+
# pattern = "SEU_DOMINIO/health"
|
|
25
|
+
# zone_name = "SEU_DOMINIO"
|
|
26
|
+
#
|
|
27
|
+
# [[routes]]
|
|
28
|
+
# pattern = "SEU_DOMINIO/api/*"
|
|
29
|
+
# zone_name = "SEU_DOMINIO"
|
|
30
|
+
|
|
31
|
+
# ── Variáveis públicas (não são segredos) ─────────────────────────────────────
|
|
32
|
+
# Preencher por projeto antes do deploy:
|
|
33
|
+
[vars]
|
|
34
|
+
META_PIXEL_ID = ""
|
|
35
|
+
GA4_MEASUREMENT_ID = ""
|
|
36
|
+
TIKTOK_PIXEL_ID = ""
|
|
37
|
+
SITE_DOMAIN = "SEU_DOMINIO"
|
|
38
|
+
ZAPMAN_API_URL = ""
|
|
39
|
+
ZAPMAN_CRM_INSTANCE = ""
|
|
40
|
+
ZAPMAN_WEBHOOK_URL = ""
|
|
41
|
+
|
|
42
|
+
# ── Banco D1 ──────────────────────────────────────────────────────────────────
|
|
43
|
+
# Após criar o banco com "wrangler d1 create cdp-edge-db",
|
|
44
|
+
# substitua o database_id pelo ID retornado no terminal.
|
|
45
|
+
[[d1_databases]]
|
|
46
|
+
binding = "DB"
|
|
47
|
+
database_name = "cdp-edge-db"
|
|
48
|
+
database_id = "7867d38f-5fa8-4c17-b465-386211422c09"
|
|
49
|
+
|
|
50
|
+
# ── Queues — Retry + Dead Letter Queue ───────────────────────────────────────
|
|
51
|
+
# Produtor: worker envia eventos com falha para cdp-edge-retry
|
|
52
|
+
# Consumidor: worker processa a fila e reaplica; falhas vão para cdp-edge-dlq
|
|
53
|
+
# Criar com: wrangler queues create cdp-edge-retry
|
|
54
|
+
# wrangler queues create cdp-edge-dlq
|
|
55
|
+
[[queues.producers]]
|
|
56
|
+
binding = "RETRY_QUEUE"
|
|
57
|
+
queue = "cdp-edge-retry"
|
|
58
|
+
|
|
59
|
+
[[queues.consumers]]
|
|
60
|
+
queue = "cdp-edge-retry"
|
|
61
|
+
max_batch_size = 10
|
|
62
|
+
max_batch_timeout = 30
|
|
63
|
+
max_retries = 3
|
|
64
|
+
dead_letter_queue = "cdp-edge-dlq"
|
|
65
|
+
|
|
66
|
+
# ── KV Namespace — Geo/Session Cache ─────────────────────────────────────────
|
|
67
|
+
# Cache de geolocalização e sessões recentes (TTL: 1h por padrão)
|
|
68
|
+
# Criar com: wrangler kv namespace create GEO_CACHE
|
|
69
|
+
# wrangler kv namespace create GEO_CACHE --preview
|
|
70
|
+
[[kv_namespaces]]
|
|
71
|
+
binding = "GEO_CACHE"
|
|
72
|
+
id = "821b6c1ccb4b475985439b801c1fdbe0"
|
|
73
|
+
preview_id = "d2d9198f47e340ee905a8dc566b09e95"
|
|
74
|
+
|
|
75
|
+
# ── R2 Bucket — Audit Logs ────────────────────────────────────────────────────
|
|
76
|
+
# Logs imutáveis por evento: logs/YYYY/MM/DD/{timestamp}_{eventName}.json
|
|
77
|
+
# Sem PII — apenas userId, eventId, ltvClass, UTMs, geo
|
|
78
|
+
[[r2_buckets]]
|
|
79
|
+
binding = "AUDIT_LOGS"
|
|
80
|
+
bucket_name = "cdp-edge-logs"
|
|
81
|
+
|
|
82
|
+
# ── Cron Triggers — Intelligence Agent ───────────────────────────────────────
|
|
83
|
+
# Semanal: domingo 02:00 UTC — check de versões de API + relatório diário
|
|
84
|
+
# Mensal: 1º do mês 03:00 UTC — auditoria de taxa de erro + alertas críticos
|
|
85
|
+
[triggers]
|
|
86
|
+
crons = ["0 2 * * 7", "0 3 1 * *"]
|
|
87
|
+
|
|
88
|
+
# ── Cloudflare Workers AI ─────────────────────────────────────────────────────
|
|
89
|
+
# Habilita env.AI para LTV Prediction (Fase 4)
|
|
90
|
+
# Plano gratuito inclui 10.000 neurônios/dia — suficiente para enrichment
|
|
91
|
+
[ai]
|
|
92
|
+
binding = "AI"
|
|
93
|
+
|
|
94
|
+
# ── Rate Limiting — proteção do /track contra abuso de cota ──────────────────
|
|
95
|
+
# Bloqueia na borda ANTES de qualquer processamento do Worker
|
|
96
|
+
# Limite: 60 requisições por minuto por IP (generoso para usuário real)
|
|
97
|
+
# Requer Workers Paid plan ($5/mês) — remover bloco se usar plano free
|
|
98
|
+
[[unsafe.bindings]]
|
|
99
|
+
name = "RATE_LIMITER"
|
|
100
|
+
type = "ratelimit"
|
|
101
|
+
namespace_id = "1001"
|
|
102
|
+
|
|
103
|
+
[unsafe.bindings.simple]
|
|
104
|
+
limit = 60
|
|
105
|
+
period = 60
|
|
106
|
+
|
|
107
|
+
# ── Observabilidade — Logs + Traces persistidos no painel Cloudflare ─────────
|
|
108
|
+
[observability]
|
|
109
|
+
enabled = false
|
|
110
|
+
head_sampling_rate = 1
|
|
111
|
+
|
|
112
|
+
[observability.logs]
|
|
113
|
+
enabled = true
|
|
114
|
+
head_sampling_rate = 1
|
|
115
|
+
persist = true
|
|
116
|
+
invocation_logs = true
|
|
117
|
+
|
|
118
|
+
[observability.traces]
|
|
119
|
+
enabled = false
|
|
120
|
+
persist = true
|
|
121
|
+
head_sampling_rate = 1
|
|
122
|
+
|
|
123
|
+
# ── Secrets (NÃO ficam aqui — configurar via CLI uma única vez) ───────────────
|
|
124
|
+
# Secrets são PERMANENTES na Cloudflare — deploy nunca apaga.
|
|
125
|
+
# Só execute o comando abaixo se o secret ainda não existir:
|
|
126
|
+
#
|
|
127
|
+
# wrangler secret put META_ACCESS_TOKEN ← token Meta CAPI
|
|
128
|
+
# wrangler secret put GA4_API_SECRET ← secret GA4 Measurement Protocol
|
|
129
|
+
# wrangler secret put TIKTOK_ACCESS_TOKEN ← token TikTok Events API (opcional)
|
|
130
|
+
# wrangler secret put META_AD_ACCOUNT_ID ← ID da conta de anúncios Meta
|
|
131
|
+
# wrangler secret put WHATSAPP_TOKEN ← Token WhatsApp Cloud API
|
|
132
|
+
# wrangler secret put WHATSAPP_PHONE_NUMBER_ID ← ID do número WhatsApp
|
|
133
|
+
# wrangler secret put WA_ACCESS_TOKEN ← Token legado WhatsApp (compatibilidade)
|
|
134
|
+
# wrangler secret put WA_PHONE_ID ← ID legado do número (compatibilidade)
|
|
135
|
+
# wrangler secret put WA_NOTIFY_NUMBER ← Número que recebe alertas de venda/lead
|
|
136
|
+
# wrangler secret put WA_WEBHOOK_VERIFY_TOKEN ← Token de verificação do webhook WhatsApp
|
|
137
|
+
# wrangler secret put WEBHOOK_SECRET_TICTO ← HMAC-SHA256 Ticto
|
|
138
|
+
# wrangler secret put CALLMEBOT_PHONE ← Número CallMeBot para alertas
|
|
139
|
+
# wrangler secret put CALLMEBOT_APIKEY ← API Key CallMeBot
|
|
140
|
+
# wrangler secret put ZAPMAN_API_KEY ← DASHBOARD_SECRET do ZapMan (X-API-Key)
|
|
141
|
+
# wrangler secret put ALLOWED_COUNTRIES ← CSV ISO-2 geo-fence ex: "BR"
|
|
142
|
+
# wrangler secret put FRAUD_DROP_THRESHOLD ← Score mínimo para drop (default 50)
|
|
143
|
+
# wrangler secret put FRAUD_BLOCK_DATACENTERS ← "1" = bloquear datacenters
|
|
@@ -67,7 +67,7 @@ O PlayerBuilder Quantum Tier processa o evento via Cloudflare Worker:
|
|
|
67
67
|
1. **Deduplicação**: Utiliza o `event_id` do browser para 100% de precisão na Meta CAPI.
|
|
68
68
|
2. **Advanced Matching**: Aplica SHA256 em `email`, `phone`, `first_name` e `last_name` (WebCrypto native).
|
|
69
69
|
3. **D1 Store**: Salva o lead e o Identity Graph na tabela `leads`.
|
|
70
|
-
4. **API Dispatch**: Envia assincronamente para Meta CAPI (
|
|
70
|
+
4. **API Dispatch**: Envia assincronamente para Meta CAPI (v25.0) e TikTok Events API (v1.3).
|
|
71
71
|
|
|
72
72
|
---
|
|
73
73
|
|
|
@@ -73,7 +73,7 @@ O Worker gerencia o estado da transação e a persistência.
|
|
|
73
73
|
Ao receber o evento `Purchase`, o Worker salva na tabela `leads` com o status correspondente.
|
|
74
74
|
|
|
75
75
|
### 2.2 Despacho para APIs
|
|
76
|
-
- O Worker envia `Purchase` para as APIs (Meta CAPI
|
|
76
|
+
- O Worker envia `Purchase` para as APIs (Meta CAPI v25.0, TikTok v1.3).
|
|
77
77
|
- O `InitiateCheckout` prévio no D1 permite automação de recuperação de carrinho.
|
|
78
78
|
|
|
79
79
|
---
|
|
@@ -23,7 +23,7 @@ Browser (cdpTrack.js)
|
|
|
23
23
|
├─ Fraud Gate
|
|
24
24
|
├─ LTV Prediction (Granite 4.0 Micro) + score por eventType
|
|
25
25
|
├─ D1: upsertProfile, identity graph, distanceKm
|
|
26
|
-
└─ CAPI dispatch: Meta
|
|
26
|
+
└─ CAPI dispatch: Meta v25.0 + GA4 + TikTok v1.3
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
---
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> ✅ **STATUS: Quantum Tier (Server-Side Completo)**
|
|
4
4
|
>
|
|
5
5
|
> Checkout multi-etapa com rastreamento 100% Cloudflare Native (Workers + D1).
|
|
6
|
-
> Inclui enriquecimento progressivo de identidade, deduplicação e dispatch server-side para Meta CAPI
|
|
6
|
+
> Inclui enriquecimento progressivo de identidade, deduplicação e dispatch server-side para Meta CAPI v25.0, GA4 MP e TikTok API v1.3.
|
|
7
7
|
|
|
8
8
|
Checkout próprio dividido em múltiplas etapas: dados pessoais → endereço → pagamento → confirmação.
|
|
9
9
|
|
|
@@ -373,7 +373,7 @@ async function dispatchEvents(eventBody, sessionData, env) {
|
|
|
373
373
|
}
|
|
374
374
|
```
|
|
375
375
|
|
|
376
|
-
### 2.4 Meta CAPI
|
|
376
|
+
### 2.4 Meta CAPI v25.0
|
|
377
377
|
```javascript
|
|
378
378
|
async function dispatchMeta(eventName, sessionData, env, customData = {}) {
|
|
379
379
|
if (!env.META_ACCESS_TOKEN || !env.META_PIXEL_ID) return;
|
|
@@ -407,7 +407,7 @@ async function dispatchMeta(eventName, sessionData, env, customData = {}) {
|
|
|
407
407
|
};
|
|
408
408
|
|
|
409
409
|
const res = await fetch(
|
|
410
|
-
`https://graph.facebook.com/
|
|
410
|
+
`https://graph.facebook.com/v25.0/${env.META_PIXEL_ID}/events?access_token=${env.META_ACCESS_TOKEN}`,
|
|
411
411
|
{
|
|
412
412
|
method: 'POST',
|
|
413
413
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -591,7 +591,7 @@ CREATE INDEX IF NOT EXISTS idx_events_created ON events_log(created_at);
|
|
|
591
591
|
### Cloudflare Worker
|
|
592
592
|
- [ ] Endpoint `/api/tracking` configurado como Route no Cloudflare
|
|
593
593
|
- [ ] Identity Graph atualizado progressivamente conforme usuário preenche campos
|
|
594
|
-
- [ ] Meta CAPI
|
|
594
|
+
- [ ] Meta CAPI v25.0 endpoint correto
|
|
595
595
|
- [ ] TikTok Events API v1.3 endpoint correto
|
|
596
596
|
- [ ] GA4 Measurement Protocol configurado
|
|
597
597
|
- [ ] CheckoutAbandonment logado apenas no D1 (não dispara para APIs)
|
|
@@ -628,7 +628,7 @@ CREATE INDEX IF NOT EXISTS idx_events_created ON events_log(created_at);
|
|
|
628
628
|
└── Gateway: callback de sucesso → trackPurchaseConfirmed()
|
|
629
629
|
└── JS: dispara Purchase → Worker
|
|
630
630
|
└── Worker: recupera Identity Graph completa (todos os hashes)
|
|
631
|
-
└── Worker: dispatch → Meta Purchase CAPI (
|
|
631
|
+
└── Worker: dispatch → Meta Purchase CAPI (v25.0)
|
|
632
632
|
└── Worker: dispatch → GA4 Purchase (MP)
|
|
633
633
|
└── Worker: dispatch → TikTok CompletePayment (v1.3)
|
|
634
634
|
|
|
@@ -43,7 +43,7 @@ cdpTrack.track('ViewContent', {
|
|
|
43
43
|
## 🖥️ PASSO 2: SERVIDOR (CLOUDFLARE WORKER)
|
|
44
44
|
|
|
45
45
|
O Worker realiza a verificação de duplicidade:
|
|
46
|
-
- **D1 Cross-Check**: Verifica se o `transaction_id` já existe no banco antes de enviar para Meta CAPI (
|
|
46
|
+
- **D1 Cross-Check**: Verifica se o `transaction_id` já existe no banco antes de enviar para Meta CAPI (v25.0) e TikTok (v1.3).
|
|
47
47
|
- **Match Quality**: Recupera os identificadores originais do banco de dados para enriquecer o evento.
|
|
48
48
|
|
|
49
49
|
---
|
|
@@ -323,7 +323,7 @@ async function handleWebhook(request, env, url) {
|
|
|
323
323
|
}
|
|
324
324
|
```
|
|
325
325
|
|
|
326
|
-
### 2.3 Meta CAPI
|
|
326
|
+
### 2.3 Meta CAPI v25.0
|
|
327
327
|
```javascript
|
|
328
328
|
async function dispatchMeta(eventName, data, env, customData = {}) {
|
|
329
329
|
if (!env.META_ACCESS_TOKEN || !env.META_PIXEL_ID) return;
|
|
@@ -356,7 +356,7 @@ async function dispatchMeta(eventName, data, env, customData = {}) {
|
|
|
356
356
|
};
|
|
357
357
|
|
|
358
358
|
const res = await fetch(
|
|
359
|
-
`https://graph.facebook.com/
|
|
359
|
+
`https://graph.facebook.com/v25.0/${env.META_PIXEL_ID}/events?access_token=${env.META_ACCESS_TOKEN}`,
|
|
360
360
|
{
|
|
361
361
|
method: 'POST',
|
|
362
362
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -510,7 +510,7 @@ CREATE INDEX IF NOT EXISTS idx_fbc ON identity_graph(fbc);
|
|
|
510
510
|
- [ ] Endpoint `/api/wh/{plataforma}` para webhooks
|
|
511
511
|
- [ ] Salvar sessão no D1 com todos os cookies
|
|
512
512
|
- [ ] D1 lookup pelo cdp_uid ao receber webhook
|
|
513
|
-
- [ ] Meta CAPI
|
|
513
|
+
- [ ] Meta CAPI v25.0 endpoint correto
|
|
514
514
|
- [ ] TikTok Events API v1.3 endpoint correto
|
|
515
515
|
- [ ] GA4 Measurement Protocol configurado
|
|
516
516
|
|
|
@@ -543,7 +543,7 @@ CREATE INDEX IF NOT EXISTS idx_fbc ON identity_graph(fbc);
|
|
|
543
543
|
└── Plataforma envia webhook → /api/wh/{plataforma}
|
|
544
544
|
└── Worker: extrai cdp_uid do webhook (xcod/sck/src)
|
|
545
545
|
└── Worker: D1 lookup → recupera fbp, fbc, ttp, UTMs, IP
|
|
546
|
-
└── Worker: dispatch → Meta Purchase CAPI (
|
|
546
|
+
└── Worker: dispatch → Meta Purchase CAPI (v25.0)
|
|
547
547
|
└── Worker: dispatch → GA4 Purchase (MP)
|
|
548
548
|
└── Worker: dispatch → TikTok CompletePayment (v1.3)
|
|
549
549
|
```
|
|
@@ -52,7 +52,7 @@ document.querySelector('#form-webinar').addEventListener('submit', async (e) =>
|
|
|
52
52
|
O Worker executa:
|
|
53
53
|
- **Hashing**: Proteção de dados via SHA-256.
|
|
54
54
|
- **D1 Store**: Gravação do lead e vinculação de UTMs para análise de ROI.
|
|
55
|
-
- **API Dispatch**: Envio para Meta CAPI (
|
|
55
|
+
- **API Dispatch**: Envio para Meta CAPI (v25.0) e TikTok Events API (v1.3).
|
|
56
56
|
|
|
57
57
|
---
|
|
58
58
|
|