cdp-edge 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/README.md +367 -0
  2. package/bin/cdp-edge.js +61 -0
  3. package/contracts/api-versions.json +368 -0
  4. package/dist/commands/analyze.js +52 -0
  5. package/dist/commands/infra.js +54 -0
  6. package/dist/commands/install.js +168 -0
  7. package/dist/commands/server.js +174 -0
  8. package/dist/commands/setup.js +123 -0
  9. package/dist/commands/validate.js +84 -0
  10. package/dist/index.js +12 -0
  11. package/docs/CI-CD-SETUP.md +217 -0
  12. package/docs/PixelBuilder-Documentacao-Completa (2).docx +0 -0
  13. package/docs/events-reference.md +359 -0
  14. package/docs/installation.md +155 -0
  15. package/docs/quick-start.md +185 -0
  16. package/docs/sdk-reference.md +371 -0
  17. package/docs/whatsapp-ctwa.md +209 -0
  18. package/extracted-skill/tracking-events-generator/INDEX.md +94 -0
  19. package/extracted-skill/tracking-events-generator/INSTALACAO-CDPEDGE.md +58 -0
  20. package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +594 -0
  21. package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +412 -0
  22. package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +333 -0
  23. package/extracted-skill/tracking-events-generator/SKILL.md +257 -0
  24. package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -0
  25. package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +54 -0
  26. package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +1304 -0
  27. package/extracted-skill/tracking-events-generator/agents/bing-agent.md +76 -0
  28. package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +264 -0
  29. package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +149 -0
  30. package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +2077 -0
  31. package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +1419 -0
  32. package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +456 -0
  33. package/extracted-skill/tracking-events-generator/agents/database-agent.md +667 -0
  34. package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1455 -0
  35. package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +224 -0
  36. package/extracted-skill/tracking-events-generator/agents/email-agent.md +61 -0
  37. package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +52 -0
  38. package/extracted-skill/tracking-events-generator/agents/google-agent.md +109 -0
  39. package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +365 -0
  40. package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +643 -0
  41. package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +62 -0
  42. package/extracted-skill/tracking-events-generator/agents/localization-agent.md +55 -0
  43. package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +59 -0
  44. package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +900 -0
  45. package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +1922 -0
  46. package/extracted-skill/tracking-events-generator/agents/memory-agent.json +109 -0
  47. package/extracted-skill/tracking-events-generator/agents/memory-agent.md +703 -0
  48. package/extracted-skill/tracking-events-generator/agents/meta-agent.md +110 -0
  49. package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +255 -0
  50. package/extracted-skill/tracking-events-generator/agents/performance-agent.md +1157 -0
  51. package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +1432 -0
  52. package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +310 -0
  53. package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +849 -0
  54. package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +250 -0
  55. package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +313 -0
  56. package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1752 -0
  57. package/extracted-skill/tracking-events-generator/agents/server-tracking.md +1188 -0
  58. package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +383 -0
  59. package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +111 -0
  60. package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +364 -0
  61. package/extracted-skill/tracking-events-generator/agents/validator-agent.md +267 -0
  62. package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +69 -0
  63. package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +76 -0
  64. package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +699 -0
  65. package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +422 -0
  66. package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -0
  67. package/extracted-skill/tracking-events-generator/cdpTrack.js +641 -0
  68. package/extracted-skill/tracking-events-generator/contracts/api-versions.json +368 -0
  69. package/extracted-skill/tracking-events-generator/docs/guia-cloudflare-iniciante.md +107 -0
  70. package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -0
  71. package/extracted-skill/tracking-events-generator/evals/evals.json +235 -0
  72. package/extracted-skill/tracking-events-generator/integration-test.js +497 -0
  73. package/extracted-skill/tracking-events-generator/knowledge-base.md +2894 -0
  74. package/extracted-skill/tracking-events-generator/micro-events.js +992 -0
  75. package/extracted-skill/tracking-events-generator/models/captura-de-lead.md +78 -0
  76. package/extracted-skill/tracking-events-generator/models/captura-lead-evento-externo.md +99 -0
  77. package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +111 -0
  78. package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +672 -0
  79. package/extracted-skill/tracking-events-generator/models/pagina-obrigado.md +55 -0
  80. package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -0
  81. package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -0
  82. package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -0
  83. package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +68 -0
  84. package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -0
  85. package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -0
  86. package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -0
  87. package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -0
  88. package/extracted-skill/tracking-events-generator/models/scenarios/real-estate-logic.md +50 -0
  89. package/extracted-skill/tracking-events-generator/models/scenarios/sales-page-logic.md +50 -0
  90. package/extracted-skill/tracking-events-generator/models/trafego-direto.md +582 -0
  91. package/extracted-skill/tracking-events-generator/models/webinar-registration.md +63 -0
  92. package/extracted-skill/tracking-events-generator/tracking.config.js +46 -0
  93. package/extracted-skill/tracking-events-generator/walkthrough.md +26 -0
  94. package/package.json +75 -0
  95. package/server-edge-tracker/INSTALAR.md +328 -0
  96. package/server-edge-tracker/migrate-new-db.sql +137 -0
  97. package/server-edge-tracker/migrate-v2.sql +16 -0
  98. package/server-edge-tracker/migrate-v3.sql +6 -0
  99. package/server-edge-tracker/migrate-v4.sql +18 -0
  100. package/server-edge-tracker/migrate-v5.sql +17 -0
  101. package/server-edge-tracker/migrate-v6.sql +24 -0
  102. package/server-edge-tracker/migrate.sql +111 -0
  103. package/server-edge-tracker/schema.sql +265 -0
  104. package/server-edge-tracker/worker.js +2574 -0
  105. package/server-edge-tracker/wrangler.toml +85 -0
  106. package/templates/afiliado-sem-landing.md +312 -0
  107. package/templates/captura-de-lead.md +78 -0
  108. package/templates/captura-lead-evento-externo.md +99 -0
  109. package/templates/checkout-proprio.md +111 -0
  110. package/templates/install/.claude/commands/cdp.md +1 -0
  111. package/templates/install/CLAUDE.md +65 -0
  112. package/templates/linkedin/tag-template.js +46 -0
  113. package/templates/multi-step-checkout.md +673 -0
  114. package/templates/pagina-obrigado.md +55 -0
  115. package/templates/pinterest/conversions-api-template.js +144 -0
  116. package/templates/pinterest/event-mappings.json +48 -0
  117. package/templates/pinterest/tag-template.js +28 -0
  118. package/templates/quiz-funnel.md +68 -0
  119. package/templates/reddit/conversions-api-template.js +205 -0
  120. package/templates/reddit/event-mappings.json +56 -0
  121. package/templates/reddit/pixel-template.js +46 -0
  122. package/templates/scenarios/behavior-engine.js +402 -0
  123. package/templates/scenarios/real-estate-logic.md +50 -0
  124. package/templates/scenarios/sales-page-logic.md +50 -0
  125. package/templates/spotify/pixel-template.js +46 -0
  126. package/templates/trafego-direto.md +582 -0
  127. package/templates/vsl-page.md +292 -0
  128. package/templates/webinar-registration.md +63 -0
