cdp-edge 1.2.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -306
- package/bin/cdp-edge.js +71 -61
- package/contracts/agent-versions.json +682 -0
- package/contracts/api-versions.json +372 -368
- package/contracts/types.ts +81 -0
- package/dist/commands/analyze.js +52 -52
- package/dist/commands/infra.js +54 -54
- package/dist/commands/install.js +26 -3
- package/dist/commands/server.js +174 -174
- package/dist/commands/setup.js +332 -100
- package/dist/commands/validate.js +248 -84
- package/dist/index.js +12 -12
- package/dist/sdk/cdpTrack.js +2095 -0
- package/dist/sdk/cdpTrack.min.js +64 -0
- package/dist/sdk/install-snippet.html +10 -0
- package/docs/whatsapp-ctwa.md +5 -4
- package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +89 -0
- package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +101 -0
- package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -364
- package/extracted-skill/tracking-events-generator/agents/ab-ltv-agent.md +196 -0
- package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +41 -41
- package/extracted-skill/tracking-events-generator/agents/bidding-agent.md +347 -0
- package/extracted-skill/tracking-events-generator/agents/bing-agent.md +40 -50
- package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +174 -74
- package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +25 -5
- package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +10 -10
- package/extracted-skill/tracking-events-generator/agents/database-agent.md +43 -42
- package/extracted-skill/tracking-events-generator/agents/debug-agent.md +22 -22
- package/extracted-skill/tracking-events-generator/agents/devops-agent.md +232 -0
- package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +23 -9
- package/extracted-skill/tracking-events-generator/agents/email-agent.md +28 -1
- package/extracted-skill/tracking-events-generator/agents/evo-crm-agent.md +253 -0
- package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +206 -1
- package/extracted-skill/tracking-events-generator/agents/fraud-detection-agent.md +143 -0
- package/extracted-skill/tracking-events-generator/agents/google-agent.md +128 -2
- package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +191 -31
- package/extracted-skill/tracking-events-generator/agents/lead-scoring-agent.md +282 -0
- package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +145 -34
- package/extracted-skill/tracking-events-generator/agents/localization-agent.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +24 -5
- package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +81 -21
- package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +588 -93
- package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +304 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.md +190 -15
- package/extracted-skill/tracking-events-generator/agents/meta-agent.md +10 -2
- package/extracted-skill/tracking-events-generator/agents/ml-clustering-agent.md +769 -0
- package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +21 -4
- package/extracted-skill/tracking-events-generator/agents/performance-agent.md +41 -31
- package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +18 -8
- package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +14 -6
- package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +7 -7
- package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +16 -8
- package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +15 -7
- package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +157 -48
- package/extracted-skill/tracking-events-generator/agents/server-tracking.md +35 -35
- package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +15 -7
- package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +73 -2
- package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +104 -9
- package/extracted-skill/tracking-events-generator/agents/utm-agent.md +322 -0
- package/extracted-skill/tracking-events-generator/agents/validator-agent.md +13 -9
- package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +112 -4
- package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +58 -5
- package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +26 -18
- package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +152 -37
- package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -285
- package/extracted-skill/tracking-events-generator/cdpTrack.js +642 -641
- package/extracted-skill/tracking-events-generator/contracts/api-versions.json +14 -10
- package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -226
- package/extracted-skill/tracking-events-generator/evals/evals.json +235 -235
- package/extracted-skill/tracking-events-generator/integration-test.js +497 -497
- package/extracted-skill/tracking-events-generator/knowledge-base.md +172 -0
- package/extracted-skill/tracking-events-generator/micro-events.js +992 -992
- package/extracted-skill/tracking-events-generator/models/lancamento-imobiliario.md +344 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -144
- package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -48
- package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -28
- package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +83 -19
- package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -205
- package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -56
- package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -19
- package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -425
- package/extracted-skill/tracking-events-generator/route-intent-capture.js +222 -0
- package/extracted-skill/tracking-events-generator/tracking.config.js +3 -3
- package/package.json +89 -75
- package/scripts/build-sdk.js +106 -0
- package/server-edge-tracker/.client.env.example +14 -0
- package/server-edge-tracker/INSTALAR.md +222 -23
- package/server-edge-tracker/SEGMENTATION-DOCS.md +513 -0
- package/server-edge-tracker/config/utm-mapping.json +64 -0
- package/server-edge-tracker/deploy-client.cjs +76 -0
- package/server-edge-tracker/index.ts +1230 -0
- package/server-edge-tracker/migrate-v7.sql +64 -0
- package/server-edge-tracker/modules/db.ts +710 -0
- package/server-edge-tracker/modules/dispatch/crm.ts +382 -0
- package/server-edge-tracker/modules/dispatch/ga4.ts +72 -0
- package/server-edge-tracker/modules/dispatch/meta.ts +143 -0
- package/server-edge-tracker/modules/dispatch/platforms.ts +255 -0
- package/server-edge-tracker/modules/dispatch/tiktok.ts +107 -0
- package/server-edge-tracker/modules/dispatch/whatsapp.ts +296 -0
- package/server-edge-tracker/modules/intelligence.ts +589 -0
- package/server-edge-tracker/modules/ml/bidding.ts +247 -0
- package/server-edge-tracker/modules/ml/fraud.ts +302 -0
- package/server-edge-tracker/modules/ml/logistic.ts +226 -0
- package/server-edge-tracker/modules/ml/ltv.ts +531 -0
- package/server-edge-tracker/modules/ml/matchquality.ts +232 -0
- package/server-edge-tracker/modules/ml/quiz.ts +343 -0
- package/server-edge-tracker/modules/ml/roas.ts +255 -0
- package/server-edge-tracker/modules/ml/segmentation.ts +407 -0
- package/server-edge-tracker/modules/nurture.ts +257 -0
- package/server-edge-tracker/modules/utils.ts +311 -0
- package/server-edge-tracker/modules/utm/utm-enricher.ts +231 -0
- package/server-edge-tracker/schema-ab-ltv.sql +97 -0
- package/server-edge-tracker/schema-bidding.sql +86 -0
- package/server-edge-tracker/schema-fraud.sql +90 -0
- package/server-edge-tracker/schema-indexes.sql +67 -0
- package/server-edge-tracker/schema-ltv-feedback.sql +11 -0
- package/server-edge-tracker/schema-quiz.sql +52 -0
- package/server-edge-tracker/schema-sales-engine.sql +113 -0
- package/server-edge-tracker/schema-segmentation.sql +219 -0
- package/server-edge-tracker/schema-utm.sql +82 -0
- package/server-edge-tracker/schema.sql +281 -265
- package/server-edge-tracker/types.ts +275 -0
- package/server-edge-tracker/wrangler.toml +140 -85
- package/templates/lancamento-imobiliario.md +344 -0
- package/templates/multi-step-checkout.md +3 -4
- package/templates/pinterest/conversions-api-template.js +144 -144
- package/templates/pinterest/event-mappings.json +48 -48
- package/templates/pinterest/tag-template.js +28 -28
- package/templates/quiz-funnel.md +83 -19
- package/templates/reddit/conversions-api-template.js +205 -205
- package/templates/reddit/event-mappings.json +56 -56
- package/templates/reddit/pixel-template.js +12 -39
- package/templates/scenarios/behavior-engine.js +45 -22
- package/docs/PixelBuilder-Documentacao-Completa (2).docx +0 -0
- package/docs/installation.md +0 -155
- package/docs/quick-start.md +0 -185
- package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +0 -1419
- package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +0 -643
- package/server-edge-tracker/worker.js +0 -2574
|
@@ -46,6 +46,7 @@ const BehaviorEngine = {
|
|
|
46
46
|
|
|
47
47
|
// 0.1 A/B Testing (Mode 1 - Edge Sync)
|
|
48
48
|
setupABTesting() {
|
|
49
|
+
// Busca variante no Cookie ou URL (Modo 1)
|
|
49
50
|
const getCookie = (name) => {
|
|
50
51
|
const value = `; ${document.cookie}`;
|
|
51
52
|
const parts = value.split(`; ${name}=`);
|
|
@@ -54,9 +55,10 @@ const BehaviorEngine = {
|
|
|
54
55
|
|
|
55
56
|
const urlParams = new URLSearchParams(window.location.search);
|
|
56
57
|
this.state.abVariant = urlParams.get('cdp_variant') || getCookie('cdp_ab_variant') || 'original';
|
|
57
|
-
|
|
58
|
+
|
|
58
59
|
console.log(`[CDP Edge] A/B Variant Detected: ${this.state.abVariant}`);
|
|
59
|
-
|
|
60
|
+
|
|
61
|
+
// Intercepta o cdpTrack.track para injetar a variante globalmente
|
|
60
62
|
const originalTrack = cdpTrack.track;
|
|
61
63
|
cdpTrack.track = (eventName, eventParams = {}) => {
|
|
62
64
|
const enrichedParams = {
|
|
@@ -77,6 +79,7 @@ const BehaviorEngine = {
|
|
|
77
79
|
this.state.userScore = Math.min(100, Math.max(0, this.state.userScore + points));
|
|
78
80
|
console.log(`[CDP Edge] Score Update: +${points} (${reason}) | Total: ${this.state.userScore}`);
|
|
79
81
|
|
|
82
|
+
// Gatilhos de Plataforma
|
|
80
83
|
if (this.state.userScore >= this.config.scoreThresholds.highIntent && !this.state.firedScoreEvents.has('highIntent')) {
|
|
81
84
|
this.state.firedScoreEvents.add('highIntent');
|
|
82
85
|
cdpTrack.track('High_Intent_Lead', { score: this.state.userScore, meta_intensity: 'high' });
|
|
@@ -91,18 +94,20 @@ const BehaviorEngine = {
|
|
|
91
94
|
document.addEventListener('click', (e) => {
|
|
92
95
|
const now = Date.now();
|
|
93
96
|
this.state.clickHistory.push(now);
|
|
97
|
+
|
|
98
|
+
// Limpa histórico antigo
|
|
94
99
|
this.state.clickHistory = this.state.clickHistory.filter(t => now - t < this.config.rageClickTime);
|
|
95
|
-
|
|
100
|
+
|
|
96
101
|
if (this.state.clickHistory.length >= this.config.rageClickThreshold) {
|
|
97
102
|
cdpTrack.track('rage_click', {
|
|
98
103
|
element_id: e.target.id || '',
|
|
99
104
|
element_class: e.target.className || '',
|
|
100
105
|
x: e.pageX,
|
|
101
106
|
y: e.pageY,
|
|
102
|
-
meta_intensity: 'low'
|
|
107
|
+
meta_intensity: 'low' // Envia sinal leve para Meta
|
|
103
108
|
});
|
|
104
109
|
this.addScore(-10, 'rage_click');
|
|
105
|
-
this.state.clickHistory = [];
|
|
110
|
+
this.state.clickHistory = []; // Reseta após detecção
|
|
106
111
|
}
|
|
107
112
|
});
|
|
108
113
|
},
|
|
@@ -111,17 +116,17 @@ const BehaviorEngine = {
|
|
|
111
116
|
setupScroll() {
|
|
112
117
|
const markers = [25, 50, 75, 90];
|
|
113
118
|
const fired = new Set();
|
|
114
|
-
|
|
119
|
+
|
|
115
120
|
window.addEventListener('scroll', () => {
|
|
116
121
|
const scrollPct = Math.round((window.scrollY / (document.documentElement.scrollHeight - window.innerHeight)) * 100);
|
|
117
|
-
|
|
122
|
+
|
|
118
123
|
markers.forEach(m => {
|
|
119
124
|
if (scrollPct >= m && !fired.has(m)) {
|
|
120
125
|
fired.add(m);
|
|
121
126
|
this.addScore(m === 25 ? 5 : (m === 50 ? 5 : 10), `scroll_${m}%`);
|
|
122
127
|
cdpTrack.track('scroll_depth', {
|
|
123
128
|
percent: m,
|
|
124
|
-
meta_intensity: m >= 50 ? 'medium' : 'low'
|
|
129
|
+
meta_intensity: m >= 50 ? 'medium' : 'low' // Envia como sinal mais forte após 50%
|
|
125
130
|
});
|
|
126
131
|
}
|
|
127
132
|
});
|
|
@@ -131,7 +136,7 @@ const BehaviorEngine = {
|
|
|
131
136
|
// 2. Tab Visibility (VSL Focus)
|
|
132
137
|
setupVisibility() {
|
|
133
138
|
document.addEventListener('visibilitychange', () => {
|
|
134
|
-
const status = document.visibilityState;
|
|
139
|
+
const status = document.visibilityState; // 'visible' ou 'hidden'
|
|
135
140
|
cdpTrack.track('tab_visibility_change', {
|
|
136
141
|
status: status,
|
|
137
142
|
time_since_start: Math.floor((Date.now() - this.state.startTime) / 1000),
|
|
@@ -143,6 +148,8 @@ const BehaviorEngine = {
|
|
|
143
148
|
// 3. Click Heatmap (D1 Only)
|
|
144
149
|
setupHeatmap() {
|
|
145
150
|
document.addEventListener('click', (e) => {
|
|
151
|
+
// Enviamos apenas para o servidor/D1 para não poluir o pixel do cliente
|
|
152
|
+
// sendServerEvent é o método interno que pula o despacho para Meta/TikTok
|
|
146
153
|
if (typeof cdpTrack.sendServerEvent === 'function') {
|
|
147
154
|
cdpTrack.sendServerEvent('click_heatmap', null, {
|
|
148
155
|
x: e.pageX,
|
|
@@ -177,18 +184,24 @@ const BehaviorEngine = {
|
|
|
177
184
|
const isVimeo = src.includes('vimeo.com/video');
|
|
178
185
|
|
|
179
186
|
if (isYT || isVimeo) {
|
|
187
|
+
// Observer de progresso (via postMessage para evitar dependência de SDK pesado)
|
|
180
188
|
window.addEventListener('message', (event) => {
|
|
181
189
|
try {
|
|
182
190
|
const data = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;
|
|
191
|
+
|
|
192
|
+
// Lógica YouTube
|
|
183
193
|
if (isYT && data.event === 'infoDelivery' && data.info && data.info.currentTime) {
|
|
184
194
|
this.handleVideoProgress(iframe, data.info.currentTime, data.info.duration, fired, 'YouTube');
|
|
185
195
|
}
|
|
196
|
+
|
|
197
|
+
// Lógica Vimeo
|
|
186
198
|
if (isVimeo && data.event === 'timeupdate') {
|
|
187
199
|
this.handleVideoProgress(iframe, data.data.seconds, data.data.duration, fired, 'Vimeo');
|
|
188
200
|
}
|
|
189
201
|
} catch (e) { /* ignore non-json messages */ }
|
|
190
202
|
});
|
|
191
|
-
|
|
203
|
+
|
|
204
|
+
// Ativa o JS API se for YouTube
|
|
192
205
|
if (isYT && !src.includes('enablejsapi=1')) {
|
|
193
206
|
const url = new URL(src);
|
|
194
207
|
url.searchParams.set('enablejsapi', '1');
|
|
@@ -244,9 +257,10 @@ const BehaviorEngine = {
|
|
|
244
257
|
|
|
245
258
|
// 6.1 Form Abandonment — saiu da página após interagir com formulário sem submeter
|
|
246
259
|
setupFormAbandonment() {
|
|
247
|
-
const formInteracted = new Set();
|
|
260
|
+
const formInteracted = new Set(); // campos que receberam foco
|
|
248
261
|
let formSubmitted = false;
|
|
249
262
|
|
|
263
|
+
// Marcar campo como interagido no focus
|
|
250
264
|
document.addEventListener('focusin', (e) => {
|
|
251
265
|
const el = e.target;
|
|
252
266
|
if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA' || el.tagName === 'SELECT') {
|
|
@@ -255,10 +269,12 @@ const BehaviorEngine = {
|
|
|
255
269
|
}
|
|
256
270
|
}, true);
|
|
257
271
|
|
|
272
|
+
// Marcar submit realizado (qualquer formulário)
|
|
258
273
|
document.addEventListener('submit', () => {
|
|
259
274
|
formSubmitted = true;
|
|
260
275
|
}, true);
|
|
261
276
|
|
|
277
|
+
// Detectar abandono via visibilitychange (tab hidden / fechando)
|
|
262
278
|
document.addEventListener('visibilitychange', () => {
|
|
263
279
|
if (document.visibilityState === 'hidden' && formInteracted.size > 0 && !formSubmitted) {
|
|
264
280
|
this.addScore(-5, 'form_abandonment');
|
|
@@ -271,8 +287,10 @@ const BehaviorEngine = {
|
|
|
271
287
|
}
|
|
272
288
|
});
|
|
273
289
|
|
|
290
|
+
// Fallback: beforeunload
|
|
274
291
|
window.addEventListener('beforeunload', () => {
|
|
275
292
|
if (formInteracted.size > 0 && !formSubmitted) {
|
|
293
|
+
// Usar sendBeacon para garantir entrega mesmo na saída
|
|
276
294
|
if (navigator.sendBeacon && typeof cdpTrack !== 'undefined') {
|
|
277
295
|
const data = JSON.stringify({
|
|
278
296
|
eventName: 'form_abandonment',
|
|
@@ -289,26 +307,31 @@ const BehaviorEngine = {
|
|
|
289
307
|
|
|
290
308
|
// 6.2 Exit Intent — mouse saindo pelo topo da viewport
|
|
291
309
|
setupExitIntent() {
|
|
292
|
-
let exitFired = false;
|
|
310
|
+
let exitFired = false; // disparar apenas uma vez por sessão
|
|
293
311
|
|
|
294
312
|
document.addEventListener('mousemove', (e) => {
|
|
313
|
+
// Threshold: mouse a menos de 20px do topo da viewport
|
|
295
314
|
if (e.clientY < 20 && !exitFired) {
|
|
296
315
|
exitFired = true;
|
|
297
|
-
this.addScore(15, 'exit_intent');
|
|
316
|
+
this.addScore(15, 'exit_intent'); // sinal positivo: ainda está aqui
|
|
298
317
|
cdpTrack.track('exit_intent', {
|
|
299
318
|
mouse_y: e.clientY,
|
|
300
319
|
time_on_page: Math.floor((Date.now() - this.state.startTime) / 1000),
|
|
301
320
|
user_score: this.state.userScore,
|
|
302
|
-
meta_intensity: 'high',
|
|
321
|
+
meta_intensity: 'high', // Alta intenção — usuário está prestes a sair
|
|
303
322
|
});
|
|
323
|
+
|
|
324
|
+
// Resetar após 30s para redetectar se usuário continuar
|
|
304
325
|
setTimeout(() => { exitFired = false; }, 30000);
|
|
305
326
|
}
|
|
306
327
|
}, { passive: true });
|
|
307
328
|
|
|
329
|
+
// Mobile: detectar via visibilitychange (sem mouse)
|
|
308
330
|
let mobileExitFired = false;
|
|
309
331
|
document.addEventListener('visibilitychange', () => {
|
|
310
332
|
if (document.visibilityState === 'hidden' && !mobileExitFired) {
|
|
311
333
|
const timeOnPage = Math.floor((Date.now() - this.state.startTime) / 1000);
|
|
334
|
+
// Só dispara se usuário ficou tempo suficiente (não é bounce imediato)
|
|
312
335
|
if (timeOnPage > 5) {
|
|
313
336
|
mobileExitFired = true;
|
|
314
337
|
cdpTrack.track('exit_intent_mobile', {
|
|
@@ -327,9 +350,9 @@ const BehaviorEngine = {
|
|
|
327
350
|
const selectedText = window.getSelection().toString();
|
|
328
351
|
if (selectedText.length > 0) {
|
|
329
352
|
this.addScore(20, 'text_copy');
|
|
330
|
-
cdpTrack.track('content_copy', {
|
|
353
|
+
cdpTrack.track('content_copy', {
|
|
331
354
|
text_length: selectedText.length,
|
|
332
|
-
meta_intensity: 'medium'
|
|
355
|
+
meta_intensity: 'medium'
|
|
333
356
|
});
|
|
334
357
|
}
|
|
335
358
|
});
|
|
@@ -342,16 +365,16 @@ const BehaviorEngine = {
|
|
|
342
365
|
if (link && link.href) {
|
|
343
366
|
const url = link.href;
|
|
344
367
|
const isExternal = !url.includes(window.location.hostname);
|
|
345
|
-
const isWhitelisted = url.includes('wa.me') ||
|
|
346
|
-
url.includes('hotmart.com') ||
|
|
347
|
-
url.includes('kiwify.com') ||
|
|
368
|
+
const isWhitelisted = url.includes('wa.me') ||
|
|
369
|
+
url.includes('hotmart.com') ||
|
|
370
|
+
url.includes('kiwify.com') ||
|
|
348
371
|
url.includes('checkout');
|
|
349
|
-
|
|
372
|
+
|
|
350
373
|
if (isExternal && isWhitelisted) {
|
|
351
374
|
this.addScore(100, 'outbound_conversion_intent');
|
|
352
|
-
cdpTrack.track('outbound_click', {
|
|
375
|
+
cdpTrack.track('outbound_click', {
|
|
353
376
|
destination: url,
|
|
354
|
-
meta_intensity: 'high'
|
|
377
|
+
meta_intensity: 'high'
|
|
355
378
|
});
|
|
356
379
|
}
|
|
357
380
|
}
|
|
Binary file
|
package/docs/installation.md
DELETED
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
# CDP Edge — Instalação em Projetos de Clientes
|
|
2
|
-
|
|
3
|
-
Como integrar o CDP Edge em qualquer projeto para que Claude Code, VS Code, Cursor e outras IDEs com IA o reconheçam automaticamente.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Estrutura recomendada
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
meu-projeto-cliente/ ← abrir esta pasta no Claude Code / VS Code
|
|
11
|
-
├── CLAUDE.md ← ⭐ faz o Claude Code ativar o CDP Edge automaticamente
|
|
12
|
-
├── .cursorrules ← (opcional) para Cursor IDE
|
|
13
|
-
├── cdp-edge/ ← CDP Edge instalado aqui
|
|
14
|
-
│ ├── extracted-skill/
|
|
15
|
-
│ ├── server-edge-tracker/
|
|
16
|
-
│ ├── templates/
|
|
17
|
-
│ └── docs/
|
|
18
|
-
├── src/ ← código do projeto do cliente
|
|
19
|
-
└── ...
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Passo 1 — Instalar o CDP Edge na pasta do projeto
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
# Dentro da pasta do projeto do cliente:
|
|
28
|
-
cd meu-projeto-cliente
|
|
29
|
-
|
|
30
|
-
# Opção A — clonar o CDP Edge como subpasta
|
|
31
|
-
git clone https://github.com/ricardosoli777/CDP-Edge-Premium cdp-edge
|
|
32
|
-
|
|
33
|
-
# Opção B — copiar manualmente
|
|
34
|
-
# Copiar a pasta CDP-Edge inteira e renomear para cdp-edge/
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## Passo 2 — Criar o CLAUDE.md na raiz do projeto
|
|
40
|
-
|
|
41
|
-
Copiar o template de ativação:
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
cp cdp-edge/templates/install/CLAUDE.md ./CLAUDE.md
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Editar o `CLAUDE.md` e substituir `[NOME DO PROJETO]` pelo nome real do projeto.
|
|
48
|
-
|
|
49
|
-
**Por que isso funciona:**
|
|
50
|
-
O Claude Code lê o `CLAUDE.md` da raiz do diretório aberto automaticamente. Quando encontra a instrução de leitura do `master-orchestrator.md`, ativa o sistema imediatamente na abertura da sessão.
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## Passo 3 — Abrir o projeto no Claude Code
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
# Na pasta do projeto (não dentro do cdp-edge):
|
|
58
|
-
claude .
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
O Claude Code vai:
|
|
62
|
-
1. Ler o `CLAUDE.md` da raiz
|
|
63
|
-
2. Encontrar a instrução de ativação do CDP Edge
|
|
64
|
-
3. Carregar o `master-orchestrator.md`
|
|
65
|
-
4. Exibir a mensagem de boas-vindas automaticamente
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## Para VS Code com extensão Claude
|
|
70
|
-
|
|
71
|
-
O mesmo mecanismo funciona. O `CLAUDE.md` é lido pela extensão Claude Code no VS Code quando você abre a pasta do projeto.
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
code meu-projeto-cliente/
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## Para Cursor IDE
|
|
80
|
-
|
|
81
|
-
Criar adicionalmente um `.cursorrules` na raiz:
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
cp cdp-edge/templates/install/CLAUDE.md .cursorrules
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
O Cursor lê `.cursorrules` automaticamente e aplica as instruções ao agente AI.
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
## Para qualquer outra IDE com AI
|
|
92
|
-
|
|
93
|
-
Qualquer IDE que suporte arquivos de instrução (`.aidioms`, `system-prompt.md`, etc.) pode usar o mesmo conteúdo do `CLAUDE.md` adaptado para o formato da IDE.
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## Verificar se funcionou
|
|
98
|
-
|
|
99
|
-
Ao abrir o projeto no Claude Code, você deve ver imediatamente:
|
|
100
|
-
|
|
101
|
-
```
|
|
102
|
-
👋 Olá! Bem-vindo ao CDP Edge — Quantum Tracking.
|
|
103
|
-
|
|
104
|
-
Sou o seu Orquestrador de Rastreamento. Vou configurar toda a
|
|
105
|
-
infraestrutura de tracking server-side para o seu projeto...
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
Se não aparecer automaticamente, digitar:
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
/cdp
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
ou simplesmente:
|
|
115
|
-
|
|
116
|
-
```
|
|
117
|
-
ative o master orchestrator do cdp edge
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## Se o CDP Edge estiver em um caminho diferente
|
|
123
|
-
|
|
124
|
-
Editar o `CLAUDE.md` na raiz e ajustar o path:
|
|
125
|
-
|
|
126
|
-
```markdown
|
|
127
|
-
<!-- Padrão: -->
|
|
128
|
-
Leia o arquivo: `cdp-edge/extracted-skill/tracking-events-generator/agents/master-orchestrator.md`
|
|
129
|
-
|
|
130
|
-
<!-- Se instalado em outro lugar: -->
|
|
131
|
-
Leia o arquivo: `ferramentas/cdp/extracted-skill/tracking-events-generator/agents/master-orchestrator.md`
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## Estrutura de múltiplos projetos (workspace compartilhado)
|
|
137
|
-
|
|
138
|
-
Se você trabalha com vários clientes e quer uma instalação única do CDP Edge:
|
|
139
|
-
|
|
140
|
-
```
|
|
141
|
-
workspace/
|
|
142
|
-
├── cdp-edge/ ← instalação única compartilhada
|
|
143
|
-
├── cliente-1/
|
|
144
|
-
│ ├── CLAUDE.md ← aponta para ../cdp-edge/...
|
|
145
|
-
│ └── src/
|
|
146
|
-
├── cliente-2/
|
|
147
|
-
│ ├── CLAUDE.md ← aponta para ../cdp-edge/...
|
|
148
|
-
│ └── src/
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
No `CLAUDE.md` de cada cliente, usar path relativo:
|
|
152
|
-
|
|
153
|
-
```markdown
|
|
154
|
-
Leia o arquivo: `../cdp-edge/extracted-skill/tracking-events-generator/agents/master-orchestrator.md`
|
|
155
|
-
```
|
package/docs/quick-start.md
DELETED
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
# CDP Edge — Quick Start
|
|
2
|
-
> Do zero ao primeiro evento em produção.
|
|
3
|
-
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## Pré-requisitos
|
|
7
|
-
|
|
8
|
-
| Ferramenta | Instalar |
|
|
9
|
-
|---|---|
|
|
10
|
-
| Node.js 18+ | nodejs.org |
|
|
11
|
-
| Wrangler CLI | `npm install -g wrangler` |
|
|
12
|
-
| Conta Cloudflare | cloudflare.com (plano gratuito suficiente) |
|
|
13
|
-
| Conta Meta (Pixel + token CAPI) | business.facebook.com |
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## 1. Autenticar no Cloudflare
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
wrangler login
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## 2. Criar o banco D1
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
wrangler d1 create cdp-edge-db
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Copie o `database_id` retornado e cole no `wrangler.toml`:
|
|
32
|
-
|
|
33
|
-
```toml
|
|
34
|
-
[[d1_databases]]
|
|
35
|
-
binding = "DB"
|
|
36
|
-
database_name = "cdp-edge-db"
|
|
37
|
-
database_id = "COLE_O_ID_AQUI"
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## 3. Aplicar o schema
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
cd server-edge-tracker
|
|
46
|
-
|
|
47
|
-
wrangler d1 execute cdp-edge-db --file=schema.sql --remote
|
|
48
|
-
wrangler d1 execute cdp-edge-db --file=migrate-v2.sql --remote
|
|
49
|
-
wrangler d1 execute cdp-edge-db --file=migrate-v3.sql --remote
|
|
50
|
-
wrangler d1 execute cdp-edge-db --file=migrate-v4.sql --remote
|
|
51
|
-
wrangler d1 execute cdp-edge-db --file=migrate-v5.sql --remote
|
|
52
|
-
wrangler d1 execute cdp-edge-db --file=migrate-v6.sql --remote
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## 4. Configurar secrets
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
wrangler secret put META_ACCESS_TOKEN
|
|
61
|
-
wrangler secret put GA4_API_SECRET
|
|
62
|
-
wrangler secret put TIKTOK_ACCESS_TOKEN
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Para WhatsApp CTWA (opcional):
|
|
66
|
-
```bash
|
|
67
|
-
wrangler secret put WA_WEBHOOK_VERIFY_TOKEN
|
|
68
|
-
wrangler secret put WHATSAPP_TOKEN
|
|
69
|
-
wrangler secret put WHATSAPP_PHONE_NUMBER_ID
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## 5. Atualizar variáveis públicas no wrangler.toml
|
|
75
|
-
|
|
76
|
-
```toml
|
|
77
|
-
[vars]
|
|
78
|
-
META_PIXEL_ID = "SEU_PIXEL_ID"
|
|
79
|
-
GA4_MEASUREMENT_ID = "G-XXXXXXXXXX"
|
|
80
|
-
TIKTOK_PIXEL_ID = "CXXXXXXXXXXXXXXX"
|
|
81
|
-
SITE_DOMAIN = "seudominio.com.br"
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## 6. Deploy
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
wrangler deploy
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
O Worker ficará disponível em:
|
|
93
|
-
```
|
|
94
|
-
https://server-edge-tracker.SEU-USUARIO.workers.dev
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## 7. Testar o Worker
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
# Health check
|
|
103
|
-
curl https://server-edge-tracker.SEU-USUARIO.workers.dev/health
|
|
104
|
-
|
|
105
|
-
# Evento de teste
|
|
106
|
-
curl -X POST https://server-edge-tracker.SEU-USUARIO.workers.dev/track \
|
|
107
|
-
-H "Content-Type: application/json" \
|
|
108
|
-
-d '{
|
|
109
|
-
"event": "PageView",
|
|
110
|
-
"url": "https://seudominio.com.br/",
|
|
111
|
-
"email": "teste@exemplo.com"
|
|
112
|
-
}'
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Resposta esperada: `{"success":true}`
|
|
116
|
-
|
|
117
|
-
---
|
|
118
|
-
|
|
119
|
-
## 8. Instalar o SDK no site
|
|
120
|
-
|
|
121
|
-
```html
|
|
122
|
-
<!-- No <head> de todas as páginas -->
|
|
123
|
-
<script>
|
|
124
|
-
window.CDP_CONFIG = {
|
|
125
|
-
endpoint: 'https://server-edge-tracker.SEU-USUARIO.workers.dev/track',
|
|
126
|
-
pixelId: 'SEU_PIXEL_ID'
|
|
127
|
-
};
|
|
128
|
-
</script>
|
|
129
|
-
<script src="/js/cdpTrack.js" type="module" async></script>
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
O SDK inicializa automaticamente e dispara `PageView` ao carregar.
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## 9. Verificar no Meta Events Manager
|
|
137
|
-
|
|
138
|
-
```
|
|
139
|
-
Meta Business Suite
|
|
140
|
-
→ Gerenciador de Eventos
|
|
141
|
-
→ Seu Pixel
|
|
142
|
-
→ Atividade de Teste
|
|
143
|
-
→ Filtrar por "Servidor"
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
Você deve ver o `PageView` chegando com `action_source: website`.
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
## 10. (Opcional) Conectar domínio próprio
|
|
151
|
-
|
|
152
|
-
Para máxima eficácia (cookie first-party no domínio do cliente):
|
|
153
|
-
|
|
154
|
-
```
|
|
155
|
-
Cloudflare Dashboard → DNS → Add record
|
|
156
|
-
Type: CNAME
|
|
157
|
-
Name: track
|
|
158
|
-
Target: server-edge-tracker.SEU-USUARIO.workers.dev
|
|
159
|
-
Proxy: ✅ (nuvem laranja)
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
Adicionar ao `wrangler.toml`:
|
|
163
|
-
```toml
|
|
164
|
-
[[routes]]
|
|
165
|
-
pattern = "track.seudominio.com.br/*"
|
|
166
|
-
zone_name = "seudominio.com.br"
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
```bash
|
|
170
|
-
wrangler deploy
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
Ver detalhes: `agents/domain-setup-agent.md`
|
|
174
|
-
|
|
175
|
-
---
|
|
176
|
-
|
|
177
|
-
## Próximos passos
|
|
178
|
-
|
|
179
|
-
| O que fazer | Onde está |
|
|
180
|
-
|---|---|
|
|
181
|
-
| Configurar WhatsApp CTWA | `agents/whatsapp-ctwa-setup-agent.md` |
|
|
182
|
-
| Ativar R2 audit log | `agents/r2-setup-agent.md` |
|
|
183
|
-
| Configurar gateways de pagamento | `agents/webhook-agent.md` |
|
|
184
|
-
| Ver todos os eventos disponíveis | `docs/events-reference.md` |
|
|
185
|
-
| Ver API do SDK browser | `docs/sdk-reference.md` |
|