Skip to content

Meta CAPI — Conversions API

O módulo Meta CAPI (backend/src/marketing/meta-capi.service.ts) envia eventos de conversão ao Meta de forma server-side, complementando o Pixel do browser para cobrir sessões sem cookie ou com ad-blocker.

Visão Geral

CaracterísticaDetalhe
Módulo backendbackend/src/marketing/
ServiceMetaCapiService
ControllerMarketingControllerbackend/src/marketing/marketing.controller.ts
Schema de configMarketingConfigbackend/src/marketing/schemas/marketing-config.schema.ts
PermissãoRole.Admin ou Role.Superadmin
RotaGET/PUT /t/:slug/admin/marketing/capi-config

Eventos Implementados

EventoQuando disparado
PurchasePedido marcado como pago / entregue
AddToCartHeartbeat de carrinho com itens (opcional)
ViewContentVisualização de item do cardápio (opcional)

Acionados via MetaCapiService.firePurchase() e MetaCapiService.sendEvent().

Schema MarketingConfig

CampoDescrição
tenantObjectId — isolamento multi-tenant
pixelIdID do Meta Pixel (ex: 1234567890)
accessTokenEncryptedToken da CAPI criptografado com AES-256-GCM (via token-encrypt.ts) — nunca retornado pela API
enabledtrue para habilitar envio real
dryRuntrue para logar eventos sem enviar ao Meta (útil em homologação)

Configuração

1. Obter Pixel ID e Access Token

No Gerenciador de Eventos do Meta:

  1. Selecione o Pixel existente (ou crie um novo)
  2. Acesse Configurações → Conversions API
  3. Gere um Token de Acesso (escopo: ads_management)
  4. Anote o Pixel ID (número de 15 dígitos)

2. Configurar no PopinaFlow

PUT /t/:slug/admin/marketing/capi-config
{
  "pixelId": "1234567890",
  "accessToken": "EAABwz...",
  "enabled": true,
  "dryRun": false
}

Ou via painel: Configurações → Marketing → Meta CAPI.

O accessToken é criptografado antes de ser persistido. O endpoint GET /capi-config retorna hasAccessToken: true/false — nunca o token real.

3. Verificar com Dry Run

Ative dryRun: true para validar sem enviar ao Meta. Eventos aparecem nos logs do servidor:

[MetaCapiService] [DRY-RUN] Would send Purchase event: { event_id: "...", value: 45.90 }

Hashing de PII

Todos os dados pessoais são hasheados SHA-256 antes do envio (requisito Meta):

CampoNormalizaçãoCampo CAPI
Emaillowercase, trimem[]
TelefoneE.164 sem +ph[]
_fbp cookiefbp
_fbc click IDfbc

Nenhum dado em plaintext é enviado ao Meta.

Event Deduplication

Cada evento tem um event_id único (UUID ou orderNumber). O Meta usa esse campo para deduplicar entre o Pixel browser e o evento CAPI server-side — não conta a conversão duas vezes.

Endpoints

MétodoRotaDescrição
GET/admin/marketing/capi-configRetorna config atual (sem accessToken)
PUT/admin/marketing/capi-configAtualiza config

Relacionados

Lançado sob a licença MIT.