cdp-edge 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +244 -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 +5 -5
- package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +81 -21
- package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +428 -190
- package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +304 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.json +25 -109
- 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 +749 -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
|
@@ -26,7 +26,7 @@ Prover **ferramentas profissionais de diagnóstico** que permitam identificar, i
|
|
|
26
26
|
|
|
27
27
|
### 1.1 Log de Worker (Server-Side)
|
|
28
28
|
|
|
29
|
-
```
|
|
29
|
+
```typescript
|
|
30
30
|
// Funções de logging estruturado para Cloudflare Worker
|
|
31
31
|
export const WORKER_LOG_LEVELS = {
|
|
32
32
|
ERROR: 'ERROR',
|
|
@@ -56,9 +56,9 @@ export function logWorker(level, category, message, context = {}) {
|
|
|
56
56
|
console.log(`[${level}] [${category}] ${message}`, JSON.stringify(context));
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
async function persistLogEntry(logEntry) {
|
|
59
|
+
async function persistLogEntry(env, logEntry) {
|
|
60
60
|
try {
|
|
61
|
-
await DB.prepare(`
|
|
61
|
+
await env.DB.prepare(`
|
|
62
62
|
INSERT INTO worker_logs (timestamp, level, category, message, context, session_id, request_id)
|
|
63
63
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
64
64
|
`).bind(
|
|
@@ -82,7 +82,7 @@ async function dispatchEventToMeta(event, userContext) {
|
|
|
82
82
|
try {
|
|
83
83
|
const response = await fetch('https://graph.facebook.com/v22.0/events', {
|
|
84
84
|
method: 'POST',
|
|
85
|
-
headers: { 'Authorization': `Bearer ${META_ACCESS_TOKEN}` },
|
|
85
|
+
headers: { 'Authorization': `Bearer ${env.META_ACCESS_TOKEN}` },
|
|
86
86
|
body: JSON.stringify(event)
|
|
87
87
|
});
|
|
88
88
|
|
|
@@ -221,7 +221,7 @@ cdpTrack.track = function(eventName, params) {
|
|
|
221
221
|
};
|
|
222
222
|
|
|
223
223
|
// Enviar para Worker
|
|
224
|
-
fetch('/
|
|
224
|
+
fetch('/track', {
|
|
225
225
|
method: 'POST',
|
|
226
226
|
headers: { 'Content-Type': 'application/json' },
|
|
227
227
|
body: JSON.stringify(eventPayload)
|
|
@@ -276,7 +276,7 @@ CREATE INDEX IF NOT EXISTS idx_browser_logs_session ON browser_logs(session_id);
|
|
|
276
276
|
|
|
277
277
|
### 2.1 Endpoint `/debug` — Informações Gerais
|
|
278
278
|
|
|
279
|
-
```
|
|
279
|
+
```typescript
|
|
280
280
|
// Endpoint de diagnóstico geral do sistema
|
|
281
281
|
export async function handleDebugRequest(request, env) {
|
|
282
282
|
const debugInfo = {
|
|
@@ -331,7 +331,7 @@ export async function handleDebugRequest(request, env) {
|
|
|
331
331
|
}
|
|
332
332
|
|
|
333
333
|
async function getApiHealth(platform) {
|
|
334
|
-
const recentFailures = await DB.prepare(`
|
|
334
|
+
const recentFailures = await env.DB.prepare(`
|
|
335
335
|
SELECT
|
|
336
336
|
COUNT(*) as failure_count,
|
|
337
337
|
MAX(created_at) as last_failure_at
|
|
@@ -339,7 +339,7 @@ async function getApiHealth(platform) {
|
|
|
339
339
|
WHERE platform = ? AND created_at > datetime('now', '-1 hour')
|
|
340
340
|
`).bind(platform).get();
|
|
341
341
|
|
|
342
|
-
const recentSuccesses = await DB.prepare(`
|
|
342
|
+
const recentSuccesses = await env.DB.prepare(`
|
|
343
343
|
SELECT COUNT(*) as success_count
|
|
344
344
|
FROM events_log
|
|
345
345
|
WHERE platform = ? AND status = 'success' AND created_at > datetime('now', '-1 hour')
|
|
@@ -360,7 +360,7 @@ async function getApiHealth(platform) {
|
|
|
360
360
|
|
|
361
361
|
### 2.2 Endpoint `/health` — Health Check Simplificado
|
|
362
362
|
|
|
363
|
-
```
|
|
363
|
+
```typescript
|
|
364
364
|
// Endpoint simplificado para monitoring externo
|
|
365
365
|
export async function handleHealthCheck(request, env) {
|
|
366
366
|
const checks = {
|
|
@@ -394,7 +394,7 @@ export async function handleHealthCheck(request, env) {
|
|
|
394
394
|
}
|
|
395
395
|
|
|
396
396
|
async function getSimpleApiHealth(platform) {
|
|
397
|
-
const lastSuccess = await DB.prepare(`
|
|
397
|
+
const lastSuccess = await env.DB.prepare(`
|
|
398
398
|
SELECT created_at
|
|
399
399
|
FROM events_log
|
|
400
400
|
WHERE platform = ? AND status = 'success'
|
|
@@ -402,7 +402,7 @@ async function getSimpleApiHealth(platform) {
|
|
|
402
402
|
LIMIT 1
|
|
403
403
|
`).bind(platform).get();
|
|
404
404
|
|
|
405
|
-
const lastFailure = await DB.prepare(`
|
|
405
|
+
const lastFailure = await env.DB.prepare(`
|
|
406
406
|
SELECT created_at
|
|
407
407
|
FROM api_failures
|
|
408
408
|
WHERE platform = ?
|
|
@@ -426,14 +426,14 @@ async function getSimpleApiHealth(platform) {
|
|
|
426
426
|
|
|
427
427
|
### 2.3 Endpoint `/events-log` — Logs de Eventos Recentes
|
|
428
428
|
|
|
429
|
-
```
|
|
429
|
+
```typescript
|
|
430
430
|
// Endpoint para consultar logs de eventos
|
|
431
431
|
export async function handleEventsLogRequest(request, env) {
|
|
432
432
|
const url = new URL(request.url);
|
|
433
433
|
const limit = parseInt(url.searchParams.get('limit') || '50');
|
|
434
434
|
const hours = parseInt(url.searchParams.get('hours') || '24');
|
|
435
435
|
|
|
436
|
-
const events = await DB.prepare(`
|
|
436
|
+
const events = await env.DB.prepare(`
|
|
437
437
|
SELECT
|
|
438
438
|
event_name,
|
|
439
439
|
platform,
|
|
@@ -485,7 +485,7 @@ export async function handleEventsLogRequest(request, env) {
|
|
|
485
485
|
|
|
486
486
|
- [ ] **Envio de eventos para Worker:**
|
|
487
487
|
- [ ] Verificar Network tab em Developer Tools
|
|
488
|
-
- [ ] Confirmar requisição para `/
|
|
488
|
+
- [ ] Confirmar requisição para `/track`
|
|
489
489
|
- [ ] Verificar status da resposta (deve ser 200 OK)
|
|
490
490
|
- [ ] Verificar payload enviado (deve conter event_name, params, timestamp)
|
|
491
491
|
|
|
@@ -630,7 +630,7 @@ export async function handleEventsLogRequest(request, env) {
|
|
|
630
630
|
|
|
631
631
|
### 4.1 Diagnóstico de Erros de Meta (400/401/429)
|
|
632
632
|
|
|
633
|
-
```
|
|
633
|
+
```typescript
|
|
634
634
|
// Análise de erros específicos de Meta API
|
|
635
635
|
export async function diagnoseMetaError(errorCode, errorContext) {
|
|
636
636
|
const errorMap = {
|
|
@@ -747,7 +747,7 @@ export async function diagnoseMetaError(errorCode, errorContext) {
|
|
|
747
747
|
|
|
748
748
|
### 4.2 Diagnóstico de Erros de Google (400/401/429)
|
|
749
749
|
|
|
750
|
-
```
|
|
750
|
+
```typescript
|
|
751
751
|
// Análise de erros específicos de Google API
|
|
752
752
|
export async function diagnoseGoogleError(errorCode, errorContext) {
|
|
753
753
|
const errorMap = {
|
|
@@ -847,7 +847,7 @@ export async function diagnoseGoogleError(errorCode, errorContext) {
|
|
|
847
847
|
|
|
848
848
|
### 4.3 Diagnóstico de Erros de TikTok (400/401/429)
|
|
849
849
|
|
|
850
|
-
```
|
|
850
|
+
```typescript
|
|
851
851
|
// Análise de erros específicos de TikTok API
|
|
852
852
|
export async function diagnoseTikTokError(errorCode, errorContext) {
|
|
853
853
|
const errorMap = {
|
|
@@ -967,9 +967,9 @@ export async function diagnoseTikTokError(errorCode, errorContext) {
|
|
|
967
967
|
|
|
968
968
|
## 🎯 FORMATO DE SAÍDA
|
|
969
969
|
|
|
970
|
-
### DELIVERABLE 1: `debug-endpoints.
|
|
970
|
+
### DELIVERABLE 1: `modules/debug-endpoints.ts`
|
|
971
971
|
|
|
972
|
-
```
|
|
972
|
+
```typescript
|
|
973
973
|
// Funções de diagnóstico para Cloudflare Worker
|
|
974
974
|
import { logWorker, WORKER_LOG_LEVELS } from './worker-logging.js';
|
|
975
975
|
import { getApiHealth, getSimpleApiHealth } from './api-health.js';
|
|
@@ -1033,7 +1033,7 @@ export async function handleEventsLogRequest(request, env) {
|
|
|
1033
1033
|
const limit = parseInt(url.searchParams.get('limit') || '50');
|
|
1034
1034
|
const hours = parseInt(url.searchParams.get('hours') || '24');
|
|
1035
1035
|
|
|
1036
|
-
const events = await DB.prepare(`
|
|
1036
|
+
const events = await env.DB.prepare(`
|
|
1037
1037
|
SELECT event_name, platform, status, error_message, created_at
|
|
1038
1038
|
FROM events_log
|
|
1039
1039
|
WHERE created_at > datetime('now', '-${hours} hours')
|
|
@@ -1057,7 +1057,7 @@ export async function handleBrowserLogs(request, env) {
|
|
|
1057
1057
|
|
|
1058
1058
|
// Persistir logs do browser no D1
|
|
1059
1059
|
for (const log of logs) {
|
|
1060
|
-
await DB.prepare(`
|
|
1060
|
+
await env.DB.prepare(`
|
|
1061
1061
|
INSERT INTO browser_logs (timestamp, level, category, message, context, session_id, page_url)
|
|
1062
1062
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
1063
1063
|
`).bind(
|
|
@@ -1182,7 +1182,7 @@ window.pbDebugLogger = logger;
|
|
|
1182
1182
|
**Possíveis Causas:**
|
|
1183
1183
|
|
|
1184
1184
|
1. **Evento não está sendo enviado para a plataforma**
|
|
1185
|
-
- Verificar se `/
|
|
1185
|
+
- Verificar se `/track` está recebendo o evento
|
|
1186
1186
|
- Consultar `/api/events-log` para ver se evento foi processado
|
|
1187
1187
|
- Verificar logs do Worker: `wrangler tail`
|
|
1188
1188
|
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# DevOps Agent — CDP Edge
|
|
2
|
+
|
|
3
|
+
Você é o **Agente DevOps exclusivo** do CDP Edge. Nenhum outro agente pode executar deploys ou operações de infraestrutura Cloudflare. Toda operação de deploy passa obrigatoriamente por você.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ⚠️ AUTORIDADE EXCLUSIVA
|
|
8
|
+
|
|
9
|
+
| Operação | Exclusivo? |
|
|
10
|
+
|---|---|
|
|
11
|
+
| `wrangler deploy` | SIM — só você |
|
|
12
|
+
| `wrangler secret put` | SIM — só você |
|
|
13
|
+
| `wrangler d1 execute` (migrações) | SIM — só você |
|
|
14
|
+
| `wrangler kv namespace create` | SIM — só você |
|
|
15
|
+
| Rollback de versão | SIM — só você |
|
|
16
|
+
|
|
17
|
+
Outros agentes que precisarem de deploy **delegam para você** via `*deploy`.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## AUTONOMIA DE EXECUÇÃO
|
|
22
|
+
|
|
23
|
+
**Você executa TODOS os comandos diretamente via `! <comando>` no terminal da sessão.**
|
|
24
|
+
|
|
25
|
+
O usuário não executa nenhum comando wrangler. Você é o executor exclusivo. Quando receber `*deploy`, `*secrets`, `*migrate` ou `*smoke-test`, execute imediatamente usando a sintaxe `! wrangler ...` — nunca liste comandos "para o usuário rodar".
|
|
26
|
+
|
|
27
|
+
A única exceção é `wrangler login` — esse o usuário precisa rodar UMA VEZ por conta própria, pois abre o browser. Após autenticado, você assume tudo.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## CICLO DE DEPLOY AUTOMÁTICO
|
|
32
|
+
|
|
33
|
+
### Comando: `*deploy`
|
|
34
|
+
|
|
35
|
+
Executa o ciclo completo sem intervenção manual:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
1. Recebe os dados reais do Memory Agent
|
|
39
|
+
↓
|
|
40
|
+
2. Escreve temporariamente no wrangler.toml:
|
|
41
|
+
- META_PIXEL_ID, GA4_MEASUREMENT_ID, TIKTOK_PIXEL_ID, SITE_DOMAIN
|
|
42
|
+
- database_id (D1)
|
|
43
|
+
- id + preview_id (KV)
|
|
44
|
+
- [[routes]] do domínio do cliente
|
|
45
|
+
↓
|
|
46
|
+
3. Executa: wrangler deploy
|
|
47
|
+
↓
|
|
48
|
+
4. Confirma sucesso (Version ID + triggers ativos)
|
|
49
|
+
↓
|
|
50
|
+
5. Reverte IMEDIATAMENTE todos os valores para placeholder
|
|
51
|
+
↓
|
|
52
|
+
6. Confirma que CDP Edge está limpo (git status)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**O wrangler.toml nunca fica com dados reais após o deploy.**
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## PROCEDURE `*deploy`
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Passo 1 — Receber do Memory Agent:
|
|
63
|
+
# - META_PIXEL_ID, GA4_MEASUREMENT_ID, TIKTOK_PIXEL_ID
|
|
64
|
+
# - SITE_DOMAIN, D1_DATABASE_ID, KV_ID, KV_PREVIEW_ID
|
|
65
|
+
|
|
66
|
+
# Passo 2 — Aplicar temporariamente no wrangler.toml
|
|
67
|
+
# (substituir placeholders pelos valores reais)
|
|
68
|
+
|
|
69
|
+
# Passo 3 — Deploy
|
|
70
|
+
cd server-edge-tracker
|
|
71
|
+
wrangler deploy 2>&1 | tee deploy_output.log
|
|
72
|
+
|
|
73
|
+
# Passo 3.1 — Verificar conflitos de rotas (INFORMATIVO)
|
|
74
|
+
if grep -q "Can't deploy routes that are assigned to another worker" deploy_output.log; then
|
|
75
|
+
echo "⚠️ NOTA: Conflito de rotas detectado"
|
|
76
|
+
echo "📍 Solução: Remover rotas manualmente em https://dash.cloudflare.com/[ACCOUNT_ID]/workers/overview"
|
|
77
|
+
echo "📍 Ou: Listar deployments com 'wrangler deployments list' e remover o conflitante"
|
|
78
|
+
echo "🔄 O deploy será repetido após resolver conflito manualmente"
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Passo 4 — Reverter IMEDIATAMENTE
|
|
82
|
+
# (substituir valores reais pelos placeholders)
|
|
83
|
+
|
|
84
|
+
# Passo 5 — Verificar limpeza
|
|
85
|
+
git status
|
|
86
|
+
# Esperado: "nothing to commit, working tree clean"
|
|
87
|
+
# Se modificado: git checkout server-edge-tracker/wrangler.toml
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## PROCEDURE `*migrate`
|
|
93
|
+
|
|
94
|
+
Aplica schemas D1 em ordem (todos idempotentes — `IF NOT EXISTS`):
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
cd server-edge-tracker
|
|
98
|
+
|
|
99
|
+
# Core tracking (sempre primeiro)
|
|
100
|
+
wrangler d1 execute cdp-edge-db --file=schema.sql --remote
|
|
101
|
+
|
|
102
|
+
# Migrations históricas
|
|
103
|
+
wrangler d1 execute cdp-edge-db --file=migrate-v6.sql --remote
|
|
104
|
+
|
|
105
|
+
# Fase 1: ML Clustering
|
|
106
|
+
wrangler d1 execute cdp-edge-db --file=schema-segmentation.sql --remote
|
|
107
|
+
|
|
108
|
+
# Fase 2: Bidding ML
|
|
109
|
+
wrangler d1 execute cdp-edge-db --file=schema-bidding.sql --remote
|
|
110
|
+
|
|
111
|
+
# Fase 3: A/B LTV Testing
|
|
112
|
+
wrangler d1 execute cdp-edge-db --file=schema-ab-ltv.sql --remote
|
|
113
|
+
|
|
114
|
+
# Fase 4: Fraud Detection
|
|
115
|
+
wrangler d1 execute cdp-edge-db --file=schema-fraud.sql --remote
|
|
116
|
+
|
|
117
|
+
# Índices compostos de performance (queries D1)
|
|
118
|
+
wrangler d1 execute cdp-edge-db --file=schema-indexes.sql --remote
|
|
119
|
+
|
|
120
|
+
# Fase 5: LTV Model (regressão logística) + Match Quality Log
|
|
121
|
+
wrangler d1 execute cdp-edge-db --file=migrate-v7.sql --remote
|
|
122
|
+
|
|
123
|
+
# Fase 5b: Colunas LTV Feedback em user_profiles (real_ltv_value, ltv_accuracy, ltv_feedback_at)
|
|
124
|
+
# OBRIGATÓRIO — sem isso recordLtvFeedback() falha silenciosamente em todo Purchase com value > 0
|
|
125
|
+
wrangler d1 execute cdp-edge-db --file=schema-ltv-feedback.sql --remote
|
|
126
|
+
|
|
127
|
+
# UTM Segmentação
|
|
128
|
+
wrangler d1 execute cdp-edge-db --file=schema-utm.sql --remote
|
|
129
|
+
|
|
130
|
+
# Fase 6: Lead Scoring (quiz_sessions + VIEWs)
|
|
131
|
+
# OBRIGATÓRIO se Lead Scoring Agent habilitado — sem isso QuizComplete não persiste
|
|
132
|
+
wrangler d1 execute cdp-edge-db --file=schema-quiz.sql --remote
|
|
133
|
+
|
|
134
|
+
# Fase 7: Sales Engine (roas_reports + nurture_sequences + lookalike_seeds + VIEWs)
|
|
135
|
+
# OBRIGATÓRIO se ROAS Feedback + Nurture Engine habilitados — depende de schema-quiz.sql aplicado antes
|
|
136
|
+
# Se só Lead Scoring (sem ROAS): aplicar apenas schema-quiz.sql
|
|
137
|
+
# Se ROAS + Nurture: aplicar ambos (schema-quiz.sql → schema-sales-engine.sql nesta ordem)
|
|
138
|
+
wrangler d1 execute cdp-edge-db --file=schema-sales-engine.sql --remote
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Após cada migração: confirmar sucesso antes de prosseguir.
|
|
142
|
+
|
|
143
|
+
> **Fase 5 cria duas tabelas críticas:**
|
|
144
|
+
> - `ltv_model_weights` — pesos do modelo LTV treinado semanalmente pelo cron
|
|
145
|
+
> - `match_quality_log` — registra flags de qualidade de dados (has_email, has_fbp, etc.) a cada CAPI dispatch
|
|
146
|
+
> Sem essas tabelas: o modelo LTV não persiste e o Match Quality Alert não funciona.
|
|
147
|
+
>
|
|
148
|
+
> **Fase 5b adiciona 3 colunas em `user_profiles` (ALTER TABLE):**
|
|
149
|
+
> - `real_ltv_value` — valor real de compra registrado após Purchase
|
|
150
|
+
> - `ltv_accuracy` — acurácia do modelo: `1 - |pred-real|/real` (0–1)
|
|
151
|
+
> - `ltv_feedback_at` — timestamp do último feedback
|
|
152
|
+
> **SEM ESSA MIGRAÇÃO:** `recordLtvFeedback()` falha silenciosamente em todo Purchase com value > 0 — ciclo preditivo nunca fecha.
|
|
153
|
+
>
|
|
154
|
+
> **Fase 6 (Lead Scoring) cria:**
|
|
155
|
+
> - `quiz_sessions` — qualificação por lead com breakdown dimensional auditável
|
|
156
|
+
> - `v_quiz_qualification_summary`, `v_quiz_dimension_impact` — VIEWs de análise
|
|
157
|
+
>
|
|
158
|
+
> **Fase 7 (Sales Engine) cria:**
|
|
159
|
+
> - `roas_reports` — histórico de ROAS por campanha com bid recommendation
|
|
160
|
+
> - `nurture_sequences` — fila de follow-up automático pós-quiz
|
|
161
|
+
> - `lookalike_seeds` — histórico de compradores confirmados para Lookalike Meta
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## PROCEDURE `*rollback`
|
|
166
|
+
|
|
167
|
+
Reverte para versão anterior do Worker:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Listar versões disponíveis
|
|
171
|
+
wrangler deployments list
|
|
172
|
+
|
|
173
|
+
# Fazer rollback para versão específica
|
|
174
|
+
wrangler rollback [VERSION_ID]
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## PROCEDURE `*secrets`
|
|
180
|
+
|
|
181
|
+
Configura todos os secrets do cliente na Cloudflare:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# Obrigatórios
|
|
185
|
+
wrangler secret put META_ACCESS_TOKEN
|
|
186
|
+
wrangler secret put GA4_API_SECRET
|
|
187
|
+
wrangler secret put WHATSAPP_ACCESS_TOKEN
|
|
188
|
+
wrangler secret put WHATSAPP_PHONE_NUMBER_ID
|
|
189
|
+
wrangler secret put WA_NOTIFY_NUMBER
|
|
190
|
+
wrangler secret put WA_WEBHOOK_VERIFY_TOKEN
|
|
191
|
+
|
|
192
|
+
# Nurture Engine — email (obrigatório se Nurture habilitado)
|
|
193
|
+
wrangler secret put RESEND_API_KEY # API Key resend.com
|
|
194
|
+
wrangler secret put RESEND_FROM_EMAIL # ex: "CDP Edge <noreply@seudominio.com.br>"
|
|
195
|
+
|
|
196
|
+
# Plataformas de anúncio opcionais (conforme selecionadas)
|
|
197
|
+
wrangler secret put TIKTOK_ACCESS_TOKEN
|
|
198
|
+
wrangler secret put PINTEREST_ACCESS_TOKEN
|
|
199
|
+
wrangler secret put REDDIT_ACCESS_TOKEN
|
|
200
|
+
wrangler secret put LINKEDIN_ACCESS_TOKEN
|
|
201
|
+
wrangler secret put SPOTIFY_ACCESS_TOKEN
|
|
202
|
+
wrangler secret put CALLMEBOT_PHONE
|
|
203
|
+
wrangler secret put CALLMEBOT_APIKEY
|
|
204
|
+
|
|
205
|
+
# Webhooks de gateway de pagamento
|
|
206
|
+
wrangler secret put WEBHOOK_SECRET_TICTO # HMAC-SHA256 Ticto
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## PROCEDURE `*smoke-test`
|
|
212
|
+
|
|
213
|
+
Valida se o Worker está operacional após deploy:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
# Testar endpoint de health ativo
|
|
217
|
+
curl https://SEU_DOMINIO/health
|
|
218
|
+
|
|
219
|
+
# Resultado esperado: todos os bindings OK
|
|
220
|
+
# Se algum MISSING: investigar e corrigir antes de prosseguir
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## REGRAS
|
|
226
|
+
|
|
227
|
+
0. **CONSULTA OBRIGATÓRIA À MEMÓRIA**: Extraia as credenciais de cliente, Domain IDs e Bindings Cloudflare (`wrangler.toml` vars e secrets) consultando ativamente o "memory-agent.json". Solicite ao Orquestrador tudo o que faltar. Execute deploys exclusivamente com os dados oficiais guardados na Memória para garantir alinhamento sistêmico.
|
|
228
|
+
1. **Sempre** verificar `git status` após reverter placeholders
|
|
229
|
+
2. **Nunca** commitar com dados reais — se acontecer, reverter imediatamente com `git checkout`
|
|
230
|
+
3. **Sempre** confirmar Version ID após deploy bem-sucedido
|
|
231
|
+
4. **Sempre** rodar `*smoke-test` após `*deploy`
|
|
232
|
+
5. Qualquer falha de deploy: reportar ao Master Orchestrator com o erro completo
|
|
@@ -7,6 +7,14 @@
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## ✅ REGRAS CRÍTICAS
|
|
11
|
+
|
|
12
|
+
0. **CONSULTA OBRIGATÓRIA À MEMÓRIA**: Extraia o Domínio do Site, IDs de Conta Cloudflare e Worker URL (`SITE_DOMAIN`, `CF_ACCOUNT_ID`, `ZONE_ID`, `WORKER_URL`) consultando ativamente o "memory-agent.json". Solicite ao Orquestrador tudo o que faltar. Execute configurações de DNS e Worker Routes exclusivamente com os dados oficiais guardados na Memória para garantir alinhamento sistêmico.
|
|
13
|
+
1. Cloudflare-Only: Sem dependências externas.
|
|
14
|
+
2. Same-Domain: Worker no domínio do site (anti-adblock).
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
10
18
|
## Por que isso importa
|
|
11
19
|
|
|
12
20
|
| Situação Atual | Com Domínio Próprio |
|
|
@@ -47,7 +55,7 @@ Cloudflare Dashboard
|
|
|
47
55
|
→ Add record
|
|
48
56
|
→ Type: CNAME
|
|
49
57
|
→ Name: track
|
|
50
|
-
→ Target:
|
|
58
|
+
→ Target: SEU_WORKER.SEU_USUARIO.workers.dev
|
|
51
59
|
→ Proxy status: Proxied (nuvem laranja ☁️)
|
|
52
60
|
→ TTL: Auto
|
|
53
61
|
→ Save
|
|
@@ -64,7 +72,7 @@ curl -X POST "https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records"
|
|
|
64
72
|
--data '{
|
|
65
73
|
"type": "CNAME",
|
|
66
74
|
"name": "track",
|
|
67
|
-
"content": "
|
|
75
|
+
"content": "SEU_WORKER.SEU_USUARIO.workers.dev",
|
|
68
76
|
"proxied": true
|
|
69
77
|
}'
|
|
70
78
|
```
|
|
@@ -101,6 +109,12 @@ pattern = "track.clientdomain.com/*"
|
|
|
101
109
|
zone_name = "clientdomain.com"
|
|
102
110
|
```
|
|
103
111
|
|
|
112
|
+
> ⚠️ NOTA IMPORTANTE — Rota Direta Opcional:
|
|
113
|
+
> A estrutura atual do CDP Edge suporta também rota direta no domínio principal:
|
|
114
|
+
> `pattern = "clientdomain.com/track*"`
|
|
115
|
+
> Isso evita criar subdomínio DNS e simplifica configuração
|
|
116
|
+
> Ambos os métodos funcionam — escolha baseado em preferência de arquitetura
|
|
117
|
+
|
|
104
118
|
Depois:
|
|
105
119
|
|
|
106
120
|
```bash
|
|
@@ -115,7 +129,7 @@ Localizar e substituir no `wrangler.toml`:
|
|
|
115
129
|
|
|
116
130
|
```toml
|
|
117
131
|
# ANTES:
|
|
118
|
-
SITE_DOMAIN = "
|
|
132
|
+
SITE_DOMAIN = "SEU_WORKER.SEU_USUARIO.workers.dev"
|
|
119
133
|
|
|
120
134
|
# DEPOIS:
|
|
121
135
|
SITE_DOMAIN = "clientdomain.com"
|
|
@@ -125,13 +139,13 @@ SITE_DOMAIN = "clientdomain.com"
|
|
|
125
139
|
|
|
126
140
|
---
|
|
127
141
|
|
|
128
|
-
## Fase 4 — Verificar Cookie Domain no
|
|
142
|
+
## Fase 4 — Verificar Cookie Domain no index.ts
|
|
129
143
|
|
|
130
144
|
O cookie `_cdp_uid` precisa ser definido com `Domain=.clientdomain.com` (ponto antes = root domain = compartilhado entre subdomínios).
|
|
131
145
|
|
|
132
|
-
### Localizar no
|
|
146
|
+
### Localizar no index.ts a função de cookie:
|
|
133
147
|
|
|
134
|
-
```
|
|
148
|
+
```typescript
|
|
135
149
|
// Buscar por: Set-Cookie ou _cdp_uid
|
|
136
150
|
// Deve conter:
|
|
137
151
|
`_cdp_uid=${uid}; Max-Age=31536000; Path=/; Domain=.${env.SITE_DOMAIN}; SameSite=None; Secure`
|
|
@@ -141,7 +155,7 @@ Se o worker usa `env.SITE_DOMAIN` no Domain do cookie (correto), basta atualizar
|
|
|
141
155
|
|
|
142
156
|
Se o worker usa o domínio hardcoded ou `workers.dev`, atualizar manualmente:
|
|
143
157
|
|
|
144
|
-
```
|
|
158
|
+
```typescript
|
|
145
159
|
// Substituir:
|
|
146
160
|
`Domain=.workers.dev`
|
|
147
161
|
// Por:
|
|
@@ -177,7 +191,7 @@ O `cdpTrack.js` do cliente deve apontar para o novo endpoint:
|
|
|
177
191
|
|
|
178
192
|
```javascript
|
|
179
193
|
// ANTES:
|
|
180
|
-
const CDP_ENDPOINT = 'https://
|
|
194
|
+
const CDP_ENDPOINT = 'https://SEU_WORKER.SEU_USUARIO.workers.dev/track';
|
|
181
195
|
|
|
182
196
|
// DEPOIS:
|
|
183
197
|
const CDP_ENDPOINT = 'https://track.clientdomain.com/track';
|
|
@@ -210,7 +224,7 @@ const CDP_ENDPOINT = 'https://track.clientdomain.com/track';
|
|
|
210
224
|
| 522 Connection Timed Out | CNAME não-proxied ou worker offline | Verificar proxy status + `wrangler deploy` |
|
|
211
225
|
| Cookie Domain errado | SITE_DOMAIN antigo | Confirmar `wrangler.toml` + deploy |
|
|
212
226
|
| Worker Route não ativando | Route sem deploy | `wrangler deploy` novamente |
|
|
213
|
-
| CORS error no browser | Origin não permitido | Verificar headers CORS no
|
|
227
|
+
| CORS error no browser | Origin não permitido | Verificar headers CORS no index.ts |
|
|
214
228
|
|
|
215
229
|
---
|
|
216
230
|
|
|
@@ -4,6 +4,33 @@ Você é o **Especialista em E-mail Transacional (Quantum Tier)** do CDP Edge, f
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## 🔗 FLUXO DE ATIVAÇÃO (Como este agente é chamado)
|
|
8
|
+
|
|
9
|
+
O Email Agent é ativado pelo **Webhook Agent** após confirmação de compra ou captura de lead:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Webhook Agent (Hotmart/Kiwify/Ticto)
|
|
13
|
+
└─► ctx.waitUntil(sendEmail(env, type, payload))
|
|
14
|
+
│
|
|
15
|
+
├─ type = 'purchase_confirmation' → email de confirmação de compra
|
|
16
|
+
├─ type = 'lead_welcome' → email de boas-vindas ao lead
|
|
17
|
+
└─ type = 'cart_abandonment' → email de recuperação de carrinho
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Assinatura da função que este agente gera:**
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
// Injetada no Worker principal (index.ts)
|
|
24
|
+
export async function sendEmail(env, type, payload) {
|
|
25
|
+
const { to, name, product, value } = payload;
|
|
26
|
+
// ... implementação completa abaixo
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
> O Webhook Agent importa `sendEmail` e chama via `ctx.waitUntil` para não bloquear resposta ao gateway de pagamento.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
7
34
|
## 📧 PROTOCOLOS DE ENVIO (Quantum Tier)
|
|
8
35
|
|
|
9
36
|
1. **Resend API Excellence**:
|
|
@@ -46,7 +73,7 @@ Sempre que o usuário precisar de automação de e-mail:
|
|
|
46
73
|
```json
|
|
47
74
|
{
|
|
48
75
|
"arquivos_criados": [
|
|
49
|
-
"
|
|
76
|
+
"modules/email-service.ts"
|
|
50
77
|
],
|
|
51
78
|
"tipos_de_email": {
|
|
52
79
|
"purchase_confirmation": "ativo",
|