cdp-edge 2.0.0 → 2.0.2
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/contracts/api-versions.json +12 -8
- package/dist/commands/install.js +1 -2
- package/dist/commands/setup.js +1 -2
- package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +23 -23
- package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +172 -72
- package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +20 -0
- package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +48 -16
- package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +7 -7
- package/extracted-skill/tracking-events-generator/agents/database-agent.md +8 -8
- package/extracted-skill/tracking-events-generator/agents/debug-agent.md +13 -13
- package/extracted-skill/tracking-events-generator/agents/devops-agent.md +31 -7
- package/extracted-skill/tracking-events-generator/agents/email-agent.md +27 -0
- package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +205 -0
- package/extracted-skill/tracking-events-generator/agents/google-agent.md +118 -0
- package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +90 -4
- package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +8 -641
- package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +108 -0
- package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +68 -8
- package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +61 -18
- package/extracted-skill/tracking-events-generator/agents/memory-agent.md +98 -0
- package/extracted-skill/tracking-events-generator/agents/performance-agent.md +29 -19
- package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +11 -1
- package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +137 -28
- package/extracted-skill/tracking-events-generator/agents/server-tracking.md +7 -8
- package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +63 -0
- package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +100 -5
- package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +100 -0
- package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +58 -5
- package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +16 -16
- package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +140 -25
- package/extracted-skill/tracking-events-generator/contracts/api-versions.json +12 -8
- package/package.json +2 -2
- package/server-edge-tracker/worker.js +53 -8
|
@@ -43,6 +43,124 @@ if (isVersionConflict) {
|
|
|
43
43
|
|
|
44
44
|
---
|
|
45
45
|
|
|
46
|
+
## 🛡️ GOOGLE CONSENT MODE V2 — IMPLEMENTAÇÃO OBRIGATÓRIA
|
|
47
|
+
|
|
48
|
+
> **CRÍTICO**: Sem Consent Mode v2, campanhas Google Ads em audiências europeias são rejeitadas.
|
|
49
|
+
> Obrigatório para conformidade com GDPR (UE), LGPD (BR) e CCPA (EUA).
|
|
50
|
+
|
|
51
|
+
### PASSO 1 — Inicialização (ANTES do gtag.js)
|
|
52
|
+
|
|
53
|
+
Inserir **antes** do snippet do gtag.js no `<head>`:
|
|
54
|
+
|
|
55
|
+
```html
|
|
56
|
+
<!-- Google Consent Mode v2 — Inicializar NEGADO por padrão -->
|
|
57
|
+
<script>
|
|
58
|
+
window.dataLayer = window.dataLayer || [];
|
|
59
|
+
function gtag() { dataLayer.push(arguments); }
|
|
60
|
+
|
|
61
|
+
// OBRIGATÓRIO: definir consent ANTES de qualquer gtag() de medição
|
|
62
|
+
gtag('consent', 'default', {
|
|
63
|
+
'ad_storage': 'denied', // cookies de anúncio bloqueados até opt-in
|
|
64
|
+
'analytics_storage': 'denied', // cookies de analytics bloqueados até opt-in
|
|
65
|
+
'ad_user_data': 'denied', // envio de dados de usuário para Google Ads
|
|
66
|
+
'ad_personalization': 'denied', // personalização de anúncios
|
|
67
|
+
'wait_for_update': 500 // aguardar CMP atualizar consentimento (ms)
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// url_passthrough: preserva gclid/gbraid/wbraid na URL sem cookie
|
|
71
|
+
// Permite atribuição de cliques mesmo sem consent de analytics_storage
|
|
72
|
+
gtag('set', 'url_passthrough', true);
|
|
73
|
+
|
|
74
|
+
// ads_data_redaction: quando ad_storage=denied, reduz dados de clique enviados
|
|
75
|
+
gtag('set', 'ads_data_redaction', true);
|
|
76
|
+
</script>
|
|
77
|
+
|
|
78
|
+
<!-- Carregar gtag.js normalmente após o bloco acima -->
|
|
79
|
+
<script async src="https://www.googletagmanager.com/gtag/js?id=GA4_MEASUREMENT_ID"></script>
|
|
80
|
+
<script>
|
|
81
|
+
window.dataLayer = window.dataLayer || [];
|
|
82
|
+
function gtag() { dataLayer.push(arguments); }
|
|
83
|
+
gtag('js', new Date());
|
|
84
|
+
gtag('config', 'GA4_MEASUREMENT_ID', {
|
|
85
|
+
'send_page_view': false // cdpTrack controla page_view manualmente
|
|
86
|
+
});
|
|
87
|
+
</script>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### PASSO 2 — Atualizar Consent após Opt-in do usuário
|
|
91
|
+
|
|
92
|
+
Integrar com o banner de cookies do site (LGPD/GDPR):
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
// Chamar quando usuário ACEITAR todos os cookies
|
|
96
|
+
function onConsentAccepted() {
|
|
97
|
+
gtag('consent', 'update', {
|
|
98
|
+
'ad_storage': 'granted',
|
|
99
|
+
'analytics_storage': 'granted',
|
|
100
|
+
'ad_user_data': 'granted',
|
|
101
|
+
'ad_personalization': 'granted'
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// Opcional: disparar page_view após consent (se necessário)
|
|
105
|
+
gtag('event', 'page_view');
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Chamar quando usuário RECUSAR cookies não essenciais
|
|
109
|
+
function onConsentDeclined() {
|
|
110
|
+
gtag('consent', 'update', {
|
|
111
|
+
'ad_storage': 'denied',
|
|
112
|
+
'analytics_storage': 'denied',
|
|
113
|
+
'ad_user_data': 'denied',
|
|
114
|
+
'ad_personalization': 'denied'
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Aceitar apenas cookies analíticos (sem ads)
|
|
119
|
+
function onConsentAnalyticsOnly() {
|
|
120
|
+
gtag('consent', 'update', {
|
|
121
|
+
'ad_storage': 'denied',
|
|
122
|
+
'analytics_storage': 'granted',
|
|
123
|
+
'ad_user_data': 'denied',
|
|
124
|
+
'ad_personalization': 'denied'
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### PASSO 3 — Verificação (via Intelligence Agent)
|
|
130
|
+
|
|
131
|
+
O Intelligence Agent verifica mensalmente se o Consent Mode está implementado:
|
|
132
|
+
|
|
133
|
+
```javascript
|
|
134
|
+
// Checklist mínimo no código gerado (browser tracking):
|
|
135
|
+
// ✅ gtag('consent', 'default', {...}) ANTES do gtag.js
|
|
136
|
+
// ✅ ad_storage: 'denied' no default
|
|
137
|
+
// ✅ analytics_storage: 'denied' no default
|
|
138
|
+
// ✅ ad_user_data: 'denied' no default
|
|
139
|
+
// ✅ ad_personalization: 'denied' no default
|
|
140
|
+
// ✅ url_passthrough: true ativo
|
|
141
|
+
// ✅ gtag('consent', 'update', {...}) no callback do CMP/banner
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### PASSO 4 — Integração com cdpTrack (Preservação de gclid)
|
|
145
|
+
|
|
146
|
+
```javascript
|
|
147
|
+
// O cdpTrack.js deve capturar gclid/gbraid/wbraid da URL mesmo sem consent
|
|
148
|
+
// url_passthrough: true garante que os parâmetros são passados como parâmetros de URL,
|
|
149
|
+
// não como cookies — respeitando consent de analytics_storage
|
|
150
|
+
|
|
151
|
+
function captureGoogleClickId() {
|
|
152
|
+
const params = new URLSearchParams(window.location.search);
|
|
153
|
+
return {
|
|
154
|
+
gclid: params.get('gclid') || null,
|
|
155
|
+
gbraid: params.get('gbraid') || null,
|
|
156
|
+
wbraid: params.get('wbraid') || null
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
// Esses IDs são enviados para o Worker e salvos no D1 para Enhanced Conversions offline
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
46
164
|
## 🛠️ O QUE VOCÊ GERA
|
|
47
165
|
|
|
48
166
|
### 1. Browser (Direct SDK)
|
|
@@ -71,7 +71,7 @@ export default {
|
|
|
71
71
|
const url = new URL(request.url);
|
|
72
72
|
|
|
73
73
|
// Handler principal
|
|
74
|
-
if (url.pathname === '/
|
|
74
|
+
if (url.pathname === '/track') {
|
|
75
75
|
return handleTracking(request, env, ctx);
|
|
76
76
|
}
|
|
77
77
|
|
|
@@ -157,12 +157,12 @@ Timestamp: ${new Date().toISOString()}
|
|
|
157
157
|
`.trim();
|
|
158
158
|
|
|
159
159
|
// Enviar via WhatsApp Agent
|
|
160
|
-
if (env.
|
|
161
|
-
await fetch(`https://graph.facebook.com/v22.0/${env.
|
|
160
|
+
if (env.WHATSAPP_PHONE_NUMBER_ID && env.ADMIN_PHONE_NUMBER) {
|
|
161
|
+
await fetch(`https://graph.facebook.com/v22.0/${env.WHATSAPP_PHONE_NUMBER_ID}/messages`, {
|
|
162
162
|
method: 'POST',
|
|
163
163
|
headers: {
|
|
164
164
|
'Content-Type': 'application/json',
|
|
165
|
-
'Authorization': `Bearer ${env.
|
|
165
|
+
'Authorization': `Bearer ${env.WHATSAPP_ACCESS_TOKEN}`
|
|
166
166
|
},
|
|
167
167
|
body: JSON.stringify({
|
|
168
168
|
messaging_product: 'whatsapp',
|
|
@@ -363,3 +363,89 @@ INTELLIGENCE_SCHEDULE_MONTHLY = "0 3 1 * *"
|
|
|
363
363
|
3. **Alerta Pré-ativo**: Antes de uma API ser descontinuada, alertar com 30 dias de antecedência
|
|
364
364
|
4. **False-Positive Safe**: Se houver dúvida sobre versão de API, marcar como "verificação manual necessária" em vez de alerta
|
|
365
365
|
5. **Backoff de Check**: Se o check falhar (API indisponível), tentar novamente em 1 hora (não disparar alerta imediato)
|
|
366
|
+
6. **Anti-Spam**: Não disparar alerta se o mesmo problema já foi reportado nas últimas 24h
|
|
367
|
+
7. **Prioridade Correta**: CRITICAL (agora), HIGH (até 1h), MEDIUM (no relatório)
|
|
368
|
+
8. **Log de Falhas de Alerta**: Se WhatsApp falhar 3× consecutivas, registrar no D1 e tentar via CallMeBot fallback
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
## 🗄️ SCHEMA D1 — intelligence_logs
|
|
373
|
+
|
|
374
|
+
Adicionar ao `server-edge-tracker/schema.sql`:
|
|
375
|
+
|
|
376
|
+
```sql
|
|
377
|
+
-- TABELA DE LOGS DO INTELLIGENCE AGENT
|
|
378
|
+
CREATE TABLE IF NOT EXISTS intelligence_logs (
|
|
379
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
380
|
+
run_type TEXT NOT NULL, -- 'weekly' | 'monthly' | 'on-demand'
|
|
381
|
+
platforms_checked TEXT, -- JSON array de plataformas verificadas
|
|
382
|
+
issues_found TEXT, -- JSON array de issues encontradas
|
|
383
|
+
issues_count INTEGER DEFAULT 0,
|
|
384
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
385
|
+
);
|
|
386
|
+
|
|
387
|
+
CREATE INDEX IF NOT EXISTS idx_intel_logs_type ON intelligence_logs(run_type);
|
|
388
|
+
CREATE INDEX IF NOT EXISTS idx_intel_logs_created ON intelligence_logs(created_at);
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
## ✅ CHECKLIST DE IMPLEMENTAÇÃO
|
|
394
|
+
|
|
395
|
+
Antes de considerar o scheduling implementado, verificar:
|
|
396
|
+
|
|
397
|
+
- [ ] Cron triggers adicionados ao `wrangler.toml` (`0 2 * * 7` e `0 3 1 * *`)
|
|
398
|
+
- [ ] Handlers `scheduled()` adicionados ao `worker.js` (Cloudflare usa `scheduled`, não `fetch`)
|
|
399
|
+
- [ ] Schema D1 atualizado com tabela `intelligence_logs`
|
|
400
|
+
- [ ] Funções de check de versão implementadas com endpoints reais
|
|
401
|
+
- [ ] Funções de auditoria de privacidade implementadas
|
|
402
|
+
- [ ] Sistema de alerta (WhatsApp/CallMeBot) integrado com anti-spam 24h
|
|
403
|
+
- [ ] Logs de execução sendo salvos no D1
|
|
404
|
+
- [ ] Memory Agent atualizado após cada check
|
|
405
|
+
- [ ] Backoff implementado para evitar spam de alertas
|
|
406
|
+
- [ ] Teste manual executado (`GET /api/intelligence/check`)
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## INPUTS RECEBIDOS
|
|
411
|
+
|
|
412
|
+
- `wrangler.toml` do Worker (para injetar Cron Triggers)
|
|
413
|
+
- `worker.js` (para injetar handlers de `scheduled` events)
|
|
414
|
+
- `schema.sql` (para adicionar tabela `intelligence_logs`)
|
|
415
|
+
- Secrets: `WHATSAPP_PHONE_NUMBER_ID`, `WHATSAPP_ACCESS_TOKEN`, `ADMIN_PHONE_NUMBER` (para alertas)
|
|
416
|
+
- `contracts/api-versions.json` (fonte de verdade das versões atuais)
|
|
417
|
+
|
|
418
|
+
## RESPONSABILIDADE
|
|
419
|
+
|
|
420
|
+
- Configurar Cron Triggers no `wrangler.toml`: semanal (domingo 02:00 UTC) e mensal (1º do mês 03:00 UTC)
|
|
421
|
+
- Implementar handler `scheduled(event, env, ctx)` no Worker
|
|
422
|
+
- Chamar `runIntelligenceWeekly()` quando `event.cron === "0 2 * * 7"`
|
|
423
|
+
- Chamar `runIntelligenceMonthly()` quando `event.cron === "0 3 1 * *"`
|
|
424
|
+
- Adicionar tabela `intelligence_logs` ao schema D1
|
|
425
|
+
- Disparar alertas WhatsApp/CallMeBot ao admin apenas quando houver issues críticos
|
|
426
|
+
- Evitar spam: não repetir alerta do mesmo issue em menos de 24h
|
|
427
|
+
- Registrar resultado de cada execução no D1 (`intelligence_logs`)
|
|
428
|
+
|
|
429
|
+
## SAÍDA
|
|
430
|
+
|
|
431
|
+
```json
|
|
432
|
+
{
|
|
433
|
+
"arquivos_modificados": [
|
|
434
|
+
"wrangler.toml (cron triggers adicionados)",
|
|
435
|
+
"worker.js (handler scheduled() adicionado)",
|
|
436
|
+
"schema.sql (tabela intelligence_logs adicionada)"
|
|
437
|
+
],
|
|
438
|
+
"crons_configurados": {
|
|
439
|
+
"semanal": "0 2 * * 7 (domingo 02:00 UTC — check de versões)",
|
|
440
|
+
"mensal": "0 3 1 * * (dia 1 03:00 UTC — auditoria privacidade)"
|
|
441
|
+
},
|
|
442
|
+
"endpoint_manual": "GET /api/intelligence/check",
|
|
443
|
+
"alertas": {
|
|
444
|
+
"canal_primario": "WhatsApp Meta Cloud API v22.0",
|
|
445
|
+
"canal_fallback": "CallMeBot",
|
|
446
|
+
"anti_spam": "24h cooldown por issue"
|
|
447
|
+
},
|
|
448
|
+
"d1_tabela": "intelligence_logs",
|
|
449
|
+
"secrets_necessarios": ["WHATSAPP_PHONE_NUMBER_ID", "WHATSAPP_ACCESS_TOKEN", "ADMIN_PHONE_NUMBER"]
|
|
450
|
+
}
|
|
451
|
+
```
|