Módulo 4 · Dados e Cloud API
Ajustes
Este preview simula o funil permitido: opt-in → conversa → uma oferta de infoproduto ou e-commerce. Automações oficiais do Zap em WhatsApp.
Fluxo entre módulos
- 1. Radar — pesquisa demanda para anúncio. Não comenta, não chama, não copia handle.
- 2. Captura — só entra no inbox com opt-in (formulário ou Click-to-WhatsApp).
- 3. Atendimento — bot responde quem já escreveu. Uma oferta permitida por conversa.
- 4. Conversão — link rastreado. Follow-up só nessa janela, texto diferente.
Operação
Bloqueado de propósito: apostas, betting, cassino, trading, forex, cripto, disparo frio, comentário comercial em massa. Sem interruptor para ligar isso.
Google Analytics 4
ID de medição
analytics.google.com → Administrar → Fluxos de dados → Web. Cole o G-XXXX. Sem telefone, sem nome no hit.
Vazio ou inválido: o gtag não carrega.
- page_viewToda rota · SPA — dispara na navegação.
- view_item/venda e /ir · Oferta vista. Sem PII.
- generate_lead/quero · Opt-in. Sem telefone no hit.
- begin_checkoutBotão do checkout · Clique para a Hotmart.
Google Ads
Pixel AW-
O mesmo par de Tráfego. Tag = remarketing. send_to = conversão no clique do checkout.
Vazio
Vazio
Tokens de acesso
System user permanente na Meta. Nunca token de 1 hora do Graph Explorer. O valor não aparece de volta — só se está definido e os 4 últimos.
- Access token: ausente
- App secret: ausente
- Verify token: sinal-verify
Business Manager → Users do sistema → gerar token com whatsapp_business_messaging e whatsapp_business_management. Não cole no chat. Não use VITE_.
Let's Encrypt
No app publicado o HTTPS já sai com certificado de CA pública. Este caminho é o HTTP-01 se você hospedar o callback: Let's Encrypt GET /.well-known/acme-challenge/… e espera o keyAuthorization em texto puro.
Desafios guardados: 0. Preview local não emite cert — porta 80/443 pública + domínio apontando para o app.
Nginx proxy
Só se o callback rodar atrás de um VPS. App publicado já tem HTTPS — não precisa de Nginx na frente. Troque SEU_DOMINIO. O corpo do POST não pode ser reescrito: o HMAC usa os bytes crus.
- 80: só ACME, o resto redireciona para HTTPS.
- 443: TLSv1.2/1.3 · Let's Encrypt fullchain.
- /webhook em até 15s — a Meta abandona se atrasar.
- Encaminha X-Hub-Signature-256 e X-Forwarded-Proto.
# Sinal — proxy do webhook Cloud API
# TLS 1.2+ · ACME · corpo cru (HMAC-SHA256)
upstream sinal {
server 127.0.0.1:8080;
keepalive 8;
}
server {
listen 80;
listen [::]:80;
server_name SEU_DOMINIO;
location ^~ /.well-known/acme-challenge/ {
proxy_pass http://sinal;
proxy_set_header Host $host;
gzip off;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name SEU_DOMINIO;
ssl_certificate /etc/letsencrypt/live/SEU_DOMINIO/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/SEU_DOMINIO/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
client_max_body_size 1m;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Hub-Signature-256 $http_x_hub_signature_256;
proxy_request_buffering on;
proxy_read_timeout 15s;
location /webhook {
proxy_pass http://sinal;
}
location ^~ /.well-known/acme-challenge/ {
proxy_pass http://sinal;
gzip off;
}
location / {
proxy_pass http://sinal;
}
}
error.log: cole em Ao vivo. 502 = processo do Sinal. unknown ca = certificado. timeout = Meta desiste.
Dados desta demo
Leads e conversas ficam neste navegador. Reset reconstitui o cenário de demonstração (Marina, Rafael, Camila, Lúcia).