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,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ENGAGEMENT SCORING - CDP Edge (Quantum Tier)
|
|
3
|
+
*
|
|
4
|
+
* Cálculo preliminar de engajamento no browser.
|
|
5
|
+
* O cálculo final é feito no servidor para máxima precisão.
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
// ── Configurações ──────────────────────────────────────────────────────
|
|
10
|
+
const ENGAGEMENT_CONFIG = {
|
|
11
|
+
timeWeights: {
|
|
12
|
+
'curioso': 1.0, // < 10s: score base 1.0
|
|
13
|
+
'interessado': 2.5, // 10-60s: score base 2.5
|
|
14
|
+
'comprador': 4.0 // > 60s: score base 4.0
|
|
15
|
+
},
|
|
16
|
+
scrollWeights: {
|
|
17
|
+
'baixo': 1.0, // < 25%: score base 1.0
|
|
18
|
+
'medio': 2.0, // 25-75%: score base 2.0
|
|
19
|
+
'alto': 3.0 // > 75%: score base 3.0
|
|
20
|
+
},
|
|
21
|
+
clickWeights: {
|
|
22
|
+
'generico': 1.0, // clique sem categoria
|
|
23
|
+
'cta': 2.5, // clique em CTA
|
|
24
|
+
'button': 2.0 // clique em botão
|
|
25
|
+
'link': 1.5 // clique em link
|
|
26
|
+
'input': 0.5, // clique em input
|
|
27
|
+
},
|
|
28
|
+
videoWeights: {
|
|
29
|
+
'play': 1.5, // vídeo iniciou
|
|
30
|
+
'progress25': 2.0, // 25% assistido
|
|
31
|
+
'progress50': 3.0, // 50% assistido
|
|
32
|
+
'progress75': 4.0, // 75% assistido
|
|
33
|
+
'complete': 5.0 // vídeo completo
|
|
34
|
+
},
|
|
35
|
+
hoverWeights: {
|
|
36
|
+
'curto': 1.0, // < 3s: hover curto
|
|
37
|
+
'medio': 2.0, // 3-10s: hover médio
|
|
38
|
+
'longo': 3.0 // > 10s: hover longo
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// ── Estado Global ──────────────────────────────────────────────────────
|
|
43
|
+
const engagementState = {
|
|
44
|
+
timeOnPage: 0,
|
|
45
|
+
scrollDepth: 0,
|
|
46
|
+
clicksCount: 0,
|
|
47
|
+
videoEngagement: 0,
|
|
48
|
+
ctaHoverTime: 0,
|
|
49
|
+
lastActivityTime: Date.now()
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// ── Calculadoras ──────────────────────────────────────────────────────────────
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Calcular score de tempo na página
|
|
56
|
+
* @param {number} timeOnPage - Tempo em segundos desde o carregamento
|
|
57
|
+
* @returns {object} Score e nível de intenção
|
|
58
|
+
*/
|
|
59
|
+
function calculateTimeScore(timeOnPage) {
|
|
60
|
+
let level = 'curioso';
|
|
61
|
+
let score = ENGAGEMENT_CONFIG.timeWeights.curioso;
|
|
62
|
+
|
|
63
|
+
if (timeOnPage >= 10 && timeOnPage < 60) {
|
|
64
|
+
level = 'interessado';
|
|
65
|
+
score = ENGAGEMENT_CONFIG.timeWeights.interessado;
|
|
66
|
+
} else if (timeOnPage >= 60) {
|
|
67
|
+
level = 'comprador';
|
|
68
|
+
score = ENGAGEMENT_CONFIG.timeWeights.comprador;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return { score, level };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Calcular score de scroll
|
|
76
|
+
* @param {number} scrollDepth - Porcentagem de scroll (0-100)
|
|
77
|
+
* @returns {object} Score e nível
|
|
78
|
+
*/
|
|
79
|
+
function calculateScrollScore(scrollDepth) {
|
|
80
|
+
let level = 'baixo';
|
|
81
|
+
let score = ENGAGEMENT_CONFIG.scrollWeights.baixo;
|
|
82
|
+
|
|
83
|
+
if (scrollDepth >= 25 && scrollDepth < 75) {
|
|
84
|
+
level = 'medio';
|
|
85
|
+
score = ENGAGEMENT_CONFIG.scrollWeights.medio;
|
|
86
|
+
} else if (scrollDepth >= 75) {
|
|
87
|
+
level = 'alto';
|
|
88
|
+
score = ENGAGEMENT_CONFIG.scrollWeights.alto;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return { score, level };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Calcular score de cliques
|
|
96
|
+
* @param {number} clicksCount - Número de cliques
|
|
97
|
+
* @param {string} clickCategory - Categoria do clique
|
|
98
|
+
* @returns {number} Score de clique
|
|
99
|
+
*/
|
|
100
|
+
function calculateClickScore(clicksCount, clickCategory) {
|
|
101
|
+
const baseScore = ENGAGEMENT_CONFIG.clickWeights.generico;
|
|
102
|
+
const categoryBonus = ENGAGEMENT_CONFIG.clickWeights[clickCategory] || 1.0;
|
|
103
|
+
|
|
104
|
+
// Penalidade para cliques excessivos (após 50 cliques)
|
|
105
|
+
const clickPenalty = Math.max(0, 1 - (clicksCount / 50));
|
|
106
|
+
|
|
107
|
+
return baseScore + categoryBonus;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Calcular score de vídeo
|
|
112
|
+
* @param {string} videoEvent - Tipo de evento de vídeo
|
|
113
|
+
* @returns {number} Score de vídeo
|
|
114
|
+
*/
|
|
115
|
+
function calculateVideoScore(videoEvent) {
|
|
116
|
+
return ENGAGEMENT_CONFIG.videoWeights[videoEvent] || 0;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Calcular score de hover no CTA
|
|
121
|
+
* @param {number} hoverTime - Tempo em segundos de hover
|
|
122
|
+
* @returns {number} Score de hover
|
|
123
|
+
*/
|
|
124
|
+
function calculateHoverScore(hoverTime) {
|
|
125
|
+
let level = 'curto';
|
|
126
|
+
let score = ENGAGEMENT_CONFIG.hoverWeights.curto;
|
|
127
|
+
|
|
128
|
+
if (hoverTime >= 3 && hoverTime < 10) {
|
|
129
|
+
level = 'medio';
|
|
130
|
+
score = ENGAGEMENT_CONFIG.hoverWeights.medio;
|
|
131
|
+
} else if (hoverTime >= 10) {
|
|
132
|
+
level = 'longo';
|
|
133
|
+
score = ENGAGEMENT_CONFIG.hoverWeights.longo;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return { score, level };
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// ── Função Principal de Cálculo ──────────────────────────────────────────────
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Calcular score de engajamento total (browser-side preliminar)
|
|
143
|
+
* @returns {object} Score, nível, componentes
|
|
144
|
+
*/
|
|
145
|
+
function calculateEngagementScore() {
|
|
146
|
+
// 1. Score de tempo
|
|
147
|
+
const { score: timeScore, level: timeLevel } = calculateTimeScore(engagementState.timeOnPage);
|
|
148
|
+
|
|
149
|
+
// 2. Score de scroll
|
|
150
|
+
const { score: scrollScore } = calculateScrollScore(engagementState.scrollDepth);
|
|
151
|
+
|
|
152
|
+
// 3. Score de cliques (com base na média)
|
|
153
|
+
const clickScore = engagementState.clicksCount > 0
|
|
154
|
+
? calculateClickScore(engagementState.clicksCount, 'generico')
|
|
155
|
+
: 0;
|
|
156
|
+
|
|
157
|
+
// 4. Score de vídeo
|
|
158
|
+
const videoScore = engagementState.videoEngagement;
|
|
159
|
+
|
|
160
|
+
// 5. Score de hover no CTA
|
|
161
|
+
const hoverScore = engagementState.ctaHoverTime > 0
|
|
162
|
+
? calculateHoverScore(engagementState.ctaHoverTime / 1000)
|
|
163
|
+
: 0;
|
|
164
|
+
|
|
165
|
+
// 6. Cálculo ponderado
|
|
166
|
+
const totalScore = (
|
|
167
|
+
(timeScore * 0.3) + // 30% peso para tempo
|
|
168
|
+
(scrollScore * 0.2) + // 20% peso para scroll
|
|
169
|
+
(clickScore * 0.15) + // 15% peso para cliques
|
|
170
|
+
(videoScore * 0.25) + // 25% peso para vídeo
|
|
171
|
+
(hoverScore * 0.1) // 10% peso para hover
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
// 7. Nível final de intenção
|
|
175
|
+
let intentionLevel = timeLevel;
|
|
176
|
+
if (totalScore < 1.5) {
|
|
177
|
+
intentionLevel = 'curioso';
|
|
178
|
+
} else if (totalScore < 2.5) {
|
|
179
|
+
intentionLevel = 'interessado';
|
|
180
|
+
} else {
|
|
181
|
+
intentionLevel = 'comprador';
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return {
|
|
185
|
+
totalScore: Math.min(totalScore, 5.0),
|
|
186
|
+
timeScore,
|
|
187
|
+
scrollScore,
|
|
188
|
+
clickScore,
|
|
189
|
+
videoScore,
|
|
190
|
+
hoverScore,
|
|
191
|
+
intentionLevel,
|
|
192
|
+
components: {
|
|
193
|
+
timeOnPage: engagementState.timeOnPage,
|
|
194
|
+
scrollDepth: engagementState.scrollDepth,
|
|
195
|
+
clicksCount: engagementState.clicksCount,
|
|
196
|
+
videoEngagement: engagementState.videoEngagement,
|
|
197
|
+
ctaHoverTime: engagementState.ctaHoverTime
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// ── Atualizador de Estado ──────────────────────────────────────────────────────
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Atualizar estado de engajamento
|
|
206
|
+
* @param {string} component - Componente a atualizar
|
|
207
|
+
* @param {any} value - Novo valor
|
|
208
|
+
*/
|
|
209
|
+
function updateEngagementState(component, value) {
|
|
210
|
+
engagementState[component] = value;
|
|
211
|
+
engagementState.lastActivityTime = Date.now();
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// ── Exportações ─────────────────────────────────────────────────────────────────────
|
|
215
|
+
|
|
216
|
+
export {
|
|
217
|
+
calculateTimeScore,
|
|
218
|
+
calculateScrollScore,
|
|
219
|
+
calculateClickScore,
|
|
220
|
+
calculateVideoScore,
|
|
221
|
+
calculateHoverScore,
|
|
222
|
+
calculateEngagementScore,
|
|
223
|
+
updateEngagementState,
|
|
224
|
+
engagementState,
|
|
225
|
+
ENGAGEMENT_CONFIG
|
|
226
|
+
};
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "tracking-events-generator",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"group": "browser-only",
|
|
7
|
+
"note": "Eval legado — testa output browser-only (sem Cloudflare). Mantido para retrocompatibilidade.",
|
|
8
|
+
"prompt": "Cria os eventos de tracking para minha página de imóvel em SBC (São Bernardo do Campo), apartamento de 260m², 3 vagas de garagem, bairro nobre. Preciso rastrear para Meta Ads e Google Ads.",
|
|
9
|
+
"expected_output": "Código completo com Meta Pixel base (PageView), ViewContent com parâmetros de imóvel (city: São Bernardo do Campo, region: SP, content_type: home_listing, property_size: 260), evento Lead para formulário, evento Contact para WhatsApp, Google Ads global tag com evento de conversão para lead, e instruções de implementação.",
|
|
10
|
+
"assertions": [
|
|
11
|
+
{
|
|
12
|
+
"name": "contem_meta_pixel_base",
|
|
13
|
+
"type": "contains",
|
|
14
|
+
"value": "fbq('init'"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"name": "contem_pageview",
|
|
18
|
+
"type": "contains",
|
|
19
|
+
"value": "PageView"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "contem_viewcontent",
|
|
23
|
+
"type": "contains",
|
|
24
|
+
"value": "ViewContent"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "contem_home_listing",
|
|
28
|
+
"type": "contains",
|
|
29
|
+
"value": "home_listing"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "contem_sbc_ou_sao_bernardo",
|
|
33
|
+
"type": "contains_any",
|
|
34
|
+
"value": ["São Bernardo", "sao_bernardo", "SBC", "s_o_bernardo"]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "contem_google_ads_tag",
|
|
38
|
+
"type": "contains",
|
|
39
|
+
"value": "gtag"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"name": "contem_evento_lead",
|
|
43
|
+
"type": "contains",
|
|
44
|
+
"value": "Lead"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "contem_evento_contact",
|
|
48
|
+
"type": "contains",
|
|
49
|
+
"value": "Contact"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"name": "contem_instrucoes_implementacao",
|
|
53
|
+
"type": "contains_any",
|
|
54
|
+
"value": ["implementar", "Implementar", "IMPLEMENTAR", "colar", "Colar", "head"]
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"files": []
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": 2,
|
|
61
|
+
"group": "browser-only",
|
|
62
|
+
"note": "Eval legado — testa output browser-only (sem Cloudflare). Mantido para retrocompatibilidade.",
|
|
63
|
+
"prompt": "Preciso de tracking para uma página de vendas do meu curso online de Excel avançado, valor R$497. Quero rastrear Meta Pixel e Google Ads. A página tem um botão de compra que vai para o checkout da Hotmart.",
|
|
64
|
+
"expected_output": "Código com Meta Pixel base, ViewContent para produto digital (content_type: product, value: 497, currency: BRL), InitiateCheckout no clique do botão de compra, Purchase na página de obrigado, Google Ads com evento de conversão de compra, e instruções sobre como capturar o Purchase na Hotmart.",
|
|
65
|
+
"assertions": [
|
|
66
|
+
{
|
|
67
|
+
"name": "contem_meta_pixel",
|
|
68
|
+
"type": "contains",
|
|
69
|
+
"value": "fbq('init'"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "contem_viewcontent",
|
|
73
|
+
"type": "contains",
|
|
74
|
+
"value": "ViewContent"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "contem_initiate_checkout",
|
|
78
|
+
"type": "contains",
|
|
79
|
+
"value": "InitiateCheckout"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"name": "contem_purchase",
|
|
83
|
+
"type": "contains",
|
|
84
|
+
"value": "Purchase"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"name": "contem_valor_497",
|
|
88
|
+
"type": "contains_any",
|
|
89
|
+
"value": ["497", "497.00"]
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "contem_currency_brl",
|
|
93
|
+
"type": "contains",
|
|
94
|
+
"value": "BRL"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"name": "contem_google_ads",
|
|
98
|
+
"type": "contains",
|
|
99
|
+
"value": "gtag"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"name": "menciona_hotmart",
|
|
103
|
+
"type": "contains",
|
|
104
|
+
"value": "Hotmart"
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
"files": []
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": 3,
|
|
111
|
+
"group": "browser-only",
|
|
112
|
+
"note": "Eval legado — testa output browser-only (sem Cloudflare). Mantido para retrocompatibilidade.",
|
|
113
|
+
"prompt": "Minha clínica de estética tem uma página de agendamento de consulta. Quero rastrear quando alguém visualiza a página, quando clica no WhatsApp e quando preenche o formulário de agendamento. Usa só o Meta Pixel por enquanto, não precisa do Google Ads.",
|
|
114
|
+
"expected_output": "Código com Meta Pixel base, PageView, ViewContent para serviço, evento Contact no clique do WhatsApp, evento Schedule no envio do formulário de agendamento. Não deve incluir código do Google Ads (somente Meta Pixel conforme solicitado).",
|
|
115
|
+
"assertions": [
|
|
116
|
+
{
|
|
117
|
+
"name": "contem_meta_pixel",
|
|
118
|
+
"type": "contains",
|
|
119
|
+
"value": "fbq('init'"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"name": "contem_pageview",
|
|
123
|
+
"type": "contains",
|
|
124
|
+
"value": "PageView"
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"name": "contem_contact_whatsapp",
|
|
128
|
+
"type": "contains",
|
|
129
|
+
"value": "Contact"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"name": "contem_schedule",
|
|
133
|
+
"type": "contains",
|
|
134
|
+
"value": "Schedule"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"name": "nao_deve_ter_google_ads_obrigatorio",
|
|
138
|
+
"type": "note",
|
|
139
|
+
"value": "Google Ads não solicitado — verificar se o skill respeitou essa restrição ou ofereceu como opcional"
|
|
140
|
+
}
|
|
141
|
+
],
|
|
142
|
+
"files": []
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"id": 4,
|
|
146
|
+
"group": "tier10",
|
|
147
|
+
"note": "Eval Quantum Tier — verifica padrões Cloudflare Native (cdpTrack SDK + Worker server-side).",
|
|
148
|
+
"prompt": "Cria o tracking completo Quantum Tier para uma página de vendas de curso online (R$997). Preciso de Meta CAPI v22.0 + GA4 + TikTok, com Worker Cloudflare. O botão de compra vai para o checkout da Hotmart.",
|
|
149
|
+
"expected_output": "tracking.js com cdpTrack.track(), worker.js com endpoints /track e /webhook/hotmart, deduplicação por event_id, SHA-256 via crypto.subtle, D1 para persistência, event_id idêntico entre browser e servidor.",
|
|
150
|
+
"assertions": [
|
|
151
|
+
{
|
|
152
|
+
"name": "usa_cdptrack_sdk",
|
|
153
|
+
"type": "contains",
|
|
154
|
+
"value": "cdpTrack.track("
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"name": "usa_worker_endpoint",
|
|
158
|
+
"type": "contains_any",
|
|
159
|
+
"value": ["/track", "cdpTrack"]
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"name": "contem_event_id_dedup",
|
|
163
|
+
"type": "contains",
|
|
164
|
+
"value": "event_id"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"name": "contem_capi_v22",
|
|
168
|
+
"type": "contains",
|
|
169
|
+
"value": "v22.0"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"name": "contem_sha256_webcrypto",
|
|
173
|
+
"type": "contains",
|
|
174
|
+
"value": "crypto.subtle"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"name": "contem_purchase",
|
|
178
|
+
"type": "contains",
|
|
179
|
+
"value": "Purchase"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"name": "contem_initiate_checkout",
|
|
183
|
+
"type": "contains",
|
|
184
|
+
"value": "InitiateCheckout"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"name": "contem_currency_brl",
|
|
188
|
+
"type": "contains",
|
|
189
|
+
"value": "BRL"
|
|
190
|
+
}
|
|
191
|
+
],
|
|
192
|
+
"files": []
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"id": 5,
|
|
196
|
+
"group": "tier10",
|
|
197
|
+
"note": "Eval Quantum Tier — verifica tratamento correto de webhook de compra com D1 match.",
|
|
198
|
+
"prompt": "Meu Worker Cloudflare recebe webhook da Kiwify. Preciso que ele recupere o fbp/fbc do D1 pelo email do comprador e dispare o Purchase para Meta CAPI v22.0 e TikTok Events API v1.3.",
|
|
199
|
+
"expected_output": "Worker com handler /webhook/kiwify, lookup de user_profiles no D1 por email, payload com fbp/fbc recuperados, SHA-256 de email e telefone, event_id = kiwify_{order_id}, endpoint Meta v22.0, endpoint TikTok v1.3.",
|
|
200
|
+
"assertions": [
|
|
201
|
+
{
|
|
202
|
+
"name": "contem_webhook_kiwify",
|
|
203
|
+
"type": "contains",
|
|
204
|
+
"value": "/webhook/kiwify"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"name": "recupera_fbp_do_d1",
|
|
208
|
+
"type": "contains_any",
|
|
209
|
+
"value": ["profile?.fbp", "profile.fbp", "getProfileByEmail"]
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"name": "usa_capi_v22",
|
|
213
|
+
"type": "contains",
|
|
214
|
+
"value": "v22.0"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"name": "usa_tiktok_v13",
|
|
218
|
+
"type": "contains",
|
|
219
|
+
"value": "v1.3"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"name": "contem_sha256",
|
|
223
|
+
"type": "contains",
|
|
224
|
+
"value": "SHA-256"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"name": "contem_event_id_kiwify",
|
|
228
|
+
"type": "contains_any",
|
|
229
|
+
"value": ["kiwify_", "order_id"]
|
|
230
|
+
}
|
|
231
|
+
],
|
|
232
|
+
"files": []
|
|
233
|
+
}
|
|
234
|
+
]
|
|
235
|
+
}
|