cdp-edge 2.0.3 → 2.0.5
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/contracts/agent-versions.json +364 -0
- package/dist/commands/install.js +1 -1
- package/dist/commands/setup.js +326 -111
- 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/agents/devops-agent.md +11 -0
- package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +27 -0
- package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +1 -1
- package/extracted-skill/tracking-events-generator/agents/server-tracking.md +5 -5
- package/extracted-skill/tracking-events-generator/knowledge-base.md +172 -0
- package/package.json +7 -2
- package/server-edge-tracker/INSTALAR.md +27 -3
- package/server-edge-tracker/SEGMENTATION-DOCS.md +69 -0
- package/server-edge-tracker/index.js +791 -0
- package/server-edge-tracker/migrate-v7.sql +64 -0
- package/server-edge-tracker/modules/db.js +531 -0
- package/server-edge-tracker/modules/dispatch/ga4.js +65 -0
- package/server-edge-tracker/modules/dispatch/meta.js +119 -0
- package/server-edge-tracker/modules/dispatch/platforms.js +237 -0
- package/server-edge-tracker/modules/dispatch/tiktok.js +100 -0
- package/server-edge-tracker/modules/dispatch/whatsapp.js +233 -0
- package/server-edge-tracker/modules/intelligence.js +321 -0
- package/server-edge-tracker/modules/ml/bidding.js +245 -0
- package/server-edge-tracker/modules/ml/fraud.js +301 -0
- package/server-edge-tracker/modules/ml/logistic.js +195 -0
- package/server-edge-tracker/modules/ml/ltv.js +420 -0
- package/server-edge-tracker/modules/ml/matchquality.js +176 -0
- package/server-edge-tracker/modules/ml/segmentation.js +316 -0
- package/server-edge-tracker/modules/utils.js +89 -0
- package/server-edge-tracker/schema-indexes.sql +67 -0
- package/server-edge-tracker/worker.js +395 -4
- package/server-edge-tracker/wrangler.toml +15 -0
|
@@ -410,3 +410,104 @@ Todas as 6 melhorias principais + o bônus foram implementadas com sucesso:
|
|
|
410
410
|
---
|
|
411
411
|
|
|
412
412
|
> 🎯 **Conclusão:** O ecossistema CDP Edge agora tem um sistema de agentes **sincronizados, resilientes e auto-corrigíveis**, com memória persistente e atualização automática de APIs. O tempo de desenvolvimento foi drasticamente reduzido e a qualidade do código foi significativamente aumentada.
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## ✅ FASE 5 — Melhoria Contínua Automática (2026-04-10)
|
|
417
|
+
|
|
418
|
+
**Status:** ✅ COMPLETO (4 features)
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
### ✅ 1. LTV Real — Regressão Logística Treinada em Dados Reais
|
|
423
|
+
|
|
424
|
+
**O que foi implementado:**
|
|
425
|
+
- Cron semanal no Worker busca leads × purchases dos últimos 90 dias no D1
|
|
426
|
+
- Treina regressão logística com features reais (ltv_score, behavior_score, engagement_score, utm_source, state)
|
|
427
|
+
- Pesos gravados em `ltv_model_weights` com `is_active = 1` e accuracy registrada
|
|
428
|
+
- Pesos cacheados em KV para acesso em ~0ms por cada evento `/track`
|
|
429
|
+
- Fallback automático para heurística se modelo não estiver disponível
|
|
430
|
+
|
|
431
|
+
**Arquivos criados/modificados:**
|
|
432
|
+
- `server-edge-tracker/migrate-v7.sql` — Tabela `ltv_model_weights` + `match_quality_log`
|
|
433
|
+
- `server-edge-tracker/modules/ml/ltv.js` — Função de treinamento + predição com modelo treinado
|
|
434
|
+
- `server-edge-tracker/worker.js` — Handler do cron semanal de treinamento
|
|
435
|
+
|
|
436
|
+
**Benefício:** Score LTV baseado em dados reais do funil (não apenas heurísticas). Bids mais precisos. Experimentos A/B com baseline real.
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
### ✅ 2. Match Quality Alerts — Monitoramento Automático de EMQ
|
|
441
|
+
|
|
442
|
+
**O que foi implementado:**
|
|
443
|
+
- Cada dispatch para Meta CAPI registra flags em `match_quality_log`: `has_email`, `has_phone`, `has_fbp`, `has_fbc`, `was_email_recovered`
|
|
444
|
+
- View `v_match_quality_24h` agrega os dados por janela de 2 horas
|
|
445
|
+
- Cron semanal verifica os thresholds: email_rate < 40%, fbp_rate < 30%, composite_score < 45%
|
|
446
|
+
- Alerta via CallMeBot quando qualquer threshold é ultrapassado
|
|
447
|
+
|
|
448
|
+
**Arquivos criados/modificados:**
|
|
449
|
+
- `server-edge-tracker/migrate-v7.sql` — Tabela `match_quality_log` + view `v_match_quality_24h`
|
|
450
|
+
- `server-edge-tracker/modules/dispatch/meta.js` — Log de qualidade após cada dispatch
|
|
451
|
+
- `server-edge-tracker/modules/intelligence.js` — Análise semanal de match quality + alerta
|
|
452
|
+
|
|
453
|
+
**Benefício:** Degradação de EMQ detectada automaticamente antes de impactar o CPA. Alerta proativo ao invés de descobrir via queda de performance.
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
### ✅ 3. A/B LTV Auto-Winner — Declaração Automática de Vencedor
|
|
458
|
+
|
|
459
|
+
**O que foi implementado:**
|
|
460
|
+
- Quando uma variação bate o controle por ≥5pp de acurácia, o Worker declara o vencedor automaticamente
|
|
461
|
+
- Prompt vencedor é ativado imediatamente para todos os novos eventos `/track`
|
|
462
|
+
- Alerta WhatsApp enviado com detalhes: nome da variação, diferença de acurácia, prompt ativado
|
|
463
|
+
- Sem necessidade de revisão manual de experimentos
|
|
464
|
+
|
|
465
|
+
**Arquivos criados/modificados:**
|
|
466
|
+
- `server-edge-tracker/modules/ml/ltv.js` — Lógica de detecção de vencedor automático
|
|
467
|
+
- `server-edge-tracker/modules/dispatch/whatsapp.js` — Alerta de auto-winner
|
|
468
|
+
|
|
469
|
+
**Benefício:** Experimentos A/B de prompt LTV se resolvem sozinhos. O prompt com maior acurácia é sempre usado sem intervenção manual.
|
|
470
|
+
|
|
471
|
+
---
|
|
472
|
+
|
|
473
|
+
### ✅ 4. Auto-Enrich — Identity Graph Antes do Dispatch
|
|
474
|
+
|
|
475
|
+
**O que foi implementado:**
|
|
476
|
+
- Antes de cada dispatch para Meta CAPI, Worker consulta `user_profiles` pelo `userId` do evento
|
|
477
|
+
- Se o evento chegou sem email/fbp/fbc/phone mas o perfil os tem, os dados são injetados automaticamente
|
|
478
|
+
- Campo `was_email_recovered` registrado em `match_quality_log` para rastreabilidade
|
|
479
|
+
- Processo 100% transparente para o browser
|
|
480
|
+
|
|
481
|
+
**Arquivos criados/modificados:**
|
|
482
|
+
- `server-edge-tracker/modules/dispatch/meta.js` — Consulta ao Identity Graph antes do dispatch
|
|
483
|
+
- `server-edge-tracker/modules/db.js` — Função `enrichPayloadFromProfile(userId, payload)`
|
|
484
|
+
|
|
485
|
+
**Benefício:** Eventos que chegariam sem email agora vão para a Meta com Advanced Matching completo. EMQ melhora sem qualquer mudança no browser. Atribuição retroativa funciona melhor.
|
|
486
|
+
|
|
487
|
+
---
|
|
488
|
+
|
|
489
|
+
## 📈 NOVAS TABELAS D1 (Fase 5)
|
|
490
|
+
|
|
491
|
+
| Tabela | Criada em | Conteúdo |
|
|
492
|
+
|---|---|---|
|
|
493
|
+
| `ltv_model_weights` | `migrate-v7.sql` | Pesos do modelo de regressão logística treinado |
|
|
494
|
+
| `match_quality_log` | `migrate-v7.sql` | Flags de qualidade por evento despachado para Meta |
|
|
495
|
+
|
|
496
|
+
**View criada:** `v_match_quality_24h` — dashboard de EMQ pronto para consulta via SQL.
|
|
497
|
+
|
|
498
|
+
**Sequência de migration atualizada:**
|
|
499
|
+
```
|
|
500
|
+
schema.sql → migrate-v6.sql → schema-segmentation.sql → schema-bidding.sql
|
|
501
|
+
→ schema-ab-ltv.sql → schema-fraud.sql → schema-indexes.sql → migrate-v7.sql
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
## 🎯 IMPACTO ESPERADO DA FASE 5
|
|
507
|
+
|
|
508
|
+
| Métrica | Mecanismo | Melhoria Esperada |
|
|
509
|
+
|---|---|---|
|
|
510
|
+
| **EMQ (Event Match Quality)** | Auto-Enrich + Match Quality Alerts | +15-25pp no score Meta |
|
|
511
|
+
| **Precisão de LTV** | Modelo treinado em dados reais | Acurácia > heurística em 2-4 semanas |
|
|
512
|
+
| **Tempo de resposta a degradação** | Alertas automáticos de match quality | Horas vs. dias |
|
|
513
|
+
| **CPA** | Melhor atribuição → otimização Meta mais precisa | -10-20% esperado |
|
|
@@ -113,10 +113,21 @@ wrangler d1 execute cdp-edge-db --file=schema-ab-ltv.sql --remote
|
|
|
113
113
|
|
|
114
114
|
# Fase 4: Fraud Detection
|
|
115
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
|
|
116
122
|
```
|
|
117
123
|
|
|
118
124
|
Após cada migração: confirmar sucesso antes de prosseguir.
|
|
119
125
|
|
|
126
|
+
> **Fase 5 cria duas tabelas críticas:**
|
|
127
|
+
> - `ltv_model_weights` — pesos do modelo LTV treinado semanalmente pelo cron
|
|
128
|
+
> - `match_quality_log` — registra flags de qualidade de dados (has_email, has_fbp, etc.) a cada CAPI dispatch
|
|
129
|
+
> Sem essas tabelas: o modelo LTV não persiste e o Match Quality Alert não funciona.
|
|
130
|
+
|
|
120
131
|
---
|
|
121
132
|
|
|
122
133
|
## PROCEDURE `*rollback`
|
|
@@ -306,6 +306,33 @@ async function checkApiDepreciations(env) {
|
|
|
306
306
|
|
|
307
307
|
---
|
|
308
308
|
|
|
309
|
+
### MONITORAMENTO AUTOMÁTICO DE MATCH QUALITY (CRON SEMANAL)
|
|
310
|
+
|
|
311
|
+
O Intelligence Agent monitora a qualidade dos dados enviados ao Meta CAPI a cada execução do cron.
|
|
312
|
+
Os dados são lidos da tabela `match_quality_log` (populada automaticamente pelo Worker a cada dispatch).
|
|
313
|
+
|
|
314
|
+
**Thresholds obrigatórios — alertar via CallMeBot se:**
|
|
315
|
+
|
|
316
|
+
| Métrica | Threshold mínimo | Ação automática |
|
|
317
|
+
|---|---|---|
|
|
318
|
+
| `email_rate` | 40% dos eventos com email | Alerta ⚠️ — verificar Identity Graph |
|
|
319
|
+
| `fbp_rate` | 30% dos eventos com cookie fbp | Alerta ⚠️ — verificar cdpTrack.js |
|
|
320
|
+
| `composite_score` | 45% (email×0.4 + fbp×0.3 + phone×0.2 + fbc×0.1) | Alerta 🚨 CRÍTICO |
|
|
321
|
+
|
|
322
|
+
**O cron semanal executa automaticamente (sem intervenção manual):**
|
|
323
|
+
1. `_trainLtvModel(env)` — re-treina regressão logística com últimos 5000 leads do D1; pesos salvos em `ltv_model_weights` e cache KV invalidado
|
|
324
|
+
2. `_autoDecideAbWinner(env)` — declara winner de A/B LTV se melhoria ≥ 5pp vs controle; alerta WhatsApp automático
|
|
325
|
+
3. `_analyzeMatchQuality(env)` — analisa janela 2h; dispara alertas CallMeBot se abaixo dos thresholds
|
|
326
|
+
4. `syncMetaCustomAudience(env)` — sincroniza leads high_intent com Meta Custom Audience
|
|
327
|
+
|
|
328
|
+
**Auto-recuperação integrada ao dispatch:**
|
|
329
|
+
- Antes de cada envio ao Meta CAPI, o Worker tenta enriquecer automaticamente o payload consultando o Identity Graph pelo `userId` (recupera email, fbp, fbc, phone ausentes)
|
|
330
|
+
- Resultado de recuperação é logado em `match_quality_log.was_email_recovered`
|
|
331
|
+
|
|
332
|
+
**Pré-requisito de infraestrutura:** `migrate-v7.sql` deve estar aplicada no D1 (tabelas `ltv_model_weights` + `match_quality_log`).
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
309
336
|
### CHECK DE NOVOS PARÂMETROS DE EVENT MATCH QUALITY
|
|
310
337
|
|
|
311
338
|
O Intelligence Agent DEVE buscar novos parâmetros que melhoram a nota de atribuição:
|
|
@@ -1285,7 +1285,7 @@ Spawnar o **Intelligence Agent** para realizar auditoria completa da stack:
|
|
|
1285
1285
|
|
|
1286
1286
|
**2. Infraestrutura Cloudflare**
|
|
1287
1287
|
- `wrangler.toml` — bindings D1, KV, Queue, AI estão todos declarados
|
|
1288
|
-
- `schema.sql` e migrations — todas as fases
|
|
1288
|
+
- `schema.sql` e migrations — todas as fases aplicadas na ordem: core → segmentation → bidding → ab-ltv → fraud → schema-indexes → **migrate-v7** (LTV model + Match Quality)
|
|
1289
1289
|
- Worker.js — endpoints ativos correspondem à arquitetura esperada
|
|
1290
1290
|
|
|
1291
1291
|
**3. Conformidade e Qualidade de Sinal**
|
|
@@ -526,7 +526,7 @@ async function syncIdentity(DB, body) {
|
|
|
526
526
|
const fp = body.fingerprint || null;
|
|
527
527
|
if (!fp || !DB) return body;
|
|
528
528
|
|
|
529
|
-
const existing = await DB.prepare(
|
|
529
|
+
const existing = await env.DB.prepare(
|
|
530
530
|
'SELECT * FROM identity_graph WHERE fingerprint = ?'
|
|
531
531
|
).bind(fp).first();
|
|
532
532
|
|
|
@@ -541,7 +541,7 @@ async function syncIdentity(DB, body) {
|
|
|
541
541
|
visit_count: (existing.visit_count || 1) + 1
|
|
542
542
|
};
|
|
543
543
|
} else {
|
|
544
|
-
await DB.prepare(`
|
|
544
|
+
await env.DB.prepare(`
|
|
545
545
|
INSERT OR IGNORE INTO identity_graph (fingerprint, fbp, fbc, ga_client_id, external_id, ttclid, first_utm)
|
|
546
546
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
547
547
|
`).bind(fp, body.fbp, body.fbc, body.ga_client_id, body.external_id, body.ttclid, JSON.stringify(body.utm || {})).run();
|
|
@@ -635,7 +635,7 @@ function buildCookieHeader(visitor, umbrellaDomain) {
|
|
|
635
635
|
async function logBehavioralEvent(DB, body, visitor, engagementScore) {
|
|
636
636
|
if (!DB) return;
|
|
637
637
|
|
|
638
|
-
await DB.prepare(`
|
|
638
|
+
await env.DB.prepare(`
|
|
639
639
|
INSERT OR REPLACE INTO behavioral_events (
|
|
640
640
|
event_id, user_id, session_id,
|
|
641
641
|
engagement_score, time_level, scroll_score, click_score, video_score, hover_score, intention_level,
|
|
@@ -972,7 +972,7 @@ CREATE INDEX IF NOT EXISTS idx_retry_scheduled ON retry_queue(scheduled_at, stat
|
|
|
972
972
|
async function logEventSuccess(DB, platform, eventId) {
|
|
973
973
|
if (!DB) return;
|
|
974
974
|
|
|
975
|
-
await DB.prepare(`
|
|
975
|
+
await env.DB.prepare(`
|
|
976
976
|
UPDATE events_log
|
|
977
977
|
SET status = 'success',
|
|
978
978
|
retry_count = 0,
|
|
@@ -988,7 +988,7 @@ async function logEventFailure(DB, platform, eventId, errorMessage, retryCount)
|
|
|
988
988
|
const maxRetries = 3;
|
|
989
989
|
const isFinalFailure = retryCount >= maxRetries;
|
|
990
990
|
|
|
991
|
-
await DB.prepare(`
|
|
991
|
+
await env.DB.prepare(`
|
|
992
992
|
UPDATE events_log
|
|
993
993
|
SET status = ?,
|
|
994
994
|
retry_count = ?,
|
|
@@ -2892,3 +2892,175 @@ async function sha256(data) {
|
|
|
2892
2892
|
4. **SDK Site**: Inserir `cdpTrack.js` e `tracking.config.js` no site.
|
|
2893
2893
|
5. **Event Mapping**: Configurar gatilhos de clique e formulário no site.
|
|
2894
2894
|
6. **Webhooks**: Configurar o endpoint de webhook na plataforma de vendas (Ticto/Hotmart).
|
|
2895
|
+
|
|
2896
|
+
---
|
|
2897
|
+
|
|
2898
|
+
## 🤖 8. MELHORIA CONTÍNUA AUTOMÁTICA (FASE 5)
|
|
2899
|
+
|
|
2900
|
+
A Fase 5 fecha o ciclo de dados: cada evento coletado alimenta modelos e alertas que, automaticamente, melhoram a qualidade de atribuição na próxima semana — sem intervenção manual.
|
|
2901
|
+
|
|
2902
|
+
---
|
|
2903
|
+
|
|
2904
|
+
### 8.1 O Ciclo de Melhoria Contínua
|
|
2905
|
+
|
|
2906
|
+
```
|
|
2907
|
+
Evento /track
|
|
2908
|
+
│
|
|
2909
|
+
├─ match_quality_log (has_email, has_fbp, has_phone, has_fbc, was_email_recovered)
|
|
2910
|
+
│ │
|
|
2911
|
+
│ └─ Cron semanal analisa janela de 2h
|
|
2912
|
+
│ → email_rate < 40% → alerta CallMeBot
|
|
2913
|
+
│ → fbp_rate < 30% → alerta CallMeBot
|
|
2914
|
+
│ → composite_score < 45% → alerta CallMeBot
|
|
2915
|
+
│
|
|
2916
|
+
├─ user_profiles (Identity Graph)
|
|
2917
|
+
│ │
|
|
2918
|
+
│ └─ Auto-Enrich: antes de cada dispatch Meta CAPI,
|
|
2919
|
+
│ Worker consulta user_profiles por userId
|
|
2920
|
+
│ → recupera email/fbp/fbc/phone ausentes
|
|
2921
|
+
│ → evento vai para Meta COM email → EMQ sobe
|
|
2922
|
+
│
|
|
2923
|
+
├─ leads × purchases (D1)
|
|
2924
|
+
│ │
|
|
2925
|
+
│ └─ Cron semanal treina regressão logística
|
|
2926
|
+
│ → pesos gravados em ltv_model_weights (is_active=1)
|
|
2927
|
+
│ → cached em KV → próximo /track usa modelo treinado
|
|
2928
|
+
│ → fallback heurístico se modelo não disponível
|
|
2929
|
+
│
|
|
2930
|
+
└─ user_profiles (alta intenção) → Customer Match Export semanal
|
|
2931
|
+
→ GET /export/customer-match → CSV para Google Ads
|
|
2932
|
+
→ Meta Custom Audience auto-atualizada
|
|
2933
|
+
```
|
|
2934
|
+
|
|
2935
|
+
---
|
|
2936
|
+
|
|
2937
|
+
### 8.2 Match Quality — Monitoramento Automático
|
|
2938
|
+
|
|
2939
|
+
Cada dispatch para a Meta CAPI registra na tabela `match_quality_log`:
|
|
2940
|
+
|
|
2941
|
+
| Campo | O que indica |
|
|
2942
|
+
|---|---|
|
|
2943
|
+
| `has_email` | Evento foi com email (principal fator de EMQ) |
|
|
2944
|
+
| `has_phone` | Evento foi com telefone |
|
|
2945
|
+
| `has_fbp` | Cookie _fbp presente (atribuição via pixel) |
|
|
2946
|
+
| `has_fbc` | Cookie _fbc presente (atribuição via clique em anúncio) |
|
|
2947
|
+
| `was_email_recovered` | Email recuperado via Identity Graph (Auto-Enrich) |
|
|
2948
|
+
|
|
2949
|
+
**Thresholds de alerta (cron semanal):**
|
|
2950
|
+
|
|
2951
|
+
| Métrica | Threshold de alerta | Impacto |
|
|
2952
|
+
|---|---|---|
|
|
2953
|
+
| `email_rate` | < 40% | Atribuição fraca — muitos eventos sem email |
|
|
2954
|
+
| `fbp_rate` | < 30% | Pixel sem rastrear adequadamente |
|
|
2955
|
+
| `composite_score` | < 45% | EMQ geral degradado |
|
|
2956
|
+
|
|
2957
|
+
A view `v_match_quality_24h` agrega os dados prontos para consulta instantânea:
|
|
2958
|
+
|
|
2959
|
+
```sql
|
|
2960
|
+
SELECT * FROM v_match_quality_24h;
|
|
2961
|
+
-- Retorna: event_count, email_rate, phone_rate, fbp_rate, fbc_rate, composite_score
|
|
2962
|
+
```
|
|
2963
|
+
|
|
2964
|
+
---
|
|
2965
|
+
|
|
2966
|
+
### 8.3 Identity Graph — Auto-Enrich Antes do Dispatch
|
|
2967
|
+
|
|
2968
|
+
Antes de cada dispatch para a Meta CAPI, o Worker consulta `user_profiles` usando o `userId` do evento. Se o evento chegou sem email ou sem fbp, mas o perfil do usuário tem esses dados de uma sessão anterior, eles são injetados automaticamente no payload.
|
|
2969
|
+
|
|
2970
|
+
**Resultado prático:**
|
|
2971
|
+
- Lead preencheu formulário na semana passada (email registrado no perfil)
|
|
2972
|
+
- Hoje clicou em anúncio e disparou `ViewContent` sem email
|
|
2973
|
+
- Worker recupera o email do perfil → evento vai para Meta COM email
|
|
2974
|
+
- Meta recebe o sinal com Advanced Matching completo → melhor atribuição
|
|
2975
|
+
- `was_email_recovered = 1` fica registrado em `match_quality_log`
|
|
2976
|
+
|
|
2977
|
+
Esse processo é transparente: o browser não precisa enviar nada a mais.
|
|
2978
|
+
|
|
2979
|
+
---
|
|
2980
|
+
|
|
2981
|
+
### 8.4 LTV Real — Modelo Treinado em Dados Reais
|
|
2982
|
+
|
|
2983
|
+
**Como funciona:**
|
|
2984
|
+
|
|
2985
|
+
1. Cron semanal executa no Worker
|
|
2986
|
+
2. Busca leads com `purchase = true/false` dos últimos 90 dias no D1
|
|
2987
|
+
3. Treina regressão logística com as features disponíveis (ltv_score, behavior_score, engagement_score, utm_source, state)
|
|
2988
|
+
4. Grava os pesos em `ltv_model_weights` com `is_active = 1`
|
|
2989
|
+
5. Cacheia os pesos em KV para acesso em ~0ms
|
|
2990
|
+
|
|
2991
|
+
**Uso em runtime (cada `/track`):**
|
|
2992
|
+
- Worker verifica se há pesos ativos no KV
|
|
2993
|
+
- Se sim: usa o modelo treinado para prever LTV
|
|
2994
|
+
- Se não: fallback para heurística baseada em regras
|
|
2995
|
+
- Score 0-100 → classificação High/Medium/Low → valor estimado em BRL
|
|
2996
|
+
|
|
2997
|
+
**Tabela `ltv_model_weights`:**
|
|
2998
|
+
|
|
2999
|
+
| Campo | Descrição |
|
|
3000
|
+
|---|---|
|
|
3001
|
+
| `trained_at` | Timestamp do treinamento |
|
|
3002
|
+
| `is_active` | Apenas 1 registro ativo por vez |
|
|
3003
|
+
| `accuracy` | Acurácia do modelo no conjunto de teste (0-1) |
|
|
3004
|
+
| `weights_json` | Pesos serializados da regressão logística |
|
|
3005
|
+
|
|
3006
|
+
---
|
|
3007
|
+
|
|
3008
|
+
### 8.5 A/B LTV — Auto-Winner
|
|
3009
|
+
|
|
3010
|
+
Quando um experimento A/B de prompt LTV tem uma variação com acurácia ≥5pp acima do controle:
|
|
3011
|
+
|
|
3012
|
+
1. O Worker declara o vencedor automaticamente via `POST /api/ltv/ab-test/winner`
|
|
3013
|
+
2. O prompt vencedor é ativado para todos os novos eventos
|
|
3014
|
+
3. Um alerta WhatsApp é enviado informando qual variação ganhou e a diferença de acurácia
|
|
3015
|
+
|
|
3016
|
+
Isso elimina a necessidade de revisão manual de experimentos.
|
|
3017
|
+
|
|
3018
|
+
---
|
|
3019
|
+
|
|
3020
|
+
### 8.6 Customer Match — Sync Semanal
|
|
3021
|
+
|
|
3022
|
+
O cron semanal também exporta os perfis com `intention_level = 'high'` via `GET /export/customer-match`.
|
|
3023
|
+
|
|
3024
|
+
- Formato CSV compatível com Google Customer Match
|
|
3025
|
+
- Emails e telefones hashados (SHA-256) conforme exigido pelo Google
|
|
3026
|
+
- Pode ser automatizado para upload direto via Google Ads API
|
|
3027
|
+
|
|
3028
|
+
---
|
|
3029
|
+
|
|
3030
|
+
### 8.7 Como Cada Tabela Alimenta o Desempenho
|
|
3031
|
+
|
|
3032
|
+
| Tabela | Alimenta | Resultado |
|
|
3033
|
+
|---|---|---|
|
|
3034
|
+
| `match_quality_log` | Alerta de degradação de EMQ | Fix proativo antes do CPA subir |
|
|
3035
|
+
| `user_profiles` | Auto-Enrich no dispatch | Mais eventos com email → EMQ sobe |
|
|
3036
|
+
| `ltv_model_weights` | Score LTV real no /track | Bids mais inteligentes via bid_recommendations |
|
|
3037
|
+
| `ml_segments` + `bid_recommendations` | Bid por segmento × plataforma | ROAS por cluster |
|
|
3038
|
+
| `fraud_signals` | Tráfego limpo | Melhor atribuição Meta/Google |
|
|
3039
|
+
| `ltv_ab_assignments` | Experimentos de prompt | Prompt com maior acurácia vence automaticamente |
|
|
3040
|
+
|
|
3041
|
+
---
|
|
3042
|
+
|
|
3043
|
+
### 8.8 Endpoints para Consultar os Dados
|
|
3044
|
+
|
|
3045
|
+
| Endpoint | O que retorna |
|
|
3046
|
+
|---|---|
|
|
3047
|
+
| `GET /api/fraud/stats` | Dashboard de fraude nas últimas 24h |
|
|
3048
|
+
| `GET /api/segmentation/list` | Segmentos ML ativos com métricas |
|
|
3049
|
+
| `GET /api/bidding/status` | Recomendações de bid por segmento × plataforma |
|
|
3050
|
+
| `GET /api/ltv/ab-test/results` | Acurácia por variação + vencedor recomendado |
|
|
3051
|
+
| `GET /export/customer-match` | Export de leads high-intent para Google Ads |
|
|
3052
|
+
|
|
3053
|
+
---
|
|
3054
|
+
|
|
3055
|
+
### 8.9 Sequência Completa de Migrations D1 (incluindo Fase 5)
|
|
3056
|
+
|
|
3057
|
+
```bash
|
|
3058
|
+
wrangler d1 execute cdp-edge-db --file=schema.sql --remote
|
|
3059
|
+
wrangler d1 execute cdp-edge-db --file=migrate-v6.sql --remote
|
|
3060
|
+
wrangler d1 execute cdp-edge-db --file=schema-segmentation.sql --remote
|
|
3061
|
+
wrangler d1 execute cdp-edge-db --file=schema-bidding.sql --remote
|
|
3062
|
+
wrangler d1 execute cdp-edge-db --file=schema-ab-ltv.sql --remote
|
|
3063
|
+
wrangler d1 execute cdp-edge-db --file=schema-fraud.sql --remote
|
|
3064
|
+
wrangler d1 execute cdp-edge-db --file=schema-indexes.sql --remote # Índices compostos de performance
|
|
3065
|
+
wrangler d1 execute cdp-edge-db --file=migrate-v7.sql --remote # Fase 5: ltv_model_weights + match_quality_log
|
|
3066
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cdp-edge",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.5",
|
|
4
4
|
"description": "CDP Edge - Quantum Tracking - Sistema multi-agente para tracking digital Cloudflare Native (Workers + D1)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -28,7 +28,12 @@
|
|
|
28
28
|
"test:unit:hash": "node tests/unit/hashing.test.js",
|
|
29
29
|
"test:unit:dedup": "node tests/unit/deduplication.test.js",
|
|
30
30
|
"test:unit:payload": "node tests/unit/payload-validation.test.js",
|
|
31
|
-
"test:all": "npm run test:unit"
|
|
31
|
+
"test:all": "npm run test:unit",
|
|
32
|
+
"test:integration": "cd tests/integration && npx vitest run",
|
|
33
|
+
"agents:check": "node scripts/validate-agents.js",
|
|
34
|
+
"agents:sync": "node scripts/sync-agents.js",
|
|
35
|
+
"agents:sync:list": "node scripts/sync-agents.js --list",
|
|
36
|
+
"agents:sync:all": "node scripts/sync-agents.js --apply-all"
|
|
32
37
|
},
|
|
33
38
|
"keywords": [
|
|
34
39
|
"pixel",
|
|
@@ -77,15 +77,39 @@ pelo ID que você copiou. Salve o arquivo.
|
|
|
77
77
|
|
|
78
78
|
## PASSO 5 — Criar as tabelas no banco
|
|
79
79
|
|
|
80
|
+
Execute os arquivos de schema na ordem abaixo. Cada arquivo usa `IF NOT EXISTS` e é idempotente — pode ser executado mais de uma vez sem risco.
|
|
81
|
+
|
|
80
82
|
```bash
|
|
81
|
-
|
|
83
|
+
# Core: tabelas principais (leads, user_profiles, events_log, identity_graph)
|
|
84
|
+
wrangler d1 execute cdp-edge-db --file=schema.sql --remote
|
|
85
|
+
|
|
86
|
+
# Migrations históricas (retry_queue, escalation_log, intelligence_logs)
|
|
87
|
+
wrangler d1 execute cdp-edge-db --file=migrate-v6.sql --remote
|
|
88
|
+
|
|
89
|
+
# Fase 1 — ML Clustering (ml_segments, ml_segment_members, views de segmentação)
|
|
90
|
+
wrangler d1 execute cdp-edge-db --file=schema-segmentation.sql --remote
|
|
91
|
+
|
|
92
|
+
# Fase 2 — Bidding ML (bid_recommendations, view v_active_bid_recs)
|
|
93
|
+
wrangler d1 execute cdp-edge-db --file=schema-bidding.sql --remote
|
|
94
|
+
|
|
95
|
+
# Fase 3 — A/B LTV Testing (ltv_ab_tests, ltv_ab_variations, ltv_ab_assignments)
|
|
96
|
+
wrangler d1 execute cdp-edge-db --file=schema-ab-ltv.sql --remote
|
|
97
|
+
|
|
98
|
+
# Fase 4 — Fraud Detection (fraud_signals, fraud_alerts, view v_fraud_dashboard)
|
|
99
|
+
wrangler d1 execute cdp-edge-db --file=schema-fraud.sql --remote
|
|
100
|
+
|
|
101
|
+
# Índices compostos de performance para queries D1 (todas as fases)
|
|
102
|
+
wrangler d1 execute cdp-edge-db --file=schema-indexes.sql --remote
|
|
103
|
+
|
|
104
|
+
# Fase 5 — LTV Real + Match Quality (ltv_model_weights, match_quality_log, view v_match_quality_24h)
|
|
105
|
+
wrangler d1 execute cdp-edge-db --file=migrate-v7.sql --remote
|
|
82
106
|
```
|
|
83
107
|
|
|
84
|
-
> Resultado esperado: "✅ Successfully executed SQL"
|
|
108
|
+
> Resultado esperado para cada arquivo: "✅ Successfully executed SQL"
|
|
85
109
|
|
|
86
110
|
Verificar se as tabelas foram criadas:
|
|
87
111
|
```bash
|
|
88
|
-
wrangler d1 execute cdp-edge-db --command="SELECT name FROM sqlite_master WHERE type='table';"
|
|
112
|
+
wrangler d1 execute cdp-edge-db --remote --command="SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;"
|
|
89
113
|
```
|
|
90
114
|
|
|
91
115
|
---
|
|
@@ -442,3 +442,72 @@ const segmentedCampaigns = [
|
|
|
442
442
|
|
|
443
443
|
*API de Segmentação Dinâmica ML v1.0 — CDP Edge*
|
|
444
444
|
*Data: 9 de Abril de 2026*
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## Integração com LTV Real e Match Quality (Fase 5)
|
|
449
|
+
|
|
450
|
+
### Como ml_segments alimenta o modelo LTV
|
|
451
|
+
|
|
452
|
+
Os segmentos gerados pelo clustering não são apenas para campanhas — eles são features do modelo LTV treinado semanalmente.
|
|
453
|
+
|
|
454
|
+
Quando o cron semanal treina a regressão logística em `ltv_model_weights`, ele inclui o `cluster_id` do lead como feature. Isso significa:
|
|
455
|
+
|
|
456
|
+
- Leads do "Segmento Alto Valor + Alto Engajamento (SP)" têm peso positivo maior no modelo
|
|
457
|
+
- O modelo aprende quais segmentos historicamente convertem mais
|
|
458
|
+
- O LTV Score de cada novo `/track` já leva em conta o segmento do usuário
|
|
459
|
+
|
|
460
|
+
**Fluxo de dados:**
|
|
461
|
+
|
|
462
|
+
```
|
|
463
|
+
ml_segment_members (cluster_id por lead)
|
|
464
|
+
│
|
|
465
|
+
└─ JOIN com leads × purchases
|
|
466
|
+
│
|
|
467
|
+
└─ Treino semanal da regressão logística
|
|
468
|
+
│
|
|
469
|
+
└─ ltv_model_weights (is_active=1)
|
|
470
|
+
│
|
|
471
|
+
└─ Score LTV em cada /track
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### Como bid_recommendations se conecta ao LTV treinado
|
|
475
|
+
|
|
476
|
+
O `ltv_model_weights` ativo gera scores mais precisos, que alimentam diretamente as recomendações de bid:
|
|
477
|
+
|
|
478
|
+
1. LTV Score do segmento sobe (modelo mais preciso) → `avg_ltv` do segmento é recalculado
|
|
479
|
+
2. Bidding Agent roda `POST /api/bidding/recommend` com o novo `avg_ltv`
|
|
480
|
+
3. `bid_recommendations` é atualizado com bid recomendado para o segmento × plataforma
|
|
481
|
+
4. Você aplica o bid sugerido em Meta/Google Ads
|
|
482
|
+
|
|
483
|
+
**Consulta útil — bid atual por segmento:**
|
|
484
|
+
|
|
485
|
+
```bash
|
|
486
|
+
curl "https://seudominio.com/api/bidding/status"
|
|
487
|
+
# Retorna: bid recomendado atual por segmento × plataforma
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### Como Match Quality afeta a qualidade dos segmentos
|
|
491
|
+
|
|
492
|
+
A tabela `match_quality_log` registra se cada evento que alimentou o D1 tinha email, fbp, etc. Eventos com `has_email = 0` têm Advanced Matching incompleto — a Meta pode não ter conseguido fazer o match com um usuário real.
|
|
493
|
+
|
|
494
|
+
Isso significa que `ml_segments` pode conter leads "fantasmas" (usuários que a Meta não reconheceu). Para garantir a qualidade dos segmentos:
|
|
495
|
+
|
|
496
|
+
1. Monitore `v_match_quality_24h` para manter `email_rate > 40%`
|
|
497
|
+
2. Se a taxa cair, o Auto-Enrich (Identity Graph) recupera emails de sessões anteriores automaticamente
|
|
498
|
+
3. Leads com email recuperado (`was_email_recovered = 1`) são indistinguíveis dos outros no clustering — têm o mesmo peso
|
|
499
|
+
|
|
500
|
+
**Consulta de match quality:**
|
|
501
|
+
|
|
502
|
+
```bash
|
|
503
|
+
curl "https://seudominio.com/api/fraud/stats"
|
|
504
|
+
# Inclui métricas de qualidade de sinal junto com dados de fraude
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
### Tabelas relacionadas (Fase 5)
|
|
508
|
+
|
|
509
|
+
| Tabela | Relação com segmentação |
|
|
510
|
+
|---|---|
|
|
511
|
+
| `ltv_model_weights` | Usa `cluster_id` como feature; melhora scores LTV por segmento |
|
|
512
|
+
| `match_quality_log` | Indica qualidade dos eventos que geraram os leads dos segmentos |
|
|
513
|
+
| `user_profiles` | Auto-Enrich recupera dados antes do dispatch → mais leads com email → melhor clustering |
|