cdp-edge 1.2.2 → 1.4.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 +153 -306
- package/bin/cdp-edge.js +71 -61
- package/contracts/agent-versions.json +682 -0
- package/contracts/api-versions.json +372 -368
- package/contracts/types.ts +81 -0
- package/dist/commands/analyze.js +52 -52
- package/dist/commands/infra.js +54 -54
- package/dist/commands/install.js +26 -3
- package/dist/commands/server.js +174 -174
- package/dist/commands/setup.js +332 -100
- package/dist/commands/validate.js +248 -84
- package/dist/index.js +12 -12
- package/dist/sdk/cdpTrack.js +2095 -0
- package/dist/sdk/cdpTrack.min.js +64 -0
- package/dist/sdk/install-snippet.html +10 -0
- package/docs/whatsapp-ctwa.md +5 -4
- package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +89 -0
- package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +101 -0
- package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -364
- package/extracted-skill/tracking-events-generator/agents/ab-ltv-agent.md +196 -0
- package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +41 -41
- package/extracted-skill/tracking-events-generator/agents/bidding-agent.md +347 -0
- package/extracted-skill/tracking-events-generator/agents/bing-agent.md +40 -50
- package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +174 -74
- package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +25 -5
- package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +10 -10
- package/extracted-skill/tracking-events-generator/agents/database-agent.md +43 -42
- package/extracted-skill/tracking-events-generator/agents/debug-agent.md +22 -22
- package/extracted-skill/tracking-events-generator/agents/devops-agent.md +232 -0
- package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +23 -9
- package/extracted-skill/tracking-events-generator/agents/email-agent.md +28 -1
- package/extracted-skill/tracking-events-generator/agents/evo-crm-agent.md +253 -0
- package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +206 -1
- package/extracted-skill/tracking-events-generator/agents/fraud-detection-agent.md +143 -0
- package/extracted-skill/tracking-events-generator/agents/google-agent.md +128 -2
- package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +191 -31
- package/extracted-skill/tracking-events-generator/agents/lead-scoring-agent.md +282 -0
- package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +145 -34
- package/extracted-skill/tracking-events-generator/agents/localization-agent.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +24 -5
- package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +81 -21
- package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +588 -93
- package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +304 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.md +190 -15
- package/extracted-skill/tracking-events-generator/agents/meta-agent.md +10 -2
- package/extracted-skill/tracking-events-generator/agents/ml-clustering-agent.md +769 -0
- package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +21 -4
- package/extracted-skill/tracking-events-generator/agents/performance-agent.md +41 -31
- package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +18 -8
- package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +14 -6
- package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +7 -7
- package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +16 -8
- package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +15 -7
- package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +157 -48
- package/extracted-skill/tracking-events-generator/agents/server-tracking.md +35 -35
- package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +15 -7
- package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +73 -2
- package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +104 -9
- package/extracted-skill/tracking-events-generator/agents/utm-agent.md +322 -0
- package/extracted-skill/tracking-events-generator/agents/validator-agent.md +13 -9
- package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +112 -4
- package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +58 -5
- package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +26 -18
- package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +152 -37
- package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -285
- package/extracted-skill/tracking-events-generator/cdpTrack.js +642 -641
- package/extracted-skill/tracking-events-generator/contracts/api-versions.json +14 -10
- package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -226
- package/extracted-skill/tracking-events-generator/evals/evals.json +235 -235
- package/extracted-skill/tracking-events-generator/integration-test.js +497 -497
- package/extracted-skill/tracking-events-generator/knowledge-base.md +172 -0
- package/extracted-skill/tracking-events-generator/micro-events.js +992 -992
- package/extracted-skill/tracking-events-generator/models/lancamento-imobiliario.md +344 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -144
- package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -48
- package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -28
- package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +83 -19
- package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -205
- package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -56
- package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -19
- package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -425
- package/extracted-skill/tracking-events-generator/route-intent-capture.js +222 -0
- package/extracted-skill/tracking-events-generator/tracking.config.js +3 -3
- package/package.json +89 -75
- package/scripts/build-sdk.js +106 -0
- package/server-edge-tracker/.client.env.example +14 -0
- package/server-edge-tracker/INSTALAR.md +222 -23
- package/server-edge-tracker/SEGMENTATION-DOCS.md +513 -0
- package/server-edge-tracker/config/utm-mapping.json +64 -0
- package/server-edge-tracker/deploy-client.cjs +76 -0
- package/server-edge-tracker/index.ts +1230 -0
- package/server-edge-tracker/migrate-v7.sql +64 -0
- package/server-edge-tracker/modules/db.ts +710 -0
- package/server-edge-tracker/modules/dispatch/crm.ts +382 -0
- package/server-edge-tracker/modules/dispatch/ga4.ts +72 -0
- package/server-edge-tracker/modules/dispatch/meta.ts +143 -0
- package/server-edge-tracker/modules/dispatch/platforms.ts +255 -0
- package/server-edge-tracker/modules/dispatch/tiktok.ts +107 -0
- package/server-edge-tracker/modules/dispatch/whatsapp.ts +296 -0
- package/server-edge-tracker/modules/intelligence.ts +589 -0
- package/server-edge-tracker/modules/ml/bidding.ts +247 -0
- package/server-edge-tracker/modules/ml/fraud.ts +302 -0
- package/server-edge-tracker/modules/ml/logistic.ts +226 -0
- package/server-edge-tracker/modules/ml/ltv.ts +531 -0
- package/server-edge-tracker/modules/ml/matchquality.ts +232 -0
- package/server-edge-tracker/modules/ml/quiz.ts +343 -0
- package/server-edge-tracker/modules/ml/roas.ts +255 -0
- package/server-edge-tracker/modules/ml/segmentation.ts +407 -0
- package/server-edge-tracker/modules/nurture.ts +257 -0
- package/server-edge-tracker/modules/utils.ts +311 -0
- package/server-edge-tracker/modules/utm/utm-enricher.ts +231 -0
- package/server-edge-tracker/schema-ab-ltv.sql +97 -0
- package/server-edge-tracker/schema-bidding.sql +86 -0
- package/server-edge-tracker/schema-fraud.sql +90 -0
- package/server-edge-tracker/schema-indexes.sql +67 -0
- package/server-edge-tracker/schema-ltv-feedback.sql +11 -0
- package/server-edge-tracker/schema-quiz.sql +52 -0
- package/server-edge-tracker/schema-sales-engine.sql +113 -0
- package/server-edge-tracker/schema-segmentation.sql +219 -0
- package/server-edge-tracker/schema-utm.sql +82 -0
- package/server-edge-tracker/schema.sql +281 -265
- package/server-edge-tracker/types.ts +275 -0
- package/server-edge-tracker/wrangler.toml +140 -85
- package/templates/lancamento-imobiliario.md +344 -0
- package/templates/multi-step-checkout.md +3 -4
- package/templates/pinterest/conversions-api-template.js +144 -144
- package/templates/pinterest/event-mappings.json +48 -48
- package/templates/pinterest/tag-template.js +28 -28
- package/templates/quiz-funnel.md +83 -19
- package/templates/reddit/conversions-api-template.js +205 -205
- package/templates/reddit/event-mappings.json +56 -56
- package/templates/reddit/pixel-template.js +12 -39
- package/templates/scenarios/behavior-engine.js +45 -22
- package/docs/PixelBuilder-Documentacao-Completa (2).docx +0 -0
- package/docs/installation.md +0 -155
- package/docs/quick-start.md +0 -185
- package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +0 -1419
- package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +0 -643
- package/server-edge-tracker/worker.js +0 -2574
|
@@ -4,6 +4,14 @@ Especialista exclusivo em GA4 (Measurement Protocol) + Google Ads (Enhanced Conv
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## ✅ REGRAS CRÍTICAS
|
|
8
|
+
|
|
9
|
+
0. **CONSULTA OBRIGATÓRIA À MEMÓRIA**: Extraia o ID de Medição GA4 e Secret da API (`GA4_MEASUREMENT_ID`, `GA4_API_SECRET`) consultando ativamente o "memory-agent.json". Solicite ao Orquestrador tudo o que faltar. Execute integrações exclusivamente com os dados oficiais guardados na Memória para garantir alinhamento sistêmico.
|
|
10
|
+
1. Cloudflare-Only: Sem dependências externas.
|
|
11
|
+
2. Same-Domain: Worker no domínio do site (anti-adblock).
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
7
15
|
## 🏗️ ARQUITETURA Quantum Tier
|
|
8
16
|
- **Browser**: Use `cdpTrack.js` para captura direta.
|
|
9
17
|
- **Server**: Cloudflare Worker enviando para `google-analytics.com/mp/collect`.
|
|
@@ -15,7 +23,7 @@ Especialista exclusivo em GA4 (Measurement Protocol) + Google Ads (Enhanced Conv
|
|
|
15
23
|
|
|
16
24
|
### PASSO 0 — Ler Versões Atuais
|
|
17
25
|
|
|
18
|
-
```
|
|
26
|
+
```typescript
|
|
19
27
|
// Ler versões do arquivo centralizado
|
|
20
28
|
const apiVersions = await readJSON('contracts/api-versions.json');
|
|
21
29
|
const googleVersions = apiVersions.google;
|
|
@@ -35,6 +43,124 @@ if (isVersionConflict) {
|
|
|
35
43
|
|
|
36
44
|
---
|
|
37
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
|
+
|
|
38
164
|
## 🛠️ O QUE VOCÊ GERA
|
|
39
165
|
|
|
40
166
|
### 1. Browser (Direct SDK)
|
|
@@ -87,7 +213,7 @@ Gere payloads para o Worker seguir o protocolo oficial:
|
|
|
87
213
|
{
|
|
88
214
|
"arquivos_gerados": {
|
|
89
215
|
"browser": "cdpTrack.js (eventos GA4 injetados)",
|
|
90
|
-
"server": "
|
|
216
|
+
"server": "modules/dispatch/ga4.ts"
|
|
91
217
|
},
|
|
92
218
|
"versao_api": {
|
|
93
219
|
"ga4_mp": "latest",
|
|
@@ -51,40 +51,34 @@ O Master Orchestrator DEVE configurar o Intelligence Agent para rodar nos seguin
|
|
|
51
51
|
|
|
52
52
|
### IMPLEMENTAÇÃO DO SCHEDULING (No Worker)
|
|
53
53
|
|
|
54
|
-
Adicionar ao `wrangler.toml` e `
|
|
54
|
+
Adicionar ao `wrangler.toml` e `index.ts`:
|
|
55
55
|
|
|
56
56
|
```toml
|
|
57
57
|
# wrangler.toml — Adicionar triggers de cron
|
|
58
58
|
[[triggers.crons]]
|
|
59
59
|
cron = "0 2 * * 0" # Domingo 02:00 UTC — Semanal
|
|
60
|
-
schedule = "weekly-intelligence-check"
|
|
61
60
|
|
|
62
61
|
[[triggers.crons]]
|
|
63
62
|
cron = "0 3 1 * *" # 1º do mês 03:00 UTC — Mensal
|
|
64
|
-
schedule = "monthly-privacy-audit"
|
|
65
63
|
```
|
|
66
64
|
|
|
67
|
-
```
|
|
68
|
-
//
|
|
65
|
+
```typescript
|
|
66
|
+
// index.ts — Handler scheduled() (Cloudflare usa scheduled, não fetch para crons)
|
|
69
67
|
export default {
|
|
70
|
-
async fetch(request, env, ctx) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return await runIntelligenceMonthly(env, ctx);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return new Response('Not Found', { status: 404 });
|
|
68
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext) {
|
|
69
|
+
// Handler principal de eventos
|
|
70
|
+
return handleRequest(request, env, ctx);
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
async scheduled(event: ScheduledEvent, env: Env, ctx: ExecutionContext) {
|
|
74
|
+
const cron = event.cron;
|
|
75
|
+
const isMonthly = cron === '0 3 1 * *';
|
|
76
|
+
|
|
77
|
+
ctx.waitUntil(
|
|
78
|
+
isMonthly
|
|
79
|
+
? runIntelligenceMonthly(env)
|
|
80
|
+
: runIntelligenceWeekly(env)
|
|
81
|
+
);
|
|
88
82
|
}
|
|
89
83
|
};
|
|
90
84
|
|
|
@@ -157,12 +151,12 @@ Timestamp: ${new Date().toISOString()}
|
|
|
157
151
|
`.trim();
|
|
158
152
|
|
|
159
153
|
// Enviar via WhatsApp Agent
|
|
160
|
-
if (env.
|
|
161
|
-
await fetch(`https://graph.facebook.com/v22.0/${env.
|
|
154
|
+
if (env.WHATSAPP_PHONE_NUMBER_ID && env.ADMIN_PHONE_NUMBER) {
|
|
155
|
+
await fetch(`https://graph.facebook.com/v22.0/${env.WHATSAPP_PHONE_NUMBER_ID}/messages`, {
|
|
162
156
|
method: 'POST',
|
|
163
157
|
headers: {
|
|
164
158
|
'Content-Type': 'application/json',
|
|
165
|
-
'Authorization': `Bearer ${env.
|
|
159
|
+
'Authorization': `Bearer ${env.WHATSAPP_ACCESS_TOKEN}`
|
|
166
160
|
},
|
|
167
161
|
body: JSON.stringify({
|
|
168
162
|
messaging_product: 'whatsapp',
|
|
@@ -202,7 +196,7 @@ Quando o Intelligence Agent detectar API desatualizada, emitir alerta estruturad
|
|
|
202
196
|
],
|
|
203
197
|
"action_required": {
|
|
204
198
|
"urgency": "IMMEDIATO",
|
|
205
|
-
"files_to_update": ["
|
|
199
|
+
"files_to_update": ["index.ts", "meta-agent.md"],
|
|
206
200
|
"migration_guide": "https://developers.facebook.com/docs/graph-changelog",
|
|
207
201
|
"estimated_time": "30 minutos"
|
|
208
202
|
},
|
|
@@ -221,7 +215,7 @@ Quando o Intelligence Agent detectar API desatualizada, emitir alerta estruturad
|
|
|
221
215
|
|
|
222
216
|
O Intelligence Agent DEVE executar auditoria completa mensal de LGPD/GDPR/CCPA:
|
|
223
217
|
|
|
224
|
-
```
|
|
218
|
+
```typescript
|
|
225
219
|
async function auditPrivacyCompliance(env) {
|
|
226
220
|
const issues = [];
|
|
227
221
|
|
|
@@ -243,7 +237,7 @@ async function auditPrivacyCompliance(env) {
|
|
|
243
237
|
platform: 'meta/tiktok/pinterest/reddit',
|
|
244
238
|
issue: 'PII enviada sem SHA-256 hashing',
|
|
245
239
|
severity: 'CRITICAL',
|
|
246
|
-
fix: 'Usar crypto.subtle.digest para email/phone no
|
|
240
|
+
fix: 'Usar crypto.subtle.digest para email/phone no index.ts'
|
|
247
241
|
});
|
|
248
242
|
}
|
|
249
243
|
|
|
@@ -271,7 +265,7 @@ async function auditPrivacyCompliance(env) {
|
|
|
271
265
|
|
|
272
266
|
O Intelligence Agent DEVE verificar se alguma API está prestes a ser descontinuada:
|
|
273
267
|
|
|
274
|
-
```
|
|
268
|
+
```typescript
|
|
275
269
|
async function checkApiDepreciations(env) {
|
|
276
270
|
const deprecationSchedule = {
|
|
277
271
|
meta: {
|
|
@@ -306,11 +300,38 @@ async function checkApiDepreciations(env) {
|
|
|
306
300
|
|
|
307
301
|
---
|
|
308
302
|
|
|
303
|
+
### MONITORAMENTO AUTOMÁTICO DE MATCH QUALITY (CRON SEMANAL)
|
|
304
|
+
|
|
305
|
+
O Intelligence Agent monitora a qualidade dos dados enviados ao Meta CAPI a cada execução do cron.
|
|
306
|
+
Os dados são lidos da tabela `match_quality_log` (populada automaticamente pelo Worker a cada dispatch).
|
|
307
|
+
|
|
308
|
+
**Thresholds obrigatórios — alertar via CallMeBot se:**
|
|
309
|
+
|
|
310
|
+
| Métrica | Threshold mínimo | Ação automática |
|
|
311
|
+
|---|---|---|
|
|
312
|
+
| `email_rate` | 40% dos eventos com email | Alerta ⚠️ — verificar Identity Graph |
|
|
313
|
+
| `fbp_rate` | 30% dos eventos com cookie fbp | Alerta ⚠️ — verificar cdpTrack.js |
|
|
314
|
+
| `composite_score` | 45% (email×0.4 + fbp×0.3 + phone×0.2 + fbc×0.1) | Alerta 🚨 CRÍTICO |
|
|
315
|
+
|
|
316
|
+
**O cron semanal executa automaticamente (sem intervenção manual):**
|
|
317
|
+
1. `_trainLtvModel(env)` — re-treina regressão logística com últimos 5000 leads do D1; pesos salvos em `ltv_model_weights` e cache KV invalidado
|
|
318
|
+
2. `_autoDecideAbWinner(env)` — declara winner de A/B LTV se melhoria ≥ 5pp vs controle; alerta WhatsApp automático
|
|
319
|
+
3. `_analyzeMatchQuality(env)` — analisa janela 2h; dispara alertas CallMeBot se abaixo dos thresholds
|
|
320
|
+
4. `syncMetaCustomAudience(env)` — sincroniza leads high_intent com Meta Custom Audience
|
|
321
|
+
|
|
322
|
+
**Auto-recuperação integrada ao dispatch:**
|
|
323
|
+
- Antes de cada envio ao Meta CAPI, o Worker tenta enriquecer automaticamente o payload consultando o Identity Graph pelo `userId` (recupera email, fbp, fbc, phone ausentes)
|
|
324
|
+
- Resultado de recuperação é logado em `match_quality_log.was_email_recovered`
|
|
325
|
+
|
|
326
|
+
**Pré-requisito de infraestrutura:** `migrate-v7.sql` deve estar aplicada no D1 (tabelas `ltv_model_weights` + `match_quality_log`).
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
309
330
|
### CHECK DE NOVOS PARÂMETROS DE EVENT MATCH QUALITY
|
|
310
331
|
|
|
311
332
|
O Intelligence Agent DEVE buscar novos parâmetros que melhoram a nota de atribuição:
|
|
312
333
|
|
|
313
|
-
```
|
|
334
|
+
```typescript
|
|
314
335
|
async function checkNewMatchQualityParams(env) {
|
|
315
336
|
const platforms = {
|
|
316
337
|
meta: 'https://developers.facebook.com/docs/marketing-api/conversions-api/parameters',
|
|
@@ -363,3 +384,142 @@ INTELLIGENCE_SCHEDULE_MONTHLY = "0 3 1 * *"
|
|
|
363
384
|
3. **Alerta Pré-ativo**: Antes de uma API ser descontinuada, alertar com 30 dias de antecedência
|
|
364
385
|
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
386
|
5. **Backoff de Check**: Se o check falhar (API indisponível), tentar novamente em 1 hora (não disparar alerta imediato)
|
|
387
|
+
6. **Anti-Spam**: Não disparar alerta se o mesmo problema já foi reportado nas últimas 24h
|
|
388
|
+
7. **Prioridade Correta**: CRITICAL (agora), HIGH (até 1h), MEDIUM (no relatório)
|
|
389
|
+
8. **Log de Falhas de Alerta**: Se WhatsApp falhar 3× consecutivas, registrar no D1 e tentar via CallMeBot fallback
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
## 🗄️ SCHEMA D1 — intelligence_logs
|
|
394
|
+
|
|
395
|
+
Adicionar ao `server-edge-tracker/schema.sql`:
|
|
396
|
+
|
|
397
|
+
```sql
|
|
398
|
+
-- TABELA DE LOGS DO INTELLIGENCE AGENT
|
|
399
|
+
CREATE TABLE IF NOT EXISTS intelligence_logs (
|
|
400
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
401
|
+
run_type TEXT NOT NULL, -- 'weekly' | 'monthly' | 'on-demand'
|
|
402
|
+
platforms_checked TEXT, -- JSON array de plataformas verificadas
|
|
403
|
+
issues_found TEXT, -- JSON array de issues encontradas
|
|
404
|
+
issues_count INTEGER DEFAULT 0,
|
|
405
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
406
|
+
);
|
|
407
|
+
|
|
408
|
+
CREATE INDEX IF NOT EXISTS idx_intel_logs_type ON intelligence_logs(run_type);
|
|
409
|
+
CREATE INDEX IF NOT EXISTS idx_intel_logs_created ON intelligence_logs(created_at);
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
---
|
|
413
|
+
|
|
414
|
+
## ✅ CHECKLIST DE IMPLEMENTAÇÃO
|
|
415
|
+
|
|
416
|
+
Antes de considerar o scheduling implementado, verificar:
|
|
417
|
+
|
|
418
|
+
- [ ] Cron triggers adicionados ao `wrangler.toml` (`0 2 * * 7` e `0 3 1 * *`)
|
|
419
|
+
- [ ] Handlers `scheduled()` adicionados ao `index.ts` (Cloudflare usa `scheduled`, não `fetch`)
|
|
420
|
+
- [ ] Schema D1 atualizado com tabela `intelligence_logs`
|
|
421
|
+
- [ ] Funções de check de versão implementadas com endpoints reais
|
|
422
|
+
- [ ] Funções de auditoria de privacidade implementadas
|
|
423
|
+
- [ ] Sistema de alerta (WhatsApp/CallMeBot) integrado com anti-spam 24h
|
|
424
|
+
- [ ] Logs de execução sendo salvos no D1
|
|
425
|
+
- [ ] Memory Agent atualizado após cada check
|
|
426
|
+
- [ ] Backoff implementado para evitar spam de alertas
|
|
427
|
+
- [ ] Teste manual executado (`GET /api/intelligence/check`)
|
|
428
|
+
|
|
429
|
+
---
|
|
430
|
+
|
|
431
|
+
## INPUTS RECEBIDOS
|
|
432
|
+
|
|
433
|
+
- `wrangler.toml` do Worker (para injetar Cron Triggers)
|
|
434
|
+
- `index.ts` (para injetar handlers de `scheduled` events)
|
|
435
|
+
- `schema.sql` (para adicionar tabela `intelligence_logs`)
|
|
436
|
+
- Secrets: `WHATSAPP_PHONE_NUMBER_ID`, `WHATSAPP_ACCESS_TOKEN`, `ADMIN_PHONE_NUMBER` (para alertas)
|
|
437
|
+
- `contracts/api-versions.json` (fonte de verdade das versões atuais)
|
|
438
|
+
|
|
439
|
+
## RESPONSABILIDADE
|
|
440
|
+
|
|
441
|
+
- Configurar Cron Triggers no `wrangler.toml`: semanal (domingo 02:00 UTC) e mensal (1º do mês 03:00 UTC)
|
|
442
|
+
- Implementar handler `scheduled(event, env, ctx)` no Worker
|
|
443
|
+
- Chamar `runIntelligenceWeekly()` quando `event.cron === "0 2 * * 7"`
|
|
444
|
+
- Chamar `runIntelligenceMonthly()` quando `event.cron === "0 3 1 * *"`
|
|
445
|
+
- Adicionar tabela `intelligence_logs` ao schema D1
|
|
446
|
+
- Disparar alertas WhatsApp/CallMeBot ao admin apenas quando houver issues críticos
|
|
447
|
+
- Evitar spam: não repetir alerta do mesmo issue em menos de 24h
|
|
448
|
+
- Registrar resultado de cada execução no D1 (`intelligence_logs`)
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## 🔄 CRON DE NEGÓCIO — Sales Engine (Quando Lead Scoring habilitado)
|
|
453
|
+
|
|
454
|
+
Além do cron técnico de versões de API, o Intelligence Agent é responsável pelo **cron de negócio semanal** que alimenta o Sales Engine. Ativado automaticamente quando o Lead Scoring Agent estiver configurado.
|
|
455
|
+
|
|
456
|
+
### Cron Semanal de Negócio (`runIntelligenceWeekly`)
|
|
457
|
+
|
|
458
|
+
```
|
|
459
|
+
Domingo 02:00 UTC — executa sequencialmente:
|
|
460
|
+
│
|
|
461
|
+
├─ 1. ROAS Feedback Loop (modules/ml/roas.ts)
|
|
462
|
+
│ → cruza leads × Purchase events dos últimos 30 dias por campanha
|
|
463
|
+
│ → agrupa por utm_source × utm_campaign × utm_content (quiz_* vs video_* vs landing_* vs ctwa_*)
|
|
464
|
+
│ → calcula: conversion_rate, revenue_per_lead, ltv_accuracy por origem de funil
|
|
465
|
+
│ → gera bid_recommendation: increase | maintain | decrease | pause
|
|
466
|
+
│ → persiste em roas_reports (inclui utm_content), envia relatório via CallMeBot
|
|
467
|
+
│
|
|
468
|
+
├─ 2. Nurture Queue (modules/nurture.ts)
|
|
469
|
+
│ → processa fila de follow-up pós-quiz por qualification:
|
|
470
|
+
│ comprador → contato imediato (já disparado no QuizComplete)
|
|
471
|
+
│ interessado → D+1, D+3, D+7 via WhatsApp
|
|
472
|
+
│ curioso → D+2, D+5 (conteúdo/isca)
|
|
473
|
+
│ perdido → cohort_label = excluded (remove do remarketing)
|
|
474
|
+
│ → envia mensagens WhatsApp via Meta Cloud API / CallMeBot
|
|
475
|
+
│
|
|
476
|
+
├─ 3. Lookalike Seed (syncMetaLookalikeSeed)
|
|
477
|
+
│ → seed com compradores CONFIRMADOS (Purchase nos últimos 60 dias)
|
|
478
|
+
│ → une com leads qualificados como comprador no quiz
|
|
479
|
+
│ → atualiza cohort_label = buyer_confirmed nos perfis
|
|
480
|
+
│ → persiste histórico em lookalike_seeds
|
|
481
|
+
│
|
|
482
|
+
├─ 4. LTV Model Training (modules/ml/logistic.ts)
|
|
483
|
+
│ → regressão logística com dados reais de conversão acumulados
|
|
484
|
+
│ → atualiza ltv_model_weights no D1
|
|
485
|
+
│
|
|
486
|
+
└─ 5. A/B LTV Auto-winner
|
|
487
|
+
→ declara vencedor quando amostra suficiente (p-value < 0.05)
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### Schema necessário para o Sales Engine
|
|
491
|
+
|
|
492
|
+
```bash
|
|
493
|
+
# Aplicado automaticamente pelo DevOps Agent quando Lead Scoring habilitado
|
|
494
|
+
wrangler d1 execute cdp-edge-db --file=schema-quiz.sql --remote # Fase 6
|
|
495
|
+
wrangler d1 execute cdp-edge-db --file=schema-sales-engine.sql --remote # Fase 7
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
**Tabelas gerenciadas pelo cron de negócio:**
|
|
499
|
+
- `roas_reports` — histórico de ROAS por campanha
|
|
500
|
+
- `nurture_sequences` — fila de follow-up por lead
|
|
501
|
+
- `lookalike_seeds` — histórico de seeds de Lookalike enviados ao Meta
|
|
502
|
+
|
|
503
|
+
## SAÍDA
|
|
504
|
+
|
|
505
|
+
```json
|
|
506
|
+
{
|
|
507
|
+
"arquivos_modificados": [
|
|
508
|
+
"wrangler.toml (cron triggers adicionados)",
|
|
509
|
+
"index.ts (handler scheduled() adicionado)",
|
|
510
|
+
"schema.sql (tabela intelligence_logs adicionada)"
|
|
511
|
+
],
|
|
512
|
+
"crons_configurados": {
|
|
513
|
+
"semanal": "0 2 * * 7 (domingo 02:00 UTC — check de versões)",
|
|
514
|
+
"mensal": "0 3 1 * * (dia 1 03:00 UTC — auditoria privacidade)"
|
|
515
|
+
},
|
|
516
|
+
"endpoint_manual": "GET /api/intelligence/check",
|
|
517
|
+
"alertas": {
|
|
518
|
+
"canal_primario": "WhatsApp Meta Cloud API v22.0",
|
|
519
|
+
"canal_fallback": "CallMeBot",
|
|
520
|
+
"anti_spam": "24h cooldown por issue"
|
|
521
|
+
},
|
|
522
|
+
"d1_tabela": "intelligence_logs",
|
|
523
|
+
"secrets_necessarios": ["WHATSAPP_PHONE_NUMBER_ID", "WHATSAPP_ACCESS_TOKEN", "ADMIN_PHONE_NUMBER"]
|
|
524
|
+
}
|
|
525
|
+
```
|