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,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);
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
-- CDP Edge — Schema D1
|
|
2
|
+
-- Projeto: server-edge-tracker | groof.com.br
|
|
3
|
+
-- Criação: wrangler d1 execute cdp-edge-db --file=schema.sql
|
|
4
|
+
|
|
5
|
+
-- ── Tabela de Leads ───────────────────────────────────────────────────────────
|
|
6
|
+
-- Armazena cada evento de conversão recebido (Lead, Purchase, Contact, etc.)
|
|
7
|
+
CREATE TABLE IF NOT EXISTS leads (
|
|
8
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
9
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
10
|
+
event_name TEXT NOT NULL, -- Lead | Purchase | Contact | etc.
|
|
11
|
+
event_id TEXT, -- ID único (deduplicação browser↔servidor)
|
|
12
|
+
email TEXT, -- email bruto (não hasheado — fica no banco)
|
|
13
|
+
phone TEXT, -- telefone normalizado (55119...)
|
|
14
|
+
first_name TEXT,
|
|
15
|
+
last_name TEXT,
|
|
16
|
+
city TEXT, -- cidade bruta (normalização feita no envio)
|
|
17
|
+
state TEXT,
|
|
18
|
+
country TEXT,
|
|
19
|
+
fbp TEXT, -- cookie _fbp do Meta Pixel
|
|
20
|
+
fbc TEXT, -- cookie _fbc (fbclid)
|
|
21
|
+
user_id TEXT, -- ID first-party (_cdp_uid)
|
|
22
|
+
utm_source TEXT,
|
|
23
|
+
utm_medium TEXT,
|
|
24
|
+
utm_campaign TEXT,
|
|
25
|
+
utm_content TEXT,
|
|
26
|
+
utm_term TEXT, -- palavra-chave da campanha (capturado no browser)
|
|
27
|
+
page_url TEXT,
|
|
28
|
+
value REAL,
|
|
29
|
+
currency TEXT DEFAULT 'BRL',
|
|
30
|
+
ip_address TEXT,
|
|
31
|
+
platform TEXT DEFAULT 'website', -- website | hotmart | kiwify | whatsapp
|
|
32
|
+
bot_score INTEGER DEFAULT 0, -- 0 = humano, 1 = suspeito, 2 = bot
|
|
33
|
+
engagement_score REAL, -- Score de engajamento browser (0-5 ou 0-100)
|
|
34
|
+
intention_level TEXT, -- curioso | interessado | comprador | high_intent
|
|
35
|
+
utm_restored INTEGER DEFAULT 0, -- 1 = UTM recuperada via Edge Fingerprint
|
|
36
|
+
crm_status TEXT DEFAULT 'cold', -- cold | engaging | closing | sold (CRM Dashboard)
|
|
37
|
+
raw_payload TEXT -- JSON original (para debug)
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE INDEX IF NOT EXISTS idx_leads_email ON leads(email);
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_leads_event ON leads(event_name);
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_leads_created ON leads(created_at);
|
|
43
|
+
CREATE INDEX IF NOT EXISTS idx_leads_user_id ON leads(user_id);
|
|
44
|
+
CREATE INDEX IF NOT EXISTS idx_leads_platform ON leads(platform);
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_leads_crm_status ON leads(crm_status);
|
|
46
|
+
|
|
47
|
+
-- ── Tabela de Perfis de Usuário ───────────────────────────────────────────────
|
|
48
|
+
-- UPSERT por user_id — acumula cookies e dados geo ao longo das visitas.
|
|
49
|
+
-- Objetivo: quando o webhook de compra chega (sem cookies), buscar fbp/fbc aqui.
|
|
50
|
+
CREATE TABLE IF NOT EXISTS user_profiles (
|
|
51
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
52
|
+
user_id TEXT NOT NULL UNIQUE, -- ID first-party (_cdp_uid)
|
|
53
|
+
email TEXT,
|
|
54
|
+
phone TEXT,
|
|
55
|
+
fbp TEXT, -- _fbp mais recente
|
|
56
|
+
fbc TEXT, -- _fbc mais recente
|
|
57
|
+
ttp TEXT, -- _ttp TikTok
|
|
58
|
+
gclid TEXT, -- Google Click ID
|
|
59
|
+
ttclid TEXT, -- TikTok Click ID
|
|
60
|
+
ga_client_id TEXT, -- GA4 client_id (para Measurement Protocol)
|
|
61
|
+
msclkid TEXT, -- Microsoft Ads Click ID (bing/microsoft)
|
|
62
|
+
li_fat_id TEXT, -- LinkedIn Ads Click ID
|
|
63
|
+
wbraid TEXT, -- Google Ads (iOS web-to-app privacy-preserving)
|
|
64
|
+
gbraid TEXT, -- Google Ads (app campaigns privacy-preserving)
|
|
65
|
+
city TEXT,
|
|
66
|
+
state TEXT,
|
|
67
|
+
country TEXT,
|
|
68
|
+
score INTEGER DEFAULT 0, -- Lead Scoring acumulado (LTV preditivo)
|
|
69
|
+
cohort_label TEXT, -- high_intent | nurture | lost | buyer_lookalike
|
|
70
|
+
predicted_ltv_class TEXT, -- High | Medium | Low (Fase 4)
|
|
71
|
+
predicted_ltv_value REAL, -- Valor preditivo em BRL (Fase 4)
|
|
72
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
73
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_profiles_user_id ON user_profiles(user_id);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_profiles_email ON user_profiles(email);
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_profiles_fbp ON user_profiles(fbp);
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_profiles_msclkid ON user_profiles(msclkid);
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_profiles_li_fat ON user_profiles(li_fat_id);
|
|
81
|
+
|
|
82
|
+
-- ── Tabela de LOG de Webhooks Offline ─────────────────────────────────────────
|
|
83
|
+
CREATE TABLE IF NOT EXISTS webhook_events (
|
|
84
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
85
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
86
|
+
platform TEXT NOT NULL, -- hotmart | kiwify | ticto
|
|
87
|
+
transaction_id TEXT,
|
|
88
|
+
email TEXT,
|
|
89
|
+
status TEXT, -- processed | failed
|
|
90
|
+
raw_payload TEXT
|
|
91
|
+
);
|
|
92
|
+
CREATE INDEX IF NOT EXISTS idx_webhook_transaction ON webhook_events(transaction_id);
|
|
93
|
+
|
|
94
|
+
-- ── Tabela de Edge Fingerprints (UTM Resurrection) ──────────────────────────
|
|
95
|
+
-- Armazena o hash de borda (ASN + Accept-Language + UA base) associado às UTMs
|
|
96
|
+
-- da última visita com parâmetros. Usado para recuperar atribuição perdida.
|
|
97
|
+
CREATE TABLE IF NOT EXISTS edge_fingerprints (
|
|
98
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
99
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
100
|
+
fingerprint TEXT NOT NULL, -- SHA256(asn|lang|ua_base)
|
|
101
|
+
user_id TEXT, -- _cdp_uid se disponível
|
|
102
|
+
utm_source TEXT,
|
|
103
|
+
utm_medium TEXT,
|
|
104
|
+
utm_campaign TEXT,
|
|
105
|
+
utm_content TEXT,
|
|
106
|
+
utm_term TEXT
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
CREATE INDEX IF NOT EXISTS idx_fingerprint_hash ON edge_fingerprints(fingerprint);
|
|
110
|
+
CREATE INDEX IF NOT EXISTS idx_fingerprint_created ON edge_fingerprints(created_at);
|
|
111
|
+
CREATE INDEX IF NOT EXISTS idx_fingerprint_user_id ON edge_fingerprints(user_id);
|
|
112
|
+
|
|
113
|
+
-- ── Tabela de Falhas de API (Feedback Loop) ───────────────────────────────
|
|
114
|
+
-- Registra cada falha de API para monitoramento e análise
|
|
115
|
+
CREATE TABLE IF NOT EXISTS api_failures (
|
|
116
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
117
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
118
|
+
platform TEXT NOT NULL, -- meta | ga4 | tiktok | pinterest | reddit
|
|
119
|
+
event_name TEXT, -- Purchase | Lead | InitiateCheckout, etc.
|
|
120
|
+
error_code TEXT, -- 400, 401, 500, etc.
|
|
121
|
+
error_message TEXT,
|
|
122
|
+
retry_count INTEGER DEFAULT 0,
|
|
123
|
+
final_status TEXT, -- success | failed | abandoned
|
|
124
|
+
event_id TEXT, -- event_id original para correlação
|
|
125
|
+
raw_payload TEXT -- JSON payload original (debug)
|
|
126
|
+
);
|
|
127
|
+
CREATE INDEX IF NOT EXISTS idx_api_failures_platform ON api_failures(platform);
|
|
128
|
+
CREATE INDEX IF NOT EXISTS idx_api_failures_created ON api_failures(created_at);
|
|
129
|
+
CREATE INDEX IF NOT EXISTS idx_api_failures_event_id ON api_failures(event_id);
|
|
130
|
+
|
|
131
|
+
-- ── Tabela de Relatórios de Saúde (Feedback Loop) ──────────────────────────
|
|
132
|
+
-- Relatórios diários de saúde das APIs
|
|
133
|
+
CREATE TABLE IF NOT EXISTS health_reports (
|
|
134
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
135
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
136
|
+
report_date TEXT NOT NULL, -- '2026-03-28'
|
|
137
|
+
platform TEXT NOT NULL, -- meta | ga4 | tiktok | pinterest | reddit
|
|
138
|
+
events_sent INTEGER DEFAULT 0, -- Total de eventos enviados
|
|
139
|
+
events_failed INTEGER DEFAULT 0, -- Total de eventos com falha
|
|
140
|
+
success_rate REAL, -- Porcentagem de sucesso (0-100)
|
|
141
|
+
avg_latency_ms INTEGER, -- Latência média em milissegundos
|
|
142
|
+
errors_detected TEXT, -- JSON array de códigos de erro mais comuns
|
|
143
|
+
issues_detected TEXT -- JSON array de problemas detectados
|
|
144
|
+
);
|
|
145
|
+
CREATE INDEX IF NOT EXISTS idx_health_reports_date ON health_reports(report_date);
|
|
146
|
+
CREATE INDEX IF NOT EXISTS idx_health_reports_platform ON health_reports(platform);
|
|
147
|
+
|
|
148
|
+
-- ── Tabela de Device Graph (Cross-Device Matching) ──────────────────────────
|
|
149
|
+
-- Quando o mesmo email/phone aparece em dois _cdp_uid diferentes,
|
|
150
|
+
-- registra o par como "mesmo usuário, dispositivos distintos".
|
|
151
|
+
-- O primary_user_id é o mais antigo (created_at mais baixo no user_profiles).
|
|
152
|
+
CREATE TABLE IF NOT EXISTS device_graph (
|
|
153
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
154
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
155
|
+
primary_user_id TEXT NOT NULL, -- _cdp_uid mais antigo (âncora)
|
|
156
|
+
secondary_user_id TEXT NOT NULL, -- _cdp_uid novo detectado
|
|
157
|
+
match_type TEXT NOT NULL, -- 'email' | 'phone' | 'email+phone'
|
|
158
|
+
match_confidence REAL NOT NULL -- 0.0–1.0 (email=0.95, phone=0.85, ambos=0.99)
|
|
159
|
+
);
|
|
160
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_device_graph_pair
|
|
161
|
+
ON device_graph(primary_user_id, secondary_user_id);
|
|
162
|
+
CREATE INDEX IF NOT EXISTS idx_device_graph_primary ON device_graph(primary_user_id);
|
|
163
|
+
CREATE INDEX IF NOT EXISTS idx_device_graph_secondary ON device_graph(secondary_user_id);
|
|
164
|
+
|
|
165
|
+
-- ── Tabela de Logs do Intelligence Agent ─────────────────────────────────────
|
|
166
|
+
-- Histórico de execuções de cron: checks de versão, auditorias, alertas
|
|
167
|
+
CREATE TABLE IF NOT EXISTS intelligence_logs (
|
|
168
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
169
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
170
|
+
run_type TEXT NOT NULL, -- 'weekly_check' | 'monthly_audit' | 'on_demand'
|
|
171
|
+
platform TEXT, -- meta | ga4 | tiktok | all
|
|
172
|
+
check_type TEXT NOT NULL, -- 'api_version' | 'error_rate' | 'privacy_audit'
|
|
173
|
+
status TEXT NOT NULL, -- 'ok' | 'warning' | 'critical'
|
|
174
|
+
current_value TEXT, -- versão atual ou taxa de erro detectada
|
|
175
|
+
expected_value TEXT, -- versão esperada ou threshold
|
|
176
|
+
message TEXT, -- descrição do resultado
|
|
177
|
+
alert_sent INTEGER DEFAULT 0 -- 1 = alerta WhatsApp enviado
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
CREATE INDEX IF NOT EXISTS idx_intel_logs_created ON intelligence_logs(created_at);
|
|
181
|
+
CREATE INDEX IF NOT EXISTS idx_intel_logs_status ON intelligence_logs(status);
|
|
182
|
+
CREATE INDEX IF NOT EXISTS idx_intel_logs_platform ON intelligence_logs(platform);
|
|
183
|
+
|
|
184
|
+
-- ── Meta Ads Dashboard — Tabelas (conectadas ao mesmo D1) ────────────────────
|
|
185
|
+
-- Alimentadas pelo sync diário da Meta Marketing API v22.0
|
|
186
|
+
|
|
187
|
+
CREATE TABLE IF NOT EXISTS meta_account (
|
|
188
|
+
account_id TEXT PRIMARY KEY,
|
|
189
|
+
name TEXT NOT NULL,
|
|
190
|
+
currency TEXT DEFAULT 'BRL',
|
|
191
|
+
timezone TEXT DEFAULT 'America/Sao_Paulo',
|
|
192
|
+
updated_at TEXT DEFAULT (datetime('now'))
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
CREATE TABLE IF NOT EXISTS meta_ad_metrics (
|
|
196
|
+
ad_id TEXT NOT NULL,
|
|
197
|
+
ad_name TEXT,
|
|
198
|
+
adset_id TEXT,
|
|
199
|
+
adset_name TEXT,
|
|
200
|
+
campaign_id TEXT NOT NULL,
|
|
201
|
+
campaign_name TEXT,
|
|
202
|
+
account_id TEXT,
|
|
203
|
+
spend REAL NOT NULL DEFAULT 0,
|
|
204
|
+
impressions INTEGER DEFAULT 0,
|
|
205
|
+
cpm REAL DEFAULT 0,
|
|
206
|
+
clicks INTEGER DEFAULT 0,
|
|
207
|
+
ctr REAL DEFAULT 0,
|
|
208
|
+
reach INTEGER DEFAULT 0,
|
|
209
|
+
frequency REAL DEFAULT 0,
|
|
210
|
+
actions_results INTEGER DEFAULT 0,
|
|
211
|
+
cost_per_result REAL DEFAULT 0,
|
|
212
|
+
inline_link_clicks INTEGER DEFAULT 0,
|
|
213
|
+
inline_link_click_ctr REAL DEFAULT 0,
|
|
214
|
+
date_ref TEXT NOT NULL,
|
|
215
|
+
synced_at TEXT DEFAULT (datetime('now')),
|
|
216
|
+
PRIMARY KEY (ad_id, date_ref)
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
CREATE INDEX IF NOT EXISTS idx_meta_metrics_date ON meta_ad_metrics(date_ref);
|
|
220
|
+
CREATE INDEX IF NOT EXISTS idx_meta_metrics_campaign ON meta_ad_metrics(campaign_id);
|
|
221
|
+
CREATE INDEX IF NOT EXISTS idx_meta_metrics_campaign_date ON meta_ad_metrics(campaign_id, date_ref);
|
|
222
|
+
|
|
223
|
+
CREATE TABLE IF NOT EXISTS meta_financeiro (
|
|
224
|
+
account_id TEXT NOT NULL,
|
|
225
|
+
month_start TEXT NOT NULL,
|
|
226
|
+
month_end TEXT NOT NULL,
|
|
227
|
+
spend REAL NOT NULL DEFAULT 0,
|
|
228
|
+
tax REAL NOT NULL DEFAULT 0,
|
|
229
|
+
total REAL NOT NULL DEFAULT 0,
|
|
230
|
+
updated_at TEXT DEFAULT (datetime('now')),
|
|
231
|
+
PRIMARY KEY (account_id, month_start)
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
-- ── Mensageria — WhatsApp (Meta Cloud API) + Email (Resend) ──────────────────
|
|
235
|
+
CREATE TABLE IF NOT EXISTS messaging_history (
|
|
236
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
237
|
+
sent_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
238
|
+
lead_id INTEGER NOT NULL,
|
|
239
|
+
channel TEXT NOT NULL, -- 'whatsapp' | 'email'
|
|
240
|
+
recipient TEXT NOT NULL, -- telefone E.164 ou endereço de email
|
|
241
|
+
subject TEXT, -- assunto (só email)
|
|
242
|
+
content TEXT NOT NULL, -- corpo da mensagem
|
|
243
|
+
status TEXT NOT NULL, -- 'sent' | 'failed'
|
|
244
|
+
meta TEXT -- message_id da API ou erro em JSON
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
CREATE INDEX IF NOT EXISTS idx_msg_history_lead ON messaging_history(lead_id);
|
|
248
|
+
CREATE INDEX IF NOT EXISTS idx_msg_history_sent_at ON messaging_history(sent_at);
|
|
249
|
+
CREATE INDEX IF NOT EXISTS idx_msg_history_channel ON messaging_history(channel);
|
|
250
|
+
|
|
251
|
+
-- ── Automação de Mensagens ────────────────────────────────────────────────────
|
|
252
|
+
CREATE TABLE IF NOT EXISTS automation_rules (
|
|
253
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
254
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
255
|
+
name TEXT NOT NULL,
|
|
256
|
+
trigger_event TEXT NOT NULL, -- Lead | Purchase | InitiateCheckout | HighIntent
|
|
257
|
+
channel TEXT NOT NULL, -- whatsapp | email
|
|
258
|
+
subject_template TEXT,
|
|
259
|
+
message_template TEXT NOT NULL, -- suporta {{name}} {{email}} {{phone}} {{campaign}} {{intention}}
|
|
260
|
+
delay_minutes INTEGER NOT NULL DEFAULT 0,
|
|
261
|
+
is_active INTEGER NOT NULL DEFAULT 1
|
|
262
|
+
);
|
|
263
|
+
|
|
264
|
+
CREATE INDEX IF NOT EXISTS idx_auto_rules_event ON automation_rules(trigger_event);
|
|
265
|
+
CREATE INDEX IF NOT EXISTS idx_auto_rules_active ON automation_rules(is_active);
|