cdp-edge 1.0.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 +324 -0
- package/bin/cdp-edge.js +71 -0
- package/contracts/agent-versions.json +679 -0
- package/contracts/api-versions.json +372 -0
- package/contracts/types.ts +81 -0
- package/dist/commands/analyze.js +52 -0
- package/dist/commands/infra.js +54 -0
- package/dist/commands/install.js +191 -0
- package/dist/commands/server.js +174 -0
- package/dist/commands/setup.js +355 -0
- package/dist/commands/validate.js +248 -0
- package/dist/index.js +12 -0
- 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/CI-CD-SETUP.md +217 -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 +210 -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 +683 -0
- package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +513 -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-ltv-agent.md +196 -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/bidding-agent.md +347 -0
- package/extracted-skill/tracking-events-generator/agents/bing-agent.md +66 -0
- package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +364 -0
- package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +149 -0
- package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +2097 -0
- package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +1459 -0
- package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +456 -0
- package/extracted-skill/tracking-events-generator/agents/database-agent.md +668 -0
- package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1455 -0
- package/extracted-skill/tracking-events-generator/agents/devops-agent.md +232 -0
- package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +238 -0
- package/extracted-skill/tracking-events-generator/agents/email-agent.md +88 -0
- package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +257 -0
- package/extracted-skill/tracking-events-generator/agents/fraud-detection-agent.md +143 -0
- package/extracted-skill/tracking-events-generator/agents/google-agent.md +235 -0
- package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +525 -0
- package/extracted-skill/tracking-events-generator/agents/lead-scoring-agent.md +282 -0
- package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +173 -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 +960 -0
- package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +2154 -0
- package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +304 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.json +25 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.md +878 -0
- package/extracted-skill/tracking-events-generator/agents/meta-agent.md +118 -0
- package/extracted-skill/tracking-events-generator/agents/ml-clustering-agent.md +749 -0
- package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +272 -0
- package/extracted-skill/tracking-events-generator/agents/performance-agent.md +1167 -0
- package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +1442 -0
- package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +318 -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 +258 -0
- package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +321 -0
- package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1861 -0
- package/extracted-skill/tracking-events-generator/agents/server-tracking.md +1188 -0
- package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +391 -0
- package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +182 -0
- package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +459 -0
- package/extracted-skill/tracking-events-generator/agents/utm-agent.md +322 -0
- package/extracted-skill/tracking-events-generator/agents/validator-agent.md +271 -0
- package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +177 -0
- package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +129 -0
- package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +707 -0
- package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +537 -0
- package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -0
- package/extracted-skill/tracking-events-generator/cdpTrack.js +640 -0
- package/extracted-skill/tracking-events-generator/contracts/api-versions.json +372 -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 +3066 -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/lancamento-imobiliario.md +344 -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 +132 -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/route-intent-capture.js +222 -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 +89 -0
- package/scripts/build-sdk.js +106 -0
- package/server-edge-tracker/.client.env.example +14 -0
- package/server-edge-tracker/INSTALAR.md +527 -0
- 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 +1164 -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-v7.sql +64 -0
- package/server-edge-tracker/migrate.sql +111 -0
- package/server-edge-tracker/modules/db.ts +702 -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 +279 -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 +265 -0
- package/server-edge-tracker/types.ts +258 -0
- package/server-edge-tracker/wrangler.toml +136 -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/lancamento-imobiliario.md +344 -0
- package/templates/linkedin/tag-template.js +46 -0
- package/templates/multi-step-checkout.md +672 -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 +132 -0
- package/templates/reddit/conversions-api-template.js +205 -0
- package/templates/reddit/event-mappings.json +56 -0
- package/templates/reddit/pixel-template.js +19 -0
- package/templates/scenarios/behavior-engine.js +425 -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,137 @@
|
|
|
1
|
+
-- CDP Edge — Schema Migration
|
|
2
|
+
-- Migrado de pixel-tracker-db → cdp-edge-db
|
|
3
|
+
|
|
4
|
+
CREATE TABLE IF NOT EXISTS api_failures (
|
|
5
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
6
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
7
|
+
platform TEXT NOT NULL,
|
|
8
|
+
event_name TEXT,
|
|
9
|
+
error_code TEXT,
|
|
10
|
+
error_message TEXT,
|
|
11
|
+
retry_count INTEGER DEFAULT 0,
|
|
12
|
+
final_status TEXT,
|
|
13
|
+
event_id TEXT,
|
|
14
|
+
raw_payload TEXT
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
CREATE TABLE IF NOT EXISTS device_graph (
|
|
18
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
19
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
20
|
+
primary_user_id TEXT NOT NULL,
|
|
21
|
+
secondary_user_id TEXT NOT NULL,
|
|
22
|
+
match_type TEXT NOT NULL,
|
|
23
|
+
match_confidence REAL NOT NULL
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
CREATE TABLE IF NOT EXISTS edge_fingerprints (
|
|
27
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
28
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
29
|
+
fingerprint TEXT NOT NULL,
|
|
30
|
+
user_id TEXT,
|
|
31
|
+
utm_source TEXT,
|
|
32
|
+
utm_medium TEXT,
|
|
33
|
+
utm_campaign TEXT,
|
|
34
|
+
utm_content TEXT,
|
|
35
|
+
utm_term TEXT
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
CREATE TABLE IF NOT EXISTS health_reports (
|
|
39
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
40
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
41
|
+
report_date TEXT NOT NULL,
|
|
42
|
+
platform TEXT NOT NULL,
|
|
43
|
+
events_sent INTEGER DEFAULT 0,
|
|
44
|
+
events_failed INTEGER DEFAULT 0,
|
|
45
|
+
success_rate REAL,
|
|
46
|
+
avg_latency_ms INTEGER,
|
|
47
|
+
errors_detected TEXT,
|
|
48
|
+
issues_detected TEXT
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
CREATE TABLE IF NOT EXISTS intelligence_logs (
|
|
52
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
53
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
54
|
+
run_type TEXT NOT NULL,
|
|
55
|
+
platform TEXT,
|
|
56
|
+
check_type TEXT NOT NULL,
|
|
57
|
+
status TEXT NOT NULL,
|
|
58
|
+
current_value TEXT,
|
|
59
|
+
expected_value TEXT,
|
|
60
|
+
message TEXT,
|
|
61
|
+
alert_sent INTEGER DEFAULT 0
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
CREATE TABLE IF NOT EXISTS leads (
|
|
65
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
66
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
67
|
+
event_name TEXT NOT NULL,
|
|
68
|
+
event_id TEXT,
|
|
69
|
+
email TEXT,
|
|
70
|
+
phone TEXT,
|
|
71
|
+
first_name TEXT,
|
|
72
|
+
last_name TEXT,
|
|
73
|
+
city TEXT,
|
|
74
|
+
state TEXT,
|
|
75
|
+
country TEXT,
|
|
76
|
+
fbp TEXT,
|
|
77
|
+
fbc TEXT,
|
|
78
|
+
user_id TEXT,
|
|
79
|
+
utm_source TEXT,
|
|
80
|
+
utm_medium TEXT,
|
|
81
|
+
utm_campaign TEXT,
|
|
82
|
+
utm_content TEXT,
|
|
83
|
+
utm_term TEXT,
|
|
84
|
+
page_url TEXT,
|
|
85
|
+
value REAL,
|
|
86
|
+
currency TEXT DEFAULT 'BRL',
|
|
87
|
+
ip_address TEXT,
|
|
88
|
+
client_ip TEXT DEFAULT '',
|
|
89
|
+
platform TEXT DEFAULT 'website',
|
|
90
|
+
zip TEXT DEFAULT '',
|
|
91
|
+
ga_client_id TEXT DEFAULT '',
|
|
92
|
+
status TEXT DEFAULT 'pending',
|
|
93
|
+
retry_count INTEGER DEFAULT 0,
|
|
94
|
+
updated_at TEXT,
|
|
95
|
+
bot_score INTEGER DEFAULT 0,
|
|
96
|
+
engagement_score REAL,
|
|
97
|
+
intention_level TEXT,
|
|
98
|
+
utm_restored INTEGER DEFAULT 0,
|
|
99
|
+
raw_payload TEXT
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
CREATE TABLE IF NOT EXISTS user_profiles (
|
|
103
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
104
|
+
user_id TEXT NOT NULL UNIQUE,
|
|
105
|
+
email TEXT,
|
|
106
|
+
phone TEXT,
|
|
107
|
+
fbp TEXT,
|
|
108
|
+
fbc TEXT,
|
|
109
|
+
ttp TEXT,
|
|
110
|
+
gclid TEXT,
|
|
111
|
+
ttclid TEXT,
|
|
112
|
+
ga_client_id TEXT,
|
|
113
|
+
city TEXT,
|
|
114
|
+
state TEXT,
|
|
115
|
+
country TEXT,
|
|
116
|
+
score INTEGER DEFAULT 0,
|
|
117
|
+
last_seen TEXT,
|
|
118
|
+
msclkid TEXT,
|
|
119
|
+
li_fat_id TEXT,
|
|
120
|
+
wbraid TEXT,
|
|
121
|
+
gbraid TEXT,
|
|
122
|
+
cohort_label TEXT,
|
|
123
|
+
predicted_ltv_class TEXT,
|
|
124
|
+
predicted_ltv_value REAL,
|
|
125
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
126
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
CREATE TABLE IF NOT EXISTS webhook_events (
|
|
130
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
131
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
132
|
+
platform TEXT NOT NULL,
|
|
133
|
+
transaction_id TEXT,
|
|
134
|
+
email TEXT,
|
|
135
|
+
status TEXT,
|
|
136
|
+
raw_payload TEXT
|
|
137
|
+
);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
-- CDP Edge — Migration v2
|
|
2
|
+
-- Adiciona tabela device_graph para Cross-Device Matching
|
|
3
|
+
-- Gerado em: 2026-03-28
|
|
4
|
+
|
|
5
|
+
CREATE TABLE IF NOT EXISTS device_graph (
|
|
6
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
7
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
8
|
+
primary_user_id TEXT NOT NULL,
|
|
9
|
+
secondary_user_id TEXT NOT NULL,
|
|
10
|
+
match_type TEXT NOT NULL,
|
|
11
|
+
match_confidence REAL NOT NULL
|
|
12
|
+
);
|
|
13
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_device_graph_pair
|
|
14
|
+
ON device_graph(primary_user_id, secondary_user_id);
|
|
15
|
+
CREATE INDEX IF NOT EXISTS idx_device_graph_primary ON device_graph(primary_user_id);
|
|
16
|
+
CREATE INDEX IF NOT EXISTS idx_device_graph_secondary ON device_graph(secondary_user_id);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
-- migrate-v4.sql — Tabela de histórico de mensagens (WhatsApp + Email)
|
|
2
|
+
-- Executar: wrangler d1 execute cdp-edge-db --file=migrate-v4.sql
|
|
3
|
+
|
|
4
|
+
CREATE TABLE IF NOT EXISTS messaging_history (
|
|
5
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
6
|
+
sent_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
7
|
+
lead_id INTEGER NOT NULL,
|
|
8
|
+
channel TEXT NOT NULL, -- 'whatsapp' | 'email'
|
|
9
|
+
recipient TEXT NOT NULL, -- telefone E.164 ou endereço de email
|
|
10
|
+
subject TEXT, -- assunto (só email)
|
|
11
|
+
content TEXT NOT NULL, -- corpo da mensagem
|
|
12
|
+
status TEXT NOT NULL, -- 'sent' | 'failed'
|
|
13
|
+
meta TEXT -- message_id da API ou erro em JSON
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
CREATE INDEX IF NOT EXISTS idx_msg_history_lead ON messaging_history(lead_id);
|
|
17
|
+
CREATE INDEX IF NOT EXISTS idx_msg_history_sent_at ON messaging_history(sent_at);
|
|
18
|
+
CREATE INDEX IF NOT EXISTS idx_msg_history_channel ON messaging_history(channel);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
-- migrate-v5.sql — Regras de automação de mensagens
|
|
2
|
+
-- Executar: wrangler d1 execute cdp-edge-db --file=migrate-v5.sql
|
|
3
|
+
|
|
4
|
+
CREATE TABLE IF NOT EXISTS automation_rules (
|
|
5
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
6
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
7
|
+
name TEXT NOT NULL, -- nome descritivo da regra
|
|
8
|
+
trigger_event TEXT NOT NULL, -- Lead | Purchase | InitiateCheckout | HighIntent
|
|
9
|
+
channel TEXT NOT NULL, -- whatsapp | email
|
|
10
|
+
subject_template TEXT, -- assunto (só email), suporta {{variáveis}}
|
|
11
|
+
message_template TEXT NOT NULL, -- corpo, suporta {{name}} {{email}} {{phone}} {{campaign}} {{intention}}
|
|
12
|
+
delay_minutes INTEGER NOT NULL DEFAULT 0, -- aguardar X minutos antes de enviar
|
|
13
|
+
is_active INTEGER NOT NULL DEFAULT 1 -- 1 = ativa, 0 = pausada
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
CREATE INDEX IF NOT EXISTS idx_auto_rules_event ON automation_rules(trigger_event);
|
|
17
|
+
CREATE INDEX IF NOT EXISTS idx_auto_rules_active ON automation_rules(is_active);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
-- CDP Edge — Migração v6: WhatsApp CTWA Tracking
|
|
2
|
+
-- Aplica com: wrangler d1 execute cdp-edge-db --file=server-edge-tracker/migrate-v6.sql
|
|
3
|
+
|
|
4
|
+
-- Tabela de contatos recebidos via Click to WhatsApp (CTWA)
|
|
5
|
+
-- Cada linha = uma primeira mensagem de um usuário que veio de anúncio Meta
|
|
6
|
+
CREATE TABLE IF NOT EXISTS whatsapp_contacts (
|
|
7
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
8
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
9
|
+
phone_hash TEXT NOT NULL, -- SHA256(phone) — enviado ao Meta CAPI como "ph"
|
|
10
|
+
phone_raw TEXT NOT NULL, -- número normalizado (ex: 5511999998888)
|
|
11
|
+
wamid TEXT UNIQUE, -- ID único da mensagem no WhatsApp (deduplicação)
|
|
12
|
+
ctwa_clid TEXT, -- Click ID do anúncio CTWA (não hasheado — vai direto para CAPI)
|
|
13
|
+
ad_id TEXT, -- ID do anúncio que gerou o clique
|
|
14
|
+
source_url TEXT, -- URL do anúncio (Facebook/Instagram)
|
|
15
|
+
headline TEXT, -- Título do anúncio
|
|
16
|
+
capi_sent INTEGER NOT NULL DEFAULT 0, -- 0 = pendente | 1 = evento Contact enviado à Meta CAPI
|
|
17
|
+
capi_event_id TEXT, -- event_id gerado para deduplicação no CAPI
|
|
18
|
+
message_body TEXT -- texto da primeira mensagem (útil para qualificação)
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
CREATE INDEX IF NOT EXISTS idx_wa_contacts_phone_hash ON whatsapp_contacts(phone_hash);
|
|
22
|
+
CREATE INDEX IF NOT EXISTS idx_wa_contacts_wamid ON whatsapp_contacts(wamid);
|
|
23
|
+
CREATE INDEX IF NOT EXISTS idx_wa_contacts_ctwa_clid ON whatsapp_contacts(ctwa_clid);
|
|
24
|
+
CREATE INDEX IF NOT EXISTS idx_wa_contacts_created ON whatsapp_contacts(created_at);
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
-- CDP Edge — Migration v7
|
|
2
|
+
-- Tabelas para: LTV Model (regressão logística) + Match Quality Log
|
|
3
|
+
-- Idempotente: todos os CREATE usam IF NOT EXISTS
|
|
4
|
+
|
|
5
|
+
-- ── LTV Model Weights ─────────────────────────────────────────────────────────
|
|
6
|
+
-- Armazena os pesos treinados pelo cron semanal de regressão logística.
|
|
7
|
+
-- O Worker carrega via KV (TTL 7 dias) — query D1 apenas se KV miss.
|
|
8
|
+
CREATE TABLE IF NOT EXISTS ltv_model_weights (
|
|
9
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
10
|
+
trained_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
11
|
+
version INTEGER NOT NULL DEFAULT 1,
|
|
12
|
+
is_active INTEGER NOT NULL DEFAULT 0,
|
|
13
|
+
sample_size INTEGER NOT NULL DEFAULT 0,
|
|
14
|
+
positive_rate REAL, -- % de samples com label=1 (compra)
|
|
15
|
+
accuracy REAL, -- acurácia no conjunto de treino
|
|
16
|
+
weights_json TEXT NOT NULL -- JSON: {"bias": n, "features": {"utm_fb": w, ...}}
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
CREATE INDEX IF NOT EXISTS idx_ltv_weights_active ON ltv_model_weights(is_active);
|
|
20
|
+
CREATE INDEX IF NOT EXISTS idx_ltv_weights_trained ON ltv_model_weights(trained_at DESC);
|
|
21
|
+
|
|
22
|
+
-- ── Match Quality Log ─────────────────────────────────────────────────────────
|
|
23
|
+
-- Registra a qualidade dos dados enviados ao Meta CAPI por evento.
|
|
24
|
+
-- Sem PII — apenas flags booleanos.
|
|
25
|
+
CREATE TABLE IF NOT EXISTS match_quality_log (
|
|
26
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
27
|
+
logged_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
28
|
+
event_name TEXT NOT NULL,
|
|
29
|
+
has_email INTEGER NOT NULL DEFAULT 0,
|
|
30
|
+
has_phone INTEGER NOT NULL DEFAULT 0,
|
|
31
|
+
has_fbp INTEGER NOT NULL DEFAULT 0,
|
|
32
|
+
has_fbc INTEGER NOT NULL DEFAULT 0,
|
|
33
|
+
has_external_id INTEGER NOT NULL DEFAULT 0,
|
|
34
|
+
was_email_recovered INTEGER NOT NULL DEFAULT 0, -- recuperado do Identity Graph
|
|
35
|
+
was_utm_restored INTEGER NOT NULL DEFAULT 0 -- via UTM Resurrection
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
CREATE INDEX IF NOT EXISTS idx_mq_logged ON match_quality_log(logged_at DESC);
|
|
39
|
+
CREATE INDEX IF NOT EXISTS idx_mq_event ON match_quality_log(event_name, logged_at DESC);
|
|
40
|
+
|
|
41
|
+
-- ── View: Match Quality Dashboard (últimas 24h) ───────────────────────────────
|
|
42
|
+
CREATE VIEW IF NOT EXISTS v_match_quality_24h AS
|
|
43
|
+
SELECT
|
|
44
|
+
COUNT(*) AS total_events,
|
|
45
|
+
ROUND(AVG(has_email) * 100, 1) AS email_rate_pct,
|
|
46
|
+
ROUND(AVG(has_phone) * 100, 1) AS phone_rate_pct,
|
|
47
|
+
ROUND(AVG(has_fbp) * 100, 1) AS fbp_rate_pct,
|
|
48
|
+
ROUND(AVG(has_fbc) * 100, 1) AS fbc_rate_pct,
|
|
49
|
+
ROUND(AVG(has_external_id) * 100, 1) AS ext_id_rate_pct,
|
|
50
|
+
ROUND(AVG(was_email_recovered) * 100, 1) AS email_recovered_pct,
|
|
51
|
+
ROUND(AVG(was_utm_restored) * 100, 1) AS utm_restored_pct,
|
|
52
|
+
-- Score composto: email(40%) + fbp(30%) + phone(20%) + fbc(10%)
|
|
53
|
+
ROUND((AVG(has_email)*0.4 + AVG(has_fbp)*0.3 + AVG(has_phone)*0.2 + AVG(has_fbc)*0.1) * 100, 1) AS composite_score_pct
|
|
54
|
+
FROM match_quality_log
|
|
55
|
+
WHERE logged_at >= datetime('now', '-24 hours');
|
|
56
|
+
|
|
57
|
+
-- ── ALTER: colunas de auditoria em ltv_ab_tests ───────────────────────────────
|
|
58
|
+
-- Adiciona auto_decided_at se ainda não existir (SQLite não tem IF NOT EXISTS em ALTER)
|
|
59
|
+
-- Protegido por trigger-style: INSERT OR IGNORE não se aplica a ALTER, então usamos
|
|
60
|
+
-- um approach de criação de tabela auxiliar que faz nada se a coluna já existir.
|
|
61
|
+
-- A abordagem mais segura no Cloudflare D1 é tentar e ignorar o erro no app.
|
|
62
|
+
-- Aqui deixamos comentado — o worker.js já lida com campos opcionais:
|
|
63
|
+
-- ALTER TABLE ltv_ab_tests ADD COLUMN auto_decided_at TEXT;
|
|
64
|
+
-- ALTER TABLE ltv_ab_tests ADD COLUMN auto_decided_reason TEXT;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
-- CDP Edge — Migration File
|
|
2
|
+
-- Aplica apenas as colunas e tabelas faltantes no banco existente
|
|
3
|
+
-- Gerado em: 2026-03-28
|
|
4
|
+
|
|
5
|
+
-- ── ALTER TABLE leads (colunas faltantes) ─────────────────────────────────────
|
|
6
|
+
ALTER TABLE leads ADD COLUMN utm_term TEXT;
|
|
7
|
+
ALTER TABLE leads ADD COLUMN bot_score INTEGER DEFAULT 0;
|
|
8
|
+
ALTER TABLE leads ADD COLUMN engagement_score REAL;
|
|
9
|
+
ALTER TABLE leads ADD COLUMN intention_level TEXT;
|
|
10
|
+
ALTER TABLE leads ADD COLUMN utm_restored INTEGER DEFAULT 0;
|
|
11
|
+
|
|
12
|
+
-- ── Índices novos em leads ────────────────────────────────────────────────────
|
|
13
|
+
CREATE INDEX IF NOT EXISTS idx_leads_email ON leads(email);
|
|
14
|
+
CREATE INDEX IF NOT EXISTS idx_leads_event ON leads(event_name);
|
|
15
|
+
CREATE INDEX IF NOT EXISTS idx_leads_created ON leads(created_at);
|
|
16
|
+
CREATE INDEX IF NOT EXISTS idx_leads_user_id ON leads(user_id);
|
|
17
|
+
CREATE INDEX IF NOT EXISTS idx_leads_platform ON leads(platform);
|
|
18
|
+
|
|
19
|
+
-- ── ALTER TABLE user_profiles (colunas faltantes) ─────────────────────────────
|
|
20
|
+
ALTER TABLE user_profiles ADD COLUMN msclkid TEXT;
|
|
21
|
+
ALTER TABLE user_profiles ADD COLUMN li_fat_id TEXT;
|
|
22
|
+
ALTER TABLE user_profiles ADD COLUMN wbraid TEXT;
|
|
23
|
+
ALTER TABLE user_profiles ADD COLUMN gbraid TEXT;
|
|
24
|
+
ALTER TABLE user_profiles ADD COLUMN cohort_label TEXT;
|
|
25
|
+
ALTER TABLE user_profiles ADD COLUMN predicted_ltv_class TEXT;
|
|
26
|
+
ALTER TABLE user_profiles ADD COLUMN predicted_ltv_value REAL;
|
|
27
|
+
|
|
28
|
+
-- ── Índices novos em user_profiles ───────────────────────────────────────────
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_profiles_user_id ON user_profiles(user_id);
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_profiles_email ON user_profiles(email);
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_profiles_fbp ON user_profiles(fbp);
|
|
32
|
+
CREATE INDEX IF NOT EXISTS idx_profiles_msclkid ON user_profiles(msclkid);
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_profiles_li_fat ON user_profiles(li_fat_id);
|
|
34
|
+
|
|
35
|
+
-- ── Tabela webhook_events (nova) ──────────────────────────────────────────────
|
|
36
|
+
CREATE TABLE IF NOT EXISTS webhook_events (
|
|
37
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
38
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
39
|
+
platform TEXT NOT NULL,
|
|
40
|
+
transaction_id TEXT,
|
|
41
|
+
email TEXT,
|
|
42
|
+
status TEXT,
|
|
43
|
+
raw_payload TEXT
|
|
44
|
+
);
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_webhook_transaction ON webhook_events(transaction_id);
|
|
46
|
+
|
|
47
|
+
-- ── Tabela api_failures (nova) ────────────────────────────────────────────────
|
|
48
|
+
CREATE TABLE IF NOT EXISTS api_failures (
|
|
49
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
50
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
51
|
+
platform TEXT NOT NULL,
|
|
52
|
+
event_name TEXT,
|
|
53
|
+
error_code TEXT,
|
|
54
|
+
error_message TEXT,
|
|
55
|
+
retry_count INTEGER DEFAULT 0,
|
|
56
|
+
final_status TEXT,
|
|
57
|
+
event_id TEXT,
|
|
58
|
+
raw_payload TEXT
|
|
59
|
+
);
|
|
60
|
+
CREATE INDEX IF NOT EXISTS idx_api_failures_platform ON api_failures(platform);
|
|
61
|
+
CREATE INDEX IF NOT EXISTS idx_api_failures_created ON api_failures(created_at);
|
|
62
|
+
CREATE INDEX IF NOT EXISTS idx_api_failures_event_id ON api_failures(event_id);
|
|
63
|
+
|
|
64
|
+
-- ── Tabela health_reports (nova) ──────────────────────────────────────────────
|
|
65
|
+
CREATE TABLE IF NOT EXISTS health_reports (
|
|
66
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
67
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
68
|
+
report_date TEXT NOT NULL,
|
|
69
|
+
platform TEXT NOT NULL,
|
|
70
|
+
events_sent INTEGER DEFAULT 0,
|
|
71
|
+
events_failed INTEGER DEFAULT 0,
|
|
72
|
+
success_rate REAL,
|
|
73
|
+
avg_latency_ms INTEGER,
|
|
74
|
+
errors_detected TEXT,
|
|
75
|
+
issues_detected TEXT
|
|
76
|
+
);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_health_reports_date ON health_reports(report_date);
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_health_reports_platform ON health_reports(platform);
|
|
79
|
+
|
|
80
|
+
-- ── Tabela edge_fingerprints (nova) ───────────────────────────────────────────
|
|
81
|
+
CREATE TABLE IF NOT EXISTS edge_fingerprints (
|
|
82
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
83
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
84
|
+
fingerprint TEXT NOT NULL,
|
|
85
|
+
user_id TEXT,
|
|
86
|
+
utm_source TEXT,
|
|
87
|
+
utm_medium TEXT,
|
|
88
|
+
utm_campaign TEXT,
|
|
89
|
+
utm_content TEXT,
|
|
90
|
+
utm_term TEXT
|
|
91
|
+
);
|
|
92
|
+
CREATE INDEX IF NOT EXISTS idx_fingerprint_hash ON edge_fingerprints(fingerprint);
|
|
93
|
+
CREATE INDEX IF NOT EXISTS idx_fingerprint_created ON edge_fingerprints(created_at);
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_fingerprint_user_id ON edge_fingerprints(user_id);
|
|
95
|
+
|
|
96
|
+
-- ── Tabela intelligence_logs (nova) ───────────────────────────────────────────
|
|
97
|
+
CREATE TABLE IF NOT EXISTS intelligence_logs (
|
|
98
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
99
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
100
|
+
run_type TEXT NOT NULL,
|
|
101
|
+
platform TEXT,
|
|
102
|
+
check_type TEXT NOT NULL,
|
|
103
|
+
status TEXT NOT NULL,
|
|
104
|
+
current_value TEXT,
|
|
105
|
+
expected_value TEXT,
|
|
106
|
+
message TEXT,
|
|
107
|
+
alert_sent INTEGER DEFAULT 0
|
|
108
|
+
);
|
|
109
|
+
CREATE INDEX IF NOT EXISTS idx_intel_logs_created ON intelligence_logs(created_at);
|
|
110
|
+
CREATE INDEX IF NOT EXISTS idx_intel_logs_status ON intelligence_logs(status);
|
|
111
|
+
CREATE INDEX IF NOT EXISTS idx_intel_logs_platform ON intelligence_logs(platform);
|