cdp-edge 1.2.0 → 1.3.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 (142) hide show
  1. package/README.md +153 -306
  2. package/bin/cdp-edge.js +71 -61
  3. package/contracts/agent-versions.json +682 -0
  4. package/contracts/api-versions.json +372 -368
  5. package/contracts/types.ts +81 -0
  6. package/dist/commands/analyze.js +52 -52
  7. package/dist/commands/infra.js +54 -54
  8. package/dist/commands/install.js +26 -3
  9. package/dist/commands/server.js +174 -174
  10. package/dist/commands/setup.js +332 -100
  11. package/dist/commands/validate.js +248 -84
  12. package/dist/index.js +12 -12
  13. package/dist/sdk/cdpTrack.js +2095 -0
  14. package/dist/sdk/cdpTrack.min.js +64 -0
  15. package/dist/sdk/install-snippet.html +10 -0
  16. package/docs/whatsapp-ctwa.md +5 -4
  17. package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +89 -0
  18. package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +101 -0
  19. package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -364
  20. package/extracted-skill/tracking-events-generator/agents/ab-ltv-agent.md +196 -0
  21. package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +1 -1
  22. package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +41 -41
  23. package/extracted-skill/tracking-events-generator/agents/bidding-agent.md +347 -0
  24. package/extracted-skill/tracking-events-generator/agents/bing-agent.md +40 -50
  25. package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +174 -74
  26. package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +1 -1
  27. package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +25 -5
  28. package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +10 -10
  29. package/extracted-skill/tracking-events-generator/agents/database-agent.md +43 -42
  30. package/extracted-skill/tracking-events-generator/agents/debug-agent.md +22 -22
  31. package/extracted-skill/tracking-events-generator/agents/devops-agent.md +232 -0
  32. package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +23 -9
  33. package/extracted-skill/tracking-events-generator/agents/email-agent.md +28 -1
  34. package/extracted-skill/tracking-events-generator/agents/evo-crm-agent.md +244 -0
  35. package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +206 -1
  36. package/extracted-skill/tracking-events-generator/agents/fraud-detection-agent.md +143 -0
  37. package/extracted-skill/tracking-events-generator/agents/google-agent.md +128 -2
  38. package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +191 -31
  39. package/extracted-skill/tracking-events-generator/agents/lead-scoring-agent.md +282 -0
  40. package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +145 -34
  41. package/extracted-skill/tracking-events-generator/agents/localization-agent.md +1 -1
  42. package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +5 -5
  43. package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +81 -21
  44. package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +428 -190
  45. package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +304 -0
  46. package/extracted-skill/tracking-events-generator/agents/memory-agent.json +25 -109
  47. package/extracted-skill/tracking-events-generator/agents/memory-agent.md +190 -15
  48. package/extracted-skill/tracking-events-generator/agents/meta-agent.md +10 -2
  49. package/extracted-skill/tracking-events-generator/agents/ml-clustering-agent.md +749 -0
  50. package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +21 -4
  51. package/extracted-skill/tracking-events-generator/agents/performance-agent.md +41 -31
  52. package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +18 -8
  53. package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +14 -6
  54. package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +7 -7
  55. package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +16 -8
  56. package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +15 -7
  57. package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +157 -48
  58. package/extracted-skill/tracking-events-generator/agents/server-tracking.md +35 -35
  59. package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +15 -7
  60. package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +73 -2
  61. package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +104 -9
  62. package/extracted-skill/tracking-events-generator/agents/utm-agent.md +322 -0
  63. package/extracted-skill/tracking-events-generator/agents/validator-agent.md +13 -9
  64. package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +112 -4
  65. package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +58 -5
  66. package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +26 -18
  67. package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +152 -37
  68. package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -285
  69. package/extracted-skill/tracking-events-generator/cdpTrack.js +642 -641
  70. package/extracted-skill/tracking-events-generator/contracts/api-versions.json +14 -10
  71. package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -226
  72. package/extracted-skill/tracking-events-generator/evals/evals.json +235 -235
  73. package/extracted-skill/tracking-events-generator/integration-test.js +497 -497
  74. package/extracted-skill/tracking-events-generator/knowledge-base.md +172 -0
  75. package/extracted-skill/tracking-events-generator/micro-events.js +992 -992
  76. package/extracted-skill/tracking-events-generator/models/lancamento-imobiliario.md +344 -0
  77. package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -144
  78. package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -48
  79. package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -28
  80. package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +83 -19
  81. package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -205
  82. package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -56
  83. package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -19
  84. package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -425
  85. package/extracted-skill/tracking-events-generator/route-intent-capture.js +222 -0
  86. package/extracted-skill/tracking-events-generator/tracking.config.js +3 -3
  87. package/package.json +89 -75
  88. package/scripts/build-sdk.js +106 -0
  89. package/server-edge-tracker/.client.env.example +14 -0
  90. package/server-edge-tracker/INSTALAR.md +222 -23
  91. package/server-edge-tracker/SEGMENTATION-DOCS.md +513 -0
  92. package/server-edge-tracker/config/utm-mapping.json +64 -0
  93. package/server-edge-tracker/deploy-client.cjs +76 -0
  94. package/server-edge-tracker/index.ts +1230 -0
  95. package/server-edge-tracker/migrate-v7.sql +64 -0
  96. package/server-edge-tracker/modules/db.ts +710 -0
  97. package/server-edge-tracker/modules/dispatch/crm.ts +382 -0
  98. package/server-edge-tracker/modules/dispatch/ga4.ts +72 -0
  99. package/server-edge-tracker/modules/dispatch/meta.ts +143 -0
  100. package/server-edge-tracker/modules/dispatch/platforms.ts +255 -0
  101. package/server-edge-tracker/modules/dispatch/tiktok.ts +107 -0
  102. package/server-edge-tracker/modules/dispatch/whatsapp.ts +296 -0
  103. package/server-edge-tracker/modules/intelligence.ts +589 -0
  104. package/server-edge-tracker/modules/ml/bidding.ts +247 -0
  105. package/server-edge-tracker/modules/ml/fraud.ts +302 -0
  106. package/server-edge-tracker/modules/ml/logistic.ts +226 -0
  107. package/server-edge-tracker/modules/ml/ltv.ts +531 -0
  108. package/server-edge-tracker/modules/ml/matchquality.ts +232 -0
  109. package/server-edge-tracker/modules/ml/quiz.ts +343 -0
  110. package/server-edge-tracker/modules/ml/roas.ts +255 -0
  111. package/server-edge-tracker/modules/ml/segmentation.ts +407 -0
  112. package/server-edge-tracker/modules/nurture.ts +257 -0
  113. package/server-edge-tracker/modules/utils.ts +311 -0
  114. package/server-edge-tracker/modules/utm/utm-enricher.ts +231 -0
  115. package/server-edge-tracker/schema-ab-ltv.sql +97 -0
  116. package/server-edge-tracker/schema-bidding.sql +86 -0
  117. package/server-edge-tracker/schema-fraud.sql +90 -0
  118. package/server-edge-tracker/schema-indexes.sql +67 -0
  119. package/server-edge-tracker/schema-ltv-feedback.sql +11 -0
  120. package/server-edge-tracker/schema-quiz.sql +52 -0
  121. package/server-edge-tracker/schema-sales-engine.sql +113 -0
  122. package/server-edge-tracker/schema-segmentation.sql +219 -0
  123. package/server-edge-tracker/schema-utm.sql +82 -0
  124. package/server-edge-tracker/schema.sql +281 -265
  125. package/server-edge-tracker/types.ts +275 -0
  126. package/server-edge-tracker/wrangler.toml +140 -85
  127. package/templates/lancamento-imobiliario.md +344 -0
  128. package/templates/multi-step-checkout.md +3 -4
  129. package/templates/pinterest/conversions-api-template.js +144 -144
  130. package/templates/pinterest/event-mappings.json +48 -48
  131. package/templates/pinterest/tag-template.js +28 -28
  132. package/templates/quiz-funnel.md +83 -19
  133. package/templates/reddit/conversions-api-template.js +205 -205
  134. package/templates/reddit/event-mappings.json +56 -56
  135. package/templates/reddit/pixel-template.js +12 -39
  136. package/templates/scenarios/behavior-engine.js +45 -22
  137. package/docs/PixelBuilder-Documentacao-Completa (2).docx +0 -0
  138. package/docs/installation.md +0 -155
  139. package/docs/quick-start.md +0 -185
  140. package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +0 -1419
  141. package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +0 -643
  142. 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
- ```javascript
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": "cloudflare/google-mp.js"
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 `worker.js`:
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
- ```javascript
68
- // worker.jsAdicionar handler de cron
65
+ ```typescript
66
+ // index.tsHandler scheduled() (Cloudflare usa scheduled, não fetch para crons)
69
67
  export default {
70
- async fetch(request, env, ctx) {
71
- const url = new URL(request.url);
72
-
73
- // Handler principal
74
- if (url.pathname === '/api/track') {
75
- return handleTracking(request, env, ctx);
76
- }
77
-
78
- // Handlers de Intelligence Agent (schedulados)
79
- if (url.pathname === '/cron/intelligence-weekly') {
80
- return await runIntelligenceWeekly(env, ctx);
81
- }
82
-
83
- if (url.pathname === '/cron/intelligence-monthly') {
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.WA_PHONE_ID && env.ADMIN_PHONE_NUMBER) {
161
- await fetch(`https://graph.facebook.com/v22.0/${env.WA_PHONE_ID}/messages`, {
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.WA_ACCESS_TOKEN}`
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": ["worker.js", "meta-agent.md"],
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
- ```javascript
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 worker.js'
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
- ```javascript
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
- ```javascript
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
+ ```