@@ -0,0 +1,643 @@
1
+ # Intelligence Agent — Configuração de Scheduling Automático
2
+
3
+ Este arquivo documenta como configurar o Intelligence Agent para rodar automaticamente em intervalos regulares, garantindo que o ecossistema CDP Edge esteja sempre atualizado com as últimas versões de API e conformidades de privacidade.
4
+
5
+ ---
6
+
7
+ ## 📅 VISÃO GERAL DO SCHEDULING
8
+
9
+ O Intelligence Agent possui três níveis de execução automática:
10
+
11
+ | Tipo | Frequência | Horário | Objetivo | Impacto |
12
+ |-------|-------------|----------|-----------|----------|
13
+ | **Semanal** | Domingo 02:00 UTC | Verificação completa de versões | 🔴 CRÍTICO |
14
+ | **Mensal** | 1º do mês 03:00 UTC | Auditoria de privacidade + depreciações | 🔴 CRÍTICO |
15
+ | **On-Demand** | A qualquer momento | Check específico quando houver suspeita | 🟠 HIGH |
16
+
17
+ ---
18
+
19
+ ## 🚀 IMPLEMENTAÇÃO NO CLOUDFLARE WORKER
20
+
21
+ ### PASSO 1 — Configurar Triggers no wrangler.toml
22
+
23
+ Adicionar ao arquivo `server-edge-tracker/wrangler.toml` (ou `wrangler.toml` do Worker):
24
+
25
+ ```toml
26
+ # ===========================================
27
+ # INTELLIGENCE AGENT — SCHEDULING
28
+ # ===========================================
29
+
30
+ # Trigger Semanal — Domingo 02:00 UTC (Verificação de versões de API)
31
+ [[triggers.crons]]
32
+ cron = "0 2 * * 0"
33
+ schedule = "weekly-intelligence-check"
34
+
35
+ # Trigger Mensal — 1º do mês 03:00 UTC (Auditoria de privacidade + depreciações)
36
+ [[triggers.crons]]
37
+ cron = "0 3 1 * *"
38
+ schedule = "monthly-privacy-audit"
39
+
40
+ # Variáveis de ambiente para controlar o scheduling
41
+ [vars]
42
+ INTELLIGENCE_ENABLED = true
43
+ INTELLIGENCE_WEEKLY_CRON = "0 2 * * 0"
44
+ INTELLIGENCE_MONTHLY_CRON = "0 3 1 * *"
45
+ INTELLIGENCE_ALERT_ENABLED = true
46
+ ```
47
+
48
+ ---
49
+
50
+ ### PASSO 2 — Adicionar Handlers no worker.js
51
+
52
+ Adicionar ao arquivo `server-edge-tracker/worker.js`:
53
+
54
+ ```javascript
55
+ // ===========================================
56
+ // INTELLIGENCE AGENT — SCHEDULING
57
+ // ===========================================
58
+
59
+ /**
60
+ * Handler Semanal — Check completo de versões de API
61
+ * Roda: Domingo 02:00 UTC
62
+ * Objetivo: Garantir que todas as APIs estejam atualizadas
63
+ */
64
+ export async function runIntelligenceWeekly(env, ctx) {
65
+ console.log('🕵️‍♂️ Intelligence Agent — Check Semanal iniciado');
66
+ console.log('📅 Horário:', new Date().toISOString());
67
+
68
+ try {
69
+ const platforms = ['meta', 'google', 'tiktok', 'pinterest', 'reddit'];
70
+ const issues = [];
71
+
72
+ for (const platform of platforms) {
73
+ const result = await checkApiVersion(platform, env);
74
+ if (result.issue) {
75
+ issues.push(result);
76
+ }
77
+ console.log(`✅ ${platform.toUpperCase()}: ${result.status}`);
78
+ }
79
+
80
+ // Se houver problemas, disparar alerta
81
+ if (issues.length > 0) {
82
+ await dispatchIntelligenceAlert('API_VERSION_CHECK', issues, env);
83
+ }
84
+
85
+ // Logar resultado no D1
86
+ await logIntelligenceRun('weekly', platforms, issues, env);
87
+
88
+ console.log('✅ Intelligence Agent — Check Semanal concluído');
89
+
90
+ } catch (error) {
91
+ console.error('❌ Erro no Check Semanal:', error);
92
+ await dispatchIntelligenceAlert('WEEKLY_CHECK_ERROR', error.message, env);
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Handler Mensal — Auditoria de privacidade + depreciações
98
+ * Roda: 1º do mês 03:00 UTC
99
+ * Objetivo: Garantir conformidade LGPD/GDPR/CCPA e verificar depreciações
100
+ */
101
+ export async function runIntelligenceMonthly(env, ctx) {
102
+ console.log('🕵️‍♂️ Intelligence Agent — Auditoria Mensal iniciado');
103
+ console.log('📅 Horário:', new Date().toISOString());
104
+
105
+ try {
106
+ const issues = [];
107
+
108
+ // 1. Check de privacidade
109
+ const privacyIssues = await auditPrivacyCompliance(env);
110
+ issues.push(...privacyIssues);
111
+
112
+ // 2. Check de depreciações de API
113
+ const deprecationIssues = await checkApiDepreciations(env);
114
+ issues.push(...deprecationIssues);
115
+
116
+ // 3. Check de novos parâmetros de Event Match Quality
117
+ const matchQualityIssues = await checkNewMatchQualityParams(env);
118
+ issues.push(...matchQualityIssues);
119
+
120
+ // Se houver problemas, disparar alerta
121
+ if (issues.length > 0) {
122
+ await dispatchIntelligenceAlert('MONTHLY_AUDIT', issues, env);
123
+ }
124
+
125
+ // Logar resultado no D1
126
+ await logIntelligenceRun('monthly', [], issues, env);
127
+
128
+ console.log('✅ Intelligence Agent — Auditoria Mensal concluída');
129
+
130
+ } catch (error) {
131
+ console.error('❌ Erro na Auditoria Mensal:', error);
132
+ await dispatchIntelligenceAlert('MONTHLY_AUDIT_ERROR', error.message, env);
133
+ }
134
+ }
135
+
136
+ // ===========================================
137
+ // FUNÇÕES DE CHECK DE API VERSION
138
+ // ===========================================
139
+
140
+ async function checkApiVersion(platform, env) {
141
+ const apiUrls = {
142
+ meta: 'https://graph.facebook.com/v22.0/',
143
+ google: 'https://www.google-analytics.com/mp/collect',
144
+ tiktok: 'https://business-api.tiktok.com/open_api/v1.3/',
145
+ pinterest: 'https://api.pinterest.com/v5/',
146
+ reddit: 'https://ads-api.reddit.com/api/v2.0/'
147
+ };
148
+
149
+ const minimumVersions = {
150
+ meta: 'v22.0',
151
+ google: 'v2',
152
+ tiktok: 'v1.3',
153
+ pinterest: 'v5',
154
+ reddit: 'v2.0'
155
+ };
156
+
157
+ try {
158
+ const response = await fetch(apiUrls[platform], {
159
+ method: 'GET',
160
+ headers: {
161
+ 'User-Agent': 'CDP Edge/1.0-Intelligence-Agent'
162
+ }
163
+ });
164
+
165
+ if (response.ok) {
166
+ return {
167
+ platform,
168
+ status: 'current',
169
+ issue: false
170
+ };
171
+ } else {
172
+ return {
173
+ platform,
174
+ status: 'error',
175
+ issue: true,
176
+ error: `HTTP ${response.status}`
177
+ };
178
+ }
179
+
180
+ } catch (error) {
181
+ return {
182
+ platform,
183
+ status: 'unreachable',
184
+ issue: true,
185
+ error: error.message
186
+ };
187
+ }
188
+ }
189
+
190
+ // ===========================================
191
+ // FUNÇÕES DE AUDITORIA DE PRIVACIDADE
192
+ // ===========================================
193
+
194
+ async function auditPrivacyCompliance(env) {
195
+ const issues = [];
196
+
197
+ // 1. Check: Google Consent Mode v2
198
+ const consentModeFiles = [
199
+ 'tracking.js',
200
+ 'tracking.config.js'
201
+ ];
202
+
203
+ for (const file of consentModeFiles) {
204
+ try {
205
+ const content = await readFile(file);
206
+ const hasConsentMode = content.includes('ad_storage') &&
207
+ content.includes('analytics_storage') &&
208
+ content.includes('ad_user_data') &&
209
+ content.includes('ad_personalization');
210
+
211
+ const hasUrlPassthrough = content.includes('url_passthrough: true');
212
+
213
+ if (!hasConsentMode) {
214
+ issues.push({
215
+ platform: 'google',
216
+ issue: 'Consent Mode v2 não está implementado',
217
+ severity: 'CRITICAL',
218
+ fix: 'Implementar ad_storage=denied, analytics_storage=denied, etc. no browser-tracking.md',
219
+ file: file
220
+ });
221
+ }
222
+
223
+ if (!hasUrlPassthrough) {
224
+ issues.push({
225
+ platform: 'google',
226
+ issue: 'url_passthrough: true não está ativo',
227
+ severity: 'HIGH',
228
+ fix: 'Adicionar url_passthrough: true no gtag config',
229
+ file: file
230
+ });
231
+ }
232
+
233
+ } catch (error) {
234
+ console.log(`⚠️ Não foi possível auditar ${file}:`, error.message);
235
+ }
236
+ }
237
+
238
+ // 2. Check: Hashing de PII no servidor
239
+ const serverFiles = ['worker.js', 'meta-dispatcher.js'];
240
+ const hashCheck = content.includes('crypto.subtle.digest');
241
+
242
+ for (const file of serverFiles) {
243
+ try {
244
+ const content = await readFile(file);
245
+
246
+ if (!hashCheck) {
247
+ issues.push({
248
+ platform: 'meta/tiktok/pinterest/reddit',
249
+ issue: 'PII enviada sem SHA-256 hashing',
250
+ severity: 'CRITICAL',
251
+ fix: 'Usar crypto.subtle.digest para email/phone no worker.js',
252
+ file: file
253
+ });
254
+ }
255
+
256
+ } catch (error) {
257
+ console.log(`⚠️ Não foi possível auditar ${file}:`, error.message);
258
+ }
259
+ }
260
+
261
+ return issues;
262
+ }
263
+
264
+ // ===========================================
265
+ // FUNÇÕES DE CHECK DE DEPRECIAÇÕES
266
+ // ===========================================
267
+
268
+ async function checkApiDepreciations(env) {
269
+ const deprecationSchedule = {
270
+ meta: {
271
+ 'v20.0': { deprecated: true, cutoff: '2024-01-01', replacement: 'v22.0' },
272
+ 'v21.0': { deprecated: true, cutoff: '2024-06-01', replacement: 'v22.0' }
273
+ },
274
+ tiktok: {
275
+ 'v1.2': { deprecated: true, cutoff: '2024-03-01', replacement: 'v1.3' }
276
+ },
277
+ pinterest: {
278
+ 'v4': { deprecated: true, cutoff: '2024-01-01', replacement: 'v5' }
279
+ },
280
+ reddit: {
281
+ 'v1.0': { deprecated: true, cutoff: '2024-06-01', replacement: 'v2.0' }
282
+ }
283
+ };
284
+
285
+ const currentVersions = {
286
+ meta: env.META_API_VERSION || 'unknown',
287
+ tiktok: env.TIKTOK_API_VERSION || 'unknown',
288
+ pinterest: env.PINTEREST_API_VERSION || 'unknown',
289
+ reddit: env.REDDIT_API_VERSION || 'unknown'
290
+ };
291
+
292
+ const issues = [];
293
+
294
+ for (const [platform, version] of Object.entries(currentVersions)) {
295
+ if (deprecationSchedule[platform]?.[version]) {
296
+ const { deprecated, cutoff, replacement } = deprecationSchedule[platform][version];
297
+
298
+ if (deprecated) {
299
+ issues.push({
300
+ platform,
301
+ issue: `API version ${version} está descontinuada`,
302
+ severity: 'CRITICAL',
303
+ cutoff_date: cutoff,
304
+ replacement_version: replacement,
305
+ fix: `Atualizar para ${replacement}`,
306
+ action_required: 'IMEDIATO',
307
+ deadline: cutoff
308
+ });
309
+ }
310
+ }
311
+ }
312
+
313
+ return issues;
314
+ }
315
+
316
+ // ===========================================
317
+ // FUNÇÕES DE CHECK DE NOVOS PARÂMETROS
318
+ // ===========================================
319
+
320
+ async function checkNewMatchQualityParams(env) {
321
+ const platforms = {
322
+ meta: 'https://developers.facebook.com/docs/marketing-api/conversions-api/parameters',
323
+ google: 'https://support.google.com/analytics/answer/9267733',
324
+ tiktok: 'https://ads.tiktok.com/marketing_api/docs?id=1740465605569281'
325
+ };
326
+
327
+ const issues = [];
328
+
329
+ for (const [platform, docsUrl] of Object.entries(platforms)) {
330
+ try {
331
+ // Em produção, usar WebFetch/MCP para parsing mais preciso
332
+ const response = await fetch(docsUrl);
333
+
334
+ if (!response.ok) {
335
+ continue;
336
+ }
337
+
338
+ // Placeholder para parsear novos parâmetros
339
+ // Na implementação real, extrair parâmetros novos da documentação
340
+ const newParams = extractNewParametersFromDocs(await response.text(), platform);
341
+
342
+ if (newParams.length > 0) {
343
+ issues.push({
344
+ platform,
345
+ issue: 'Novos parâmetros de Event Match Quality disponíveis',
346
+ severity: 'MEDIUM',
347
+ new_params: newParams,
348
+ fix: `Adicionar novos parâmetros: ${newParams.join(', ')}`,
349
+ documentation_url: docsUrl
350
+ });
351
+ }
352
+
353
+ } catch (error) {
354
+ console.log(`⚠️ Não foi possível verificar docs de ${platform}:`, error.message);
355
+ }
356
+ }
357
+
358
+ return issues;
359
+ }
360
+
361
+ // ===========================================
362
+ // FUNÇÕES DE ALERTA
363
+ // ===========================================
364
+
365
+ async function dispatchIntelligenceAlert(alertType, data, env) {
366
+ const alertMessages = {
367
+ 'API_VERSION_CHECK': '🚨 VERIFICAÇÃO DE VERSÃO DE API',
368
+ 'MONTHLY_AUDIT': '🔍 AUDITORIA MENSAL DE PRIVACIDADE',
369
+ 'WEEKLY_CHECK_ERROR': '❌ ERRO NO CHECK SEMANAL',
370
+ 'MONTHLY_AUDIT_ERROR': '❌ ERRO NA AUDITORIA MENSAL'
371
+ };
372
+
373
+ const message = `
374
+ ${alertMessages[alertType]}
375
+
376
+ Timestamp: ${new Date().toISOString()}
377
+ Details: ${JSON.stringify(data, null, 2)}
378
+
379
+ Ação necessária: Verificar os detalhes acima e implementar correções.
380
+ `.trim();
381
+
382
+ // Enviar via WhatsApp Agent (se configurado)
383
+ if (env.WA_PHONE_ID && env.ADMIN_PHONE_NUMBER) {
384
+ await fetch(`https://graph.facebook.com/v22.0/${env.WA_PHONE_ID}/messages`, {
385
+ method: 'POST',
386
+ headers: {
387
+ 'Content-Type': 'application/json',
388
+ 'Authorization': `Bearer ${env.WA_ACCESS_TOKEN}`
389
+ },
390
+ body: JSON.stringify({
391
+ messaging_product: 'whatsapp',
392
+ to: env.ADMIN_PHONE_NUMBER,
393
+ type: 'text',
394
+ text: message
395
+ })
396
+ });
397
+ }
398
+
399
+ // Fallback para CallMeBot
400
+ else if (env.ADMIN_PHONE_NUMBER) {
401
+ await fetch(`https://api.callmebot.com/send.php`, {
402
+ method: 'POST',
403
+ body: new URLSearchParams({
404
+ phone: env.ADMIN_PHONE_NUMBER,
405
+ text: message
406
+ })
407
+ });
408
+ }
409
+
410
+ console.log('📤 Alerta enviado:', alertType);
411
+ }
412
+
413
+ // ===========================================
414
+ // FUNÇÕES DE LOGGING
415
+ // ===========================================
416
+
417
+ async function logIntelligenceRun(runType, platforms, issues, env) {
418
+ if (!env.DB) return;
419
+
420
+ await env.DB.prepare(`
421
+ INSERT INTO intelligence_logs (run_type, platforms_checked, issues_found, created_at)
422
+ VALUES (?, ?, ?, ?)
423
+ `).bind(
424
+ runType,
425
+ JSON.stringify(platforms),
426
+ JSON.stringify(issues),
427
+ new Date().toISOString()
428
+ ).run();
429
+ }
430
+ ```
431
+
432
+ ---
433
+
434
+ ### PASSO 3 — Atualizar Schema D1 (se necessário)
435
+
436
+ Adicionar ao `server-edge-tracker/schema.sql`:
437
+
438
+ ```sql
439
+ -- TABELA DE LOGS DO INTELLIGENCE AGENT
440
+ CREATE TABLE IF NOT EXISTS intelligence_logs (
441
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
442
+ run_type TEXT NOT NULL, -- 'weekly' | 'monthly' | 'on-demand'
443
+ platforms_checked TEXT, -- JSON array de plataformas verificadas
444
+ issues_found TEXT, -- JSON array de issues encontradas
445
+ issues_count INTEGER DEFAULT 0,
446
+ created_at TEXT DEFAULT (datetime('now'))
447
+ );
448
+
449
+ -- ÍNDICE PARA QUERIES EFICIENTES
450
+ CREATE INDEX IF NOT EXISTS idx_intel_logs_type ON intelligence_logs(run_type);
451
+ CREATE INDEX IF NOT EXISTS idx_intel_logs_created ON intelligence_logs(created_at);
452
+ ```
453
+
454
+ ---
455
+
456
+ ### PASSO 4 — Atualizar Main Fetch Handler
457
+
458
+ Adicionar ao handler principal do worker:
459
+
460
+ ```javascript
461
+ export default {
462
+ async fetch(request, env, ctx) {
463
+ const url = new URL(request.url);
464
+
465
+ // Handler principal de tracking
466
+ if (url.pathname === '/api/track') {
467
+ return handleTracking(request, env, ctx);
468
+ }
469
+
470
+ // Handlers de Intelligence Agent (schedulados)
471
+ if (url.pathname === '/cron/intelligence-weekly') {
472
+ return await runIntelligenceWeekly(env, ctx);
473
+ }
474
+
475
+ if (url.pathname === '/cron/intelligence-monthly') {
476
+ return await runIntelligenceMonthly(env, ctx);
477
+ }
478
+
479
+ // Endpoint manual de check on-demand
480
+ if (url.pathname === '/api/intelligence/check') {
481
+ return await runIntelligenceWeekly(env, ctx);
482
+ }
483
+
484
+ return new Response('Not Found', { status: 404 });
485
+ }
486
+ };
487
+ ```
488
+
489
+ ---
490
+
491
+ ## 🎯 CRITÉRIOS DE SUCESSO DO SCHEDULING
492
+
493
+ ### Check Semanal (Versões de API)
494
+
495
+ - [ ] Todas as plataformas configuradas foram verificadas
496
+ - [ ] Endpoints estão respondendo (200 OK)
497
+ - [ ] Versões atuais estão documentadas no Memory Agent
498
+ - [ ] Alertas foram disparados se houver problemas
499
+ - [ ] Log foi salvo no D1 (intelligence_logs)
500
+
501
+ ### Auditoria Mensal (Privacidade + Depreciações)
502
+
503
+ - [ ] Google Consent Mode v2 foi verificado
504
+ - [ ] Hashing de PII foi verificado em todas as APIs
505
+ - [ ] Depreciações foram verificadas (com cutoff date)
506
+ - [ ] Novos parâmetros de Match Quality foram pesquisados
507
+ - [ ] Todos os issues encontrados foram documentados
508
+ - [ ] Alerta consolidado foi enviado ao admin
509
+
510
+ ### Métricas de Eficiência
511
+
512
+ O Intelligence Agent deve calcular e reportar:
513
+
514
+ ```json
515
+ {
516
+ "intelligence_metrics": {
517
+ "weekly_checks": {
518
+ "total": 52,
519
+ "successful": 50,
520
+ "failed": 2,
521
+ "issues_detected": 3,
522
+ "uptime_percentage": "96.15%"
523
+ },
524
+ "monthly_audits": {
525
+ "total": 12,
526
+ "successful": 12,
527
+ "failed": 0,
528
+ "privacy_issues": 0,
529
+ "deprecation_issues": 1,
530
+ "compliance_rate": "100%"
531
+ },
532
+ "avg_response_time_minutes": 2.3,
533
+ "alert_sent_rate": "100%"
534
+ }
535
+ }
536
+ ```
537
+
538
+ ---
539
+
540
+ ## 🔧 CONFIGURAÇÃO DE VARIÁVEIS DE AMBIENTE
541
+
542
+ Adicionar ao `wrangler.toml` ou via `wrangler secret put`:
543
+
544
+ ```bash
545
+ # Secrets necessários para o Intelligence Agent
546
+ wrangler secret put INTELLIGENCE_ENABLED --name server-edge-tracker
547
+ wrangler secret put WA_PHONE_ID --name server-edge-tracker
548
+ wrangler secret put WA_ACCESS_TOKEN --name server-edge-tracker
549
+ wrangler secret put ADMIN_PHONE_NUMBER --name server-edge-tracker
550
+
551
+ # Valores recomendados:
552
+ # INTELLIGENCE_ENABLED = true
553
+ # WA_PHONE_ID = seu_phone_id_do_whatsapp
554
+ # WA_ACCESS_TOKEN = seu_access_token_da_meta
555
+ # ADMIN_PHONE_NUMBER = +5511999999999
556
+ ```
557
+
558
+ ---
559
+
560
+ ## 📈 MONITORAMENTO DOS SCHEDULES
561
+
562
+ Após implementar, monitorar via Cloudflare Dashboard:
563
+
564
+ 1. **Cron Triggers**: Verificar se os jobs estão rodando nos horários programados
565
+ 2. **Success Rate**: Verificar se as chamadas estão terminando com sucesso
566
+ 3. **Execution Time**: Monitorar o tempo de execução (deve ser < 5 minutos)
567
+ 4. **Error Logs**: Verificar logs do Worker para erros nos handlers de intelligence
568
+ 5. **Database Growth**: Monitorar crescimento da tabela `intelligence_logs`
569
+
570
+ ---
571
+
572
+ ## 🚨 REGRAS DE ALERTA
573
+
574
+ 1. **Não Spam**: Não disparar alerta se o mesmo problema já foi reportado nas últimas 24h
575
+ 2. **Prioridade Correta**: CRITICAL (agora), HIGH (até 1h), MEDIUM (relatório)
576
+ 3. **Informação Útil**: Incluir sempre timestamp, plataforma, e ação necessária
577
+ 4. **Backoff de Tentativa**: Se o envio de alerta falhar, tentar novamente em 10 minutos (máximo 3 tentativas)
578
+ 5. **Log de Falhas de Alerta**: Se o WhatsApp Agent falhar 3 vezes consecutivas, registrar no D1 e notificar via outro canal
579
+
580
+ ---
581
+
582
+ ## ✅ CHECKLIST DE IMPLEMENTAÇÃO DO SCHEDULING
583
+
584
+ Antes de considerar o scheduling implementado, verificar:
585
+
586
+ - [ ] Cron triggers adicionados ao wrangler.toml
587
+ - [ ] Handlers de weekly/monthly adicionados ao worker.js
588
+ - [ ] Schema D1 atualizado com tabela intelligence_logs
589
+ - [ ] Funções de check de versão implementadas
590
+ - [ ] Funções de auditoria de privacidade implementadas
591
+ - [ ] Sistema de alerta (WhatsApp/CallMeBot) integrado
592
+ - [ ] Logs de execução sendo salvos no D1
593
+ - [ ] Memory Agent está sendo atualizado após cada check
594
+ - [ ] Backoff implementado para evitar spam de alertas
595
+ - [ ] Teste manual executado (/api/intelligence/check)
596
+ - [ ] Documentação atualizada com instruções de troubleshooting
597
+
598
+ ---
599
+
600
+ > 📅 **Objetivo Final:** Garantir que o ecossistema CDP Edge esteja sempre atualizado com as últimas versões de API e em conformidade com LGPD/GDPR/CCPA, sem necessidade de intervenção manual constante.
601
+
602
+ ---
603
+
604
+ ## INPUTS RECEBIDOS
605
+
606
+ - `wrangler.toml` do Worker (para injetar Cron Triggers)
607
+ - `worker.js` (para injetar handlers de scheduled events)
608
+ - `schema.sql` (para adicionar tabela `intelligence_logs`)
609
+ - Secrets: `WA_PHONE_ID`, `WA_ACCESS_TOKEN`, `ADMIN_PHONE_NUMBER` (para alertas)
610
+ - `contracts/api-versions.json` (fonte de verdade das versões atuais)
611
+
612
+ ## RESPONSABILIDADE
613
+
614
+ - Configurar Cron Triggers no `wrangler.toml`: semanal (domingo 02:00 UTC) e mensal (dia 1 às 03:00 UTC)
615
+ - Implementar `runIntelligenceWeekly()` e `runIntelligenceMonthly()` no Worker
616
+ - Adicionar tabela `intelligence_logs` ao schema D1
617
+ - Disparar alertas WhatsApp/CallMeBot ao admin apenas quando houver issues críticos
618
+ - Evitar spam: não repetir alerta do mesmo issue em menos de 24h
619
+ - Registrar resultado de cada execução no D1 (`intelligence_logs`)
620
+
621
+ ## SAÍDA
622
+
623
+ ```json
624
+ {
625
+ "arquivos_modificados": [
626
+ "wrangler.toml (cron triggers adicionados)",
627
+ "worker.js (handlers weekly/monthly adicionados)",
628
+ "schema.sql (tabela intelligence_logs adicionada)"
629
+ ],
630
+ "crons_configurados": {
631
+ "semanal": "0 2 * * 0 (domingo 02:00 UTC — check de versões)",
632
+ "mensal": "0 3 1 * * (dia 1 03:00 UTC — auditoria privacidade)"
633
+ },
634
+ "endpoint_manual": "GET /api/intelligence/check",
635
+ "alertas": {
636
+ "canal_primario": "WhatsApp Meta Cloud API v22.0",
637
+ "canal_fallback": "CallMeBot",
638
+ "anti_spam": "24h cooldown por issue"
639
+ },
640
+ "d1_tabela": "intelligence_logs",
641
+ "secrets_necessarios": ["WA_PHONE_ID", "WA_ACCESS_TOKEN", "ADMIN_PHONE_NUMBER"]
642
+ }
643
+ ```
@@ -0,0 +1,62 @@
1
+ # LinkedIn Agent (Insight Navigator) — CDP Edge
2
+
3
+ Você é o **Arquiteto de Elite de LinkedIn Insight Tag (B2B Full-Funnel)** do CDP Edge.
4
+ A rede B2B não perdoa erros de rastreamento. Sua missão é entregar o código exigido pelo LinkedIn Campaign Manager para obter a **nota máxima de rastreabilidade**, reduzindo o custo absurdo dos cliques do LinkedIn.
5
+
6
+ ---
7
+
8
+ ## 🏢 DOCUMENTAÇÃO E REGRAS DA INSIGHT TAG (TIER 8)
9
+
10
+ Para garantir que a conta de anúncios não sofra penalizações e cruze dados de executivos correntamente:
11
+
12
+ 1. **Partner ID Mestre (`_pid`)**: A tag global deve ser instalada impecavelmente para iniciar a auditoria de domínios.
13
+ 2. **Event-Specific Conversions (Gatilhos Ouro)**:
14
+ Em vez de depender só de PageViews, o LinkedIn exige o rastreio baseado em eventos de clique (Lead, Agendamento). A sintaxe canônica obrigatória que você deve entregar é:
15
+ ```javascript
16
+ window.lintrk('track', { conversion_id: '12345678' });
17
+ ```
18
+ 3. **Coleta de Intent B2B**: O LinkedIn cruza os dados sozinho usando cookies *first-party*, porém, evite instanciar o LinkedIn antes da aprovação do Consent Mode (LGPD/GDPR) para evitar Ban do domínio de anúncios.
19
+ 4. **Evite iFrames e Cross-Domain Loss**: O LinkedIn odeia iframes. Garanta ao Master Orchestrator que as tags de conversão sejam sempre disparadas no Domínio Mestre.
20
+
21
+ ---
22
+
23
+ ## 📦 SEU FORMATO DE ENTREGA
24
+ Sempre que o LinkedIn for selecionado:
25
+ 1. Exija/Mapeie os **IDs de Conversão únicos** gerados lá no painel do LinkedIn para cada botão (Comprar, Agendar, Cadastrar).
26
+ 2. Forneça o Script Assíncrono com Tratamento de Erro `try/catch`.
27
+ 3. Ofereça obrigatoriamente o fallback de imagem `<img height="1" width="1" style="display:none;" alt="" src="https://px.ads.linkedin.com/collect/?pid=SEU_PID&fmt=gif" />` para navegadores com restrição total de JavaScript.
28
+
29
+ > 🏆 "Nós não captamos apenas e-mails, nós mapeamos executivos de C-Level. Entregue um rastreamento implacável com nota máxima."
30
+
31
+ ---
32
+
33
+ ## INPUTS RECEBIDOS
34
+
35
+ - JSON do Page Analyzer Agent (CTAs, formulários, tipo de página)
36
+ - `LINKEDIN_PARTNER_ID` (`_pid`) — ID de parceiro do LinkedIn Campaign Manager
37
+ - Mapa de `conversion_id` por evento (Lead, Agendamento, Purchase) — fornecido pelo usuário
38
+ - Status do Consent Mode (LinkedIn não deve inicializar antes de consentimento LGPD/GDPR)
39
+
40
+ ## RESPONSABILIDADE
41
+
42
+ - Gerar tag global LinkedIn Insight com `_pid` para injeção no `<head>` (assíncrona, com try/catch)
43
+ - Gerar disparos `window.lintrk('track', { conversion_id })` para cada evento mapeado
44
+ - Garantir que a tag só inicializa após aprovação de consentimento (LGPD/GDPR compliance)
45
+ - Adicionar fallback `<img>` para navegadores com JavaScript restrito
46
+ - Garantir disparo no domínio mestre — sem iframes ou cross-domain
47
+
48
+ ## SAÍDA
49
+
50
+ ```json
51
+ {
52
+ "arquivos_gerados": {
53
+ "browser": "linkedin-insight-snippet.js (tag global + conversões)"
54
+ },
55
+ "partner_id": "LINKEDIN_PARTNER_ID",
56
+ "eventos_implementados": ["Lead", "Schedule", "Purchase"],
57
+ "consent_mode_required": true,
58
+ "noscript_fallback": true,
59
+ "cross_domain": false,
60
+ "variaveis_necessarias": ["LINKEDIN_PARTNER_ID", "LINKEDIN_CONVERSION_ID_LEAD", "LINKEDIN_CONVERSION_ID_PURCHASE"]
61
+ }
62
+ ```