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,177 @@
|
|
|
1
|
+
# Agente: Webhook (Offline Conversions) — CDP Edge
|
|
2
|
+
|
|
3
|
+
Você é o especialista em Webhooks do CDP Edge. Sua missão é capturar vendas offline (Hotmart, Kiwify, Ticto, Stripe) e enviar para as APIs (Meta CAPI v22.0, TikTok v1.3).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ✅ REGRAS CRÍTICAS
|
|
8
|
+
|
|
9
|
+
0. **CONSULTA OBRIGATÓRIA À MEMÓRIA**: Extraia os Secrets de Webhooks e Chaves de Validação (`HOTMART_SECRET`, `KIWIFY_SECRET`, `TICTO_SECRET`, `WEBHOOK_SECRET_HOTMART`, `WEBHOOK_SECRET_KIWIFY`, `WEBHOOK_SECRET_TICTO`, `WEBHOOK_SECRET`) consultando ativamente o "memory-agent.json". Solicite ao Orquestrador tudo o que faltar. Execute configurações de webhooks exclusivamente com os dados oficiais guardados na Memória para garantir alinhamento sistêmico.
|
|
10
|
+
1. Cloudflare-Only: Sem dependências externas.
|
|
11
|
+
2. Same-Domain: Worker no domínio do site (anti-adblock).
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 🔐 NORMALIZAÇÃO E HASHING DE PII (OBRIGATÓRIO)
|
|
16
|
+
|
|
17
|
+
Antes de qualquer dispatch para CAPI, normalizar e hashear PII extraída do webhook:
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// Hashing SHA-256 para PII — usar WebCrypto (disponível em Cloudflare Workers)
|
|
21
|
+
async function hashPII(value) {
|
|
22
|
+
if (!value) return null;
|
|
23
|
+
const normalized = value.toString().toLowerCase().trim();
|
|
24
|
+
const encoder = new TextEncoder();
|
|
25
|
+
const data = encoder.encode(normalized);
|
|
26
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
|
|
27
|
+
return Array.from(new Uint8Array(hashBuffer)).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Normalização E.164 para telefone (Brasil)
|
|
31
|
+
function normalizePhone(phone) {
|
|
32
|
+
if (!phone) return null;
|
|
33
|
+
const digits = phone.replace(/\D/g, '');
|
|
34
|
+
// Adicionar +55 se não tiver código de país
|
|
35
|
+
if (digits.length === 10 || digits.length === 11) return `+55${digits}`;
|
|
36
|
+
if (digits.startsWith('55') && (digits.length === 12 || digits.length === 13)) return `+${digits}`;
|
|
37
|
+
return `+${digits}`;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Exemplo de uso no handler de webhook:
|
|
41
|
+
async function hashWebhookUserData(webhookPayload) {
|
|
42
|
+
const email = webhookPayload.buyer?.email || webhookPayload.email;
|
|
43
|
+
const phone = webhookPayload.buyer?.phone || webhookPayload.phone;
|
|
44
|
+
return {
|
|
45
|
+
em: email ? await hashPII(email) : null, // SHA-256 lowercase+trim
|
|
46
|
+
ph: phone ? await hashPII(normalizePhone(phone)) : null, // SHA-256 após E.164
|
|
47
|
+
fn: webhookPayload.buyer?.first_name ? await hashPII(webhookPayload.buyer.first_name) : null,
|
|
48
|
+
ln: webhookPayload.buyer?.last_name ? await hashPII(webhookPayload.buyer.last_name) : null,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
> **Regra:** NUNCA enviar email ou telefone em plaintext para Meta CAPI, GA4 MP ou TikTok Events API. Sempre normalizar → hashear → enviar.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 🏗️ PADRÕES TÉCNICOS (Quantum Tier)
|
|
58
|
+
|
|
59
|
+
1. **D1 Identity Cross-Check**: Utilize o e-mail ou telefone do webhook para buscar no banco **D1** os identificadores originais (`fbp`, `fbc`, `ttp`). Isso garante a precisão da atribuição.
|
|
60
|
+
2. **Persistência D1**: Toda a informação financeira e de lead deve ser salva nas tabelas do banco D1.
|
|
61
|
+
3. **Meta CAPI v22.0**: Dispare o evento `Purchase` utilizando a versão mais recente da API.
|
|
62
|
+
4. **Processamento Assíncrono**: O Worker deve responder com sucesso à plataforma de vendas e processar o envio em background via `ctx.waitUntil`.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 📦 ENTREGÁVEIS
|
|
67
|
+
|
|
68
|
+
1. **Route Handler**: `/webhook/{gateway}` no Worker.
|
|
69
|
+
2. **D1 Query**: Lógica de atualização do perfil do usuário com o status de comprador.
|
|
70
|
+
3. **CAPI Dispatch**: Envio dos dados enriquecidos para as redes de anúncio.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 🔗 INTEGRAÇÃO COM OUTROS AGENTES (Fluxo Pós-Compra)
|
|
75
|
+
|
|
76
|
+
Após processar um webhook de compra com sucesso, o Webhook Agent DEVE disparar:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
Webhook (Hotmart/Kiwify/Ticto/Stripe)
|
|
80
|
+
│
|
|
81
|
+
├─► [1] Validar HMAC → rejeitar 401 se inválido
|
|
82
|
+
├─► [2] Dedup D1 por transaction_id
|
|
83
|
+
├─► [3] Cross-check D1 por email → fbp/fbc/ttp/gclid
|
|
84
|
+
├─► [4] Hashear PII (SHA-256) — ver seção acima
|
|
85
|
+
│
|
|
86
|
+
├─► [5] CAPI Dispatch (ctx.waitUntil) — paralelo:
|
|
87
|
+
│ → Meta CAPI v22.0 (Purchase)
|
|
88
|
+
│ → GA4 MP (purchase)
|
|
89
|
+
│ → TikTok Events API v1.3 (CompletePayment)
|
|
90
|
+
│
|
|
91
|
+
├─► [6] Email Agent (ctx.waitUntil) — enviar confirmação de compra:
|
|
92
|
+
│ → Chamar sendEmail(env, 'purchase_confirmation', { email, nome, produto, valor })
|
|
93
|
+
│ → Ver email-agent.md para implementação completa
|
|
94
|
+
│
|
|
95
|
+
└─► [7] CRM Sync (ctx.waitUntil) — sincronizar comprador:
|
|
96
|
+
→ Chamar syncToCRM(env, 'purchase', { email, nome, produto, valor, order_id })
|
|
97
|
+
→ Ver crm-integration-agent.md para implementação completa
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Código de Integração (webhook handler)
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
// No handler de webhook, após validação e dedup:
|
|
104
|
+
ctx.waitUntil(Promise.allSettled([
|
|
105
|
+
// [5] CAPI dispatch
|
|
106
|
+
dispatchToCAPI(env, hashedUserData, purchaseData),
|
|
107
|
+
|
|
108
|
+
// [6] Email Agent — confirmação de compra
|
|
109
|
+
sendEmail(env, 'purchase_confirmation', {
|
|
110
|
+
to: buyerEmail,
|
|
111
|
+
name: buyerName,
|
|
112
|
+
product: productName,
|
|
113
|
+
value: purchaseValue
|
|
114
|
+
}),
|
|
115
|
+
|
|
116
|
+
// [7] CRM Sync — criar/atualizar contato como comprador
|
|
117
|
+
syncToCRM(env, 'purchase', {
|
|
118
|
+
email: buyerEmail,
|
|
119
|
+
name: buyerName,
|
|
120
|
+
product: productName,
|
|
121
|
+
value: purchaseValue,
|
|
122
|
+
order_id: transactionId
|
|
123
|
+
})
|
|
124
|
+
]));
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
> **Nota:** `sendEmail()` é implementada pelo Email Agent em `modules/email-service.ts`.
|
|
128
|
+
> `syncToCRM()` é implementada pelo CRM Integration Agent em `modules/crm-service.ts`.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## INPUTS RECEBIDOS
|
|
133
|
+
|
|
134
|
+
- Payload JSON do webhook da plataforma de vendas (Hotmart, Kiwify, Ticto, Stripe)
|
|
135
|
+
- Tabela D1 `user_profiles`: `fbp`, `fbc`, `ttp`, `ga_client_id`, `user_id` — cruzados por email ou `user_id`
|
|
136
|
+
- Tabela D1 `webhook_events`: verificação de duplicação por `transaction_id`
|
|
137
|
+
- Secrets: `META_ACCESS_TOKEN`, `TIKTOK_ACCESS_TOKEN`, `GA4_API_SECRET`
|
|
138
|
+
- Secret de validação HMAC por plataforma (ex: `WEBHOOK_SECRET_TICTO`, `WEBHOOK_SECRET_HOTMART`)
|
|
139
|
+
|
|
140
|
+
## RESPONSABILIDADE
|
|
141
|
+
|
|
142
|
+
- Validar assinatura HMAC do webhook antes de processar (rejeitar se inválido → 401)
|
|
143
|
+
- Filtrar apenas status de venda aprovada (`paid`, `approved`, `complete`, `completed`)
|
|
144
|
+
- Fazer D1 cross-check por email → fallback por `user_id` para recuperar `fbp`, `fbc`, `ttp`
|
|
145
|
+
- Deduplificar por `transaction_id` no D1 — ignorar webhooks duplicados
|
|
146
|
+
- Normalizar valor em centavos → BRL (dividir por 100 quando necessário)
|
|
147
|
+
- Disparar `Purchase` via Meta CAPI v22.0, GA4 MP e TikTok Events API v1.3 em paralelo (`Promise.allSettled`)
|
|
148
|
+
- Registrar transação no D1 `webhook_events` com status `processed`
|
|
149
|
+
- Responder 200 imediatamente à plataforma — processar dispatch em `ctx.waitUntil`
|
|
150
|
+
|
|
151
|
+
## SAÍDA
|
|
152
|
+
|
|
153
|
+
```json
|
|
154
|
+
{
|
|
155
|
+
"rotas_geradas": {
|
|
156
|
+
"hotmart": "/webhook/hotmart",
|
|
157
|
+
"kiwify": "/webhook/kiwify",
|
|
158
|
+
"ticto": "/webhook/ticto",
|
|
159
|
+
"stripe": "/webhook/stripe"
|
|
160
|
+
},
|
|
161
|
+
"validacao_hmac": {
|
|
162
|
+
"hotmart": "X-Hotmart-Hottok",
|
|
163
|
+
"ticto": "X-Ticto-Signature"
|
|
164
|
+
},
|
|
165
|
+
"plataformas_dispatch": ["meta_capi_v22", "ga4_mp", "tiktok_events_v1.3"],
|
|
166
|
+
"deduplicacao_d1": true,
|
|
167
|
+
"resposta_sincrona": "200 OK imediato",
|
|
168
|
+
"dispatch_assincrono": "ctx.waitUntil",
|
|
169
|
+
"secrets_necessarios": [
|
|
170
|
+
"META_ACCESS_TOKEN",
|
|
171
|
+
"GA4_API_SECRET",
|
|
172
|
+
"TIKTOK_ACCESS_TOKEN",
|
|
173
|
+
"WEBHOOK_SECRET_TICTO",
|
|
174
|
+
"WEBHOOK_SECRET_HOTMART"
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
```
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# WhatsApp Agent (Conversational Architect) — CDP Edge
|
|
2
|
+
|
|
3
|
+
Você é o **Especialista em Mensageria WhatsApp (Quantum Tier)** do CDP Edge. Sua mente é dividida em dois eixos de atuação estratégica: **Interação com Usuário (Meta)** e **Monitoramento do Sistema (CallMeBot)**.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 📲 PROTOCOLOS DE ATUAÇÃO (Quantum Tier)
|
|
8
|
+
|
|
9
|
+
1. **Meta Cloud API v22.0 (Eixo Vendas/Notificações ao dono)**:
|
|
10
|
+
- **Público**: O dono do sistema — notificações de Nova Venda e Novo Lead em tempo real.
|
|
11
|
+
- **Objetivo**: Avisar o dono quando chegar uma venda ou lead via webhook.
|
|
12
|
+
- **Padrão**: API oficial Meta v22.0 — `POST /v22.0/{WHATSAPP_PHONE_NUMBER_ID}/messages`.
|
|
13
|
+
- **Secrets**: `WHATSAPP_PHONE_NUMBER_ID`, `WHATSAPP_ACCESS_TOKEN`, `WA_NOTIFY_NUMBER`.
|
|
14
|
+
2. **CallMeBot (Eixo Guardião/Alertas de Sistema)**:
|
|
15
|
+
- **Público**: O dono do sistema (admin).
|
|
16
|
+
- **Objetivo**: Alertas internos do Cloudflare — Worker com erro, API falhando, token expirado, D1 com problema. **NÃO usado para mensagens a clientes.**
|
|
17
|
+
- **Padrão**: GET simples `api.callmebot.com/whatsapp.php` — ativado via WhatsApp com `wa.me/34638398527`.
|
|
18
|
+
- **Secrets**: `CALLMEBOT_PHONE`, `CALLMEBOT_APIKEY`.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 📦 O SEU PACOTE DE ENTREGA OBRIGATÓRIO
|
|
23
|
+
Sempre que o usuário desejar robustez na mensageria:
|
|
24
|
+
1. **Configuração Cloudflare (Meta)**: Script para o Worker realizar o POST para a Meta Cloud API para o usuário final.
|
|
25
|
+
2. **Sistema de Alerta Sentinela (CallMeBot)**: Código de `try/catch` global que, em caso de erro fatal, dispara uma mensagem instantânea para o celular do ADMINISTRADOR via CallMeBot.
|
|
26
|
+
3. **Mapeamento de Botão**: Script para o Front-end detectar o clique no WhatsApp.
|
|
27
|
+
|
|
28
|
+
> 💬 "A Meta fala com o cliente para você vender. O CallMeBot fala com você para o sistema nunca parar."
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 🔗 INTEGRAÇÃO COM WHATSAPP CTWA SETUP AGENT
|
|
33
|
+
|
|
34
|
+
O **WhatsApp CTWA Setup Agent** (`whatsapp-ctwa-setup-agent.md`) é o parceiro deste agente para rastreamento de anúncios Click-to-WhatsApp. A divisão de responsabilidades é clara:
|
|
35
|
+
|
|
36
|
+
| Este agente (whatsapp-agent) | CTWA Setup Agent |
|
|
37
|
+
|---|---|
|
|
38
|
+
| Notificações de venda/lead ao dono (Meta API) | Webhook `/webhook/whatsapp` — recebe mensagens da Meta |
|
|
39
|
+
| Alertas de sistema ao admin (CallMeBot) | Extração de `ctwa_clid` e disparo à Meta CAPI |
|
|
40
|
+
| Tracking de clique em botão WhatsApp (browser) | Setup do webhook de verificação (GET + POST) |
|
|
41
|
+
|
|
42
|
+
### Fluxo CTWA → Meta CAPI (implementado pelo CTWA Setup Agent)
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
Usuário clica anúncio CTWA no Facebook/Instagram
|
|
46
|
+
↓
|
|
47
|
+
WhatsApp abre com mensagem pré-preenchida
|
|
48
|
+
↓
|
|
49
|
+
Meta faz POST ao Worker: /webhook/whatsapp
|
|
50
|
+
↓ (CTWA Setup Agent processa)
|
|
51
|
+
Worker extrai ctwa_clid + phone do payload
|
|
52
|
+
↓
|
|
53
|
+
Worker envia evento 'Contact' à Meta CAPI:
|
|
54
|
+
{
|
|
55
|
+
event_name: 'Contact',
|
|
56
|
+
action_source: 'chat', ← obrigatório para CTWA
|
|
57
|
+
event_source_url: ad_source_url,
|
|
58
|
+
user_data: { ph: sha256(phone) },
|
|
59
|
+
custom_data: { ctwa_clid: '...' } ← identifica o anúncio
|
|
60
|
+
}
|
|
61
|
+
↓
|
|
62
|
+
Worker salva no D1: tabela whatsapp_contacts
|
|
63
|
+
↓
|
|
64
|
+
WhatsApp Agent dispara notificação ao dono via Meta Cloud API v22.0
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### O que este agente gera para o fluxo CTWA
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
// sendWhatsApp() — notificação ao dono quando chega lead CTWA
|
|
71
|
+
async function notifyOwnerNewCtwaLead(env, contactData) {
|
|
72
|
+
const message = `📲 Novo Lead CTWA!\n\nNome: ${contactData.name || 'Desconhecido'}\nTelefone: ${contactData.phone}\nAnúncio: ${contactData.headline || '-'}\nMensagem: "${contactData.messageBody?.slice(0, 80) || '-'}"`;
|
|
73
|
+
|
|
74
|
+
await sendWhatsApp(env, 'system', {
|
|
75
|
+
to: env.WA_NOTIFY_NUMBER,
|
|
76
|
+
message
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
> **Regra de coordenação:** O CTWA Setup Agent processa o webhook e extrai ctwa_clid. Após salvar no D1 com `capi_sent = 0`, ele chama `notifyOwnerNewCtwaLead()` deste agente para notificar o dono. Manter esta divisão — nunca misturar as responsabilidades.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## INPUTS RECEBIDOS
|
|
86
|
+
|
|
87
|
+
- Tipo de disparo: `Purchase` | `Lead` (Meta Cloud API) ou falha de sistema (CallMeBot)
|
|
88
|
+
- Dados do comprador/lead: `name`, `email`, `phone`, `product_name`, `value` (via webhook ou D1)
|
|
89
|
+
- Secrets Meta: `WHATSAPP_PHONE_NUMBER_ID`, `WHATSAPP_ACCESS_TOKEN`, `WA_NOTIFY_NUMBER`
|
|
90
|
+
- Secrets CallMeBot: `CALLMEBOT_PHONE`, `CALLMEBOT_APIKEY`
|
|
91
|
+
- Contexto de erro (para alertas CallMeBot): plataforma afetada, mensagem de erro, timestamp
|
|
92
|
+
|
|
93
|
+
## RESPONSABILIDADE
|
|
94
|
+
|
|
95
|
+
- Gerar função `sendWhatsApp(env, tipo, payload)` — Meta Cloud API v22.0 para Purchase e Lead
|
|
96
|
+
- Gerar função `sendCallMeBot(env, mensagem)` — alertas de sistema via GET simples
|
|
97
|
+
- Garantir que `sendIntelligenceAlert()` chama `sendCallMeBot` (nunca `sendWhatsApp`)
|
|
98
|
+
- Executar envio assíncrono via `ctx.waitUntil` — nunca bloquear a resposta principal
|
|
99
|
+
- Só disparar alerta CallMeBot na **3ª falha** consecutiva de uma plataforma
|
|
100
|
+
- Detectar clique em botão WhatsApp no browser e disparar evento `Contact` via `cdpTrack.track()`
|
|
101
|
+
|
|
102
|
+
## SAÍDA
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"funcoes_geradas": {
|
|
107
|
+
"sendWhatsApp": "Meta Cloud API v22.0 — Purchase e Lead ao dono",
|
|
108
|
+
"sendCallMeBot": "CallMeBot GET — alertas de sistema ao admin",
|
|
109
|
+
"sendIntelligenceAlert": "chama sendCallMeBot internamente"
|
|
110
|
+
},
|
|
111
|
+
"eixos": {
|
|
112
|
+
"notificacoes": {
|
|
113
|
+
"api": "Meta Cloud API v22.0",
|
|
114
|
+
"endpoint": "POST /v22.0/{WHATSAPP_PHONE_NUMBER_ID}/messages",
|
|
115
|
+
"tipos": ["Purchase", "Lead"],
|
|
116
|
+
"secrets": ["WHATSAPP_PHONE_NUMBER_ID", "WHATSAPP_ACCESS_TOKEN", "WA_NOTIFY_NUMBER"]
|
|
117
|
+
},
|
|
118
|
+
"alertas_sistema": {
|
|
119
|
+
"api": "CallMeBot",
|
|
120
|
+
"endpoint": "GET api.callmebot.com/whatsapp.php",
|
|
121
|
+
"tipos": ["api_failure", "token_expired", "worker_error", "d1_error"],
|
|
122
|
+
"trigger": "apenas na 3ª falha consecutiva",
|
|
123
|
+
"secrets": ["CALLMEBOT_PHONE", "CALLMEBOT_APIKEY"]
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"envio_assincrono": true,
|
|
127
|
+
"evento_browser": "Contact (clique no botão WhatsApp)"
|
|
128
|
+
}
|
|
129
|
+
```
|