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.
- package/README.md +367 -0
- package/bin/cdp-edge.js +61 -0
- package/contracts/api-versions.json +368 -0
- package/dist/commands/analyze.js +52 -0
- package/dist/commands/infra.js +54 -0
- package/dist/commands/install.js +168 -0
- package/dist/commands/server.js +174 -0
- package/dist/commands/setup.js +123 -0
- package/dist/commands/validate.js +84 -0
- package/dist/index.js +12 -0
- package/docs/CI-CD-SETUP.md +217 -0
- package/docs/PixelBuilder-Documentacao-Completa (2).docx +0 -0
- package/docs/events-reference.md +359 -0
- package/docs/installation.md +155 -0
- package/docs/quick-start.md +185 -0
- package/docs/sdk-reference.md +371 -0
- package/docs/whatsapp-ctwa.md +209 -0
- package/extracted-skill/tracking-events-generator/INDEX.md +94 -0
- package/extracted-skill/tracking-events-generator/INSTALACAO-CDPEDGE.md +58 -0
- package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +594 -0
- package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +412 -0
- package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +333 -0
- package/extracted-skill/tracking-events-generator/SKILL.md +257 -0
- package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -0
- package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +54 -0
- package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +1304 -0
- package/extracted-skill/tracking-events-generator/agents/bing-agent.md +76 -0
- package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +264 -0
- package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +149 -0
- package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +2077 -0
- package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +1419 -0
- package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +456 -0
- package/extracted-skill/tracking-events-generator/agents/database-agent.md +667 -0
- package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1455 -0
- package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +224 -0
- package/extracted-skill/tracking-events-generator/agents/email-agent.md +61 -0
- package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +52 -0
- package/extracted-skill/tracking-events-generator/agents/google-agent.md +109 -0
- package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +365 -0
- package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +643 -0
- package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +62 -0
- package/extracted-skill/tracking-events-generator/agents/localization-agent.md +55 -0
- package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +59 -0
- package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +900 -0
- package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +1922 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.json +109 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.md +703 -0
- package/extracted-skill/tracking-events-generator/agents/meta-agent.md +110 -0
- package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +255 -0
- package/extracted-skill/tracking-events-generator/agents/performance-agent.md +1157 -0
- package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +1432 -0
- package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +310 -0
- package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +849 -0
- package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +250 -0
- package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +313 -0
- package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1752 -0
- package/extracted-skill/tracking-events-generator/agents/server-tracking.md +1188 -0
- package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +383 -0
- package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +111 -0
- package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +364 -0
- package/extracted-skill/tracking-events-generator/agents/validator-agent.md +267 -0
- package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +69 -0
- package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +76 -0
- package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +699 -0
- package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +422 -0
- package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -0
- package/extracted-skill/tracking-events-generator/cdpTrack.js +641 -0
- package/extracted-skill/tracking-events-generator/contracts/api-versions.json +368 -0
- package/extracted-skill/tracking-events-generator/docs/guia-cloudflare-iniciante.md +107 -0
- package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -0
- package/extracted-skill/tracking-events-generator/evals/evals.json +235 -0
- package/extracted-skill/tracking-events-generator/integration-test.js +497 -0
- package/extracted-skill/tracking-events-generator/knowledge-base.md +2894 -0
- package/extracted-skill/tracking-events-generator/micro-events.js +992 -0
- package/extracted-skill/tracking-events-generator/models/captura-de-lead.md +78 -0
- package/extracted-skill/tracking-events-generator/models/captura-lead-evento-externo.md +99 -0
- package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +111 -0
- package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +672 -0
- package/extracted-skill/tracking-events-generator/models/pagina-obrigado.md +55 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -0
- package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +68 -0
- package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -0
- package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -0
- package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/real-estate-logic.md +50 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/sales-page-logic.md +50 -0
- package/extracted-skill/tracking-events-generator/models/trafego-direto.md +582 -0
- package/extracted-skill/tracking-events-generator/models/webinar-registration.md +63 -0
- package/extracted-skill/tracking-events-generator/tracking.config.js +46 -0
- package/extracted-skill/tracking-events-generator/walkthrough.md +26 -0
- package/package.json +75 -0
- package/server-edge-tracker/INSTALAR.md +328 -0
- package/server-edge-tracker/migrate-new-db.sql +137 -0
- package/server-edge-tracker/migrate-v2.sql +16 -0
- package/server-edge-tracker/migrate-v3.sql +6 -0
- package/server-edge-tracker/migrate-v4.sql +18 -0
- package/server-edge-tracker/migrate-v5.sql +17 -0
- package/server-edge-tracker/migrate-v6.sql +24 -0
- package/server-edge-tracker/migrate.sql +111 -0
- package/server-edge-tracker/schema.sql +265 -0
- package/server-edge-tracker/worker.js +2574 -0
- package/server-edge-tracker/wrangler.toml +85 -0
- package/templates/afiliado-sem-landing.md +312 -0
- package/templates/captura-de-lead.md +78 -0
- package/templates/captura-lead-evento-externo.md +99 -0
- package/templates/checkout-proprio.md +111 -0
- package/templates/install/.claude/commands/cdp.md +1 -0
- package/templates/install/CLAUDE.md +65 -0
- package/templates/linkedin/tag-template.js +46 -0
- package/templates/multi-step-checkout.md +673 -0
- package/templates/pagina-obrigado.md +55 -0
- package/templates/pinterest/conversions-api-template.js +144 -0
- package/templates/pinterest/event-mappings.json +48 -0
- package/templates/pinterest/tag-template.js +28 -0
- package/templates/quiz-funnel.md +68 -0
- package/templates/reddit/conversions-api-template.js +205 -0
- package/templates/reddit/event-mappings.json +56 -0
- package/templates/reddit/pixel-template.js +46 -0
- package/templates/scenarios/behavior-engine.js +402 -0
- package/templates/scenarios/real-estate-logic.md +50 -0
- package/templates/scenarios/sales-page-logic.md +50 -0
- package/templates/spotify/pixel-template.js +46 -0
- package/templates/trafego-direto.md +582 -0
- package/templates/vsl-page.md +292 -0
- 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
|
+
```
|