P3.1 · Integrar a Meta
Depende de P0.3. Este prompt não sobe campanha — ele estabelece a conexão, descobre os ids e valida o pixel.
O prompt
Estabeleça a integração do radar com a Meta. Separe descoberta de publicação: aqui só descobrimos e validamos.
1. Descoberta — faça primeiro e me mostre
No Claude Code existe o conector MCP de Meta Ads. Use-o para levantar e gravar em ads/meta/conta.yaml:
| Tool | O que descobrir |
|---|---|
ads_get_ad_accounts | ad_account_id, moeda, fuso, status, limite de gasto |
ads_get_user_pages | page_id da página EcomSmart |
ads_get_ad_account_pages | páginas vinculadas à conta |
ads_get_ig_accounts | instagram_actor_id |
ads_get_datasets | dataset_id do pixel |
ads_get_dataset_quality | qualidade atual da correspondência |
ads_get_ad_account_custom_audiences | públicos que já existem |
Se houver mais de uma conta ou página, pergunte qual usar. Não escolha sozinho.
Me apresente uma tabela com tudo antes de seguir.
2. App e token de sistema
O MCP serve para descoberta e para a primeira subida acompanhada. Em produção o serviço fala com a Marketing API diretamente.
- App no Meta for Developers com produto Marketing API
- Token de sistema (system user), não token de usuário — token de usuário expira e derruba a operação no pior momento
- Permissões:
ads_management,ads_read,business_management,pages_read_engagement - Secret
radar-metano namespaceproducaocomMETA_APP_ID,META_APP_SECRET,META_SYSTEM_TOKEN,META_AD_ACCOUNT_ID,META_PAGE_ID,META_IG_ACTOR_ID,META_DATASET_ID
Peça os valores a mim. Não invente.
3. Cliente da Marketing API
Módulo ads/meta/client.py:
- Versão da API fixada em constante, nunca
latest - Backoff exponencial em 429 e 500, respeitando o header
X-Business-Use-Case-Usage - Log estruturado de toda chamada com request id — quando algo der errado, é o que vai salvar
dry_runcomo parâmetro de primeira classe, não como gambiarra- Erros da Meta traduzidos para exceções nomeadas, com o subcódigo preservado
4. Pixel nas landings
- Pixel base com
PageViewem todas as páginas ViewContentnas landings de produtoInitiateCheckoutao clicar em comprarCompleteRegistrationao conectar a loja- Cada evento gera um
event_iduuid4 que será reusado no evento server-side, para deduplicação. Guarde no banco junto com oToque
Purchase não sai pelo pixel — sai só pela CAPI, em P3.3, porque o valor real só existe no servidor.
5. Públicos personalizados
Comando meta_sincronizar_publicos que monta, a partir do banco:
| Público | Fonte | Uso |
|---|---|---|
| Clientes pagantes | Stripe | Excluir da prospecção, semente do lookalike |
| Conectou loja, não comprou | Banco | Retargeting |
| Faturamento ≥ R$ 30 mil | Lead score | Campanha do Hub |
Hash SHA-256 do valor normalizado: e-mail em minúsculas sem espaço, telefone em E.164 sem + e sem separador.
Lookalike 1% só com 100 ou mais clientes na semente. Abaixo disso o público sai ruim e queima verba — implemente essa trava no código.
6. Health check
Comando meta_diagnostico que verifica e imprime: token válido e quando expira, conta ativa e sem restrição, pixel recebendo evento nas últimas 24h, qualidade de correspondência, públicos sincronizados e a taxa de correspondência de cada um.
Rode isso semanalmente por Celery beat e mande no alerta diário.
Critérios de aceite
ads/meta/conta.yamlcom todos os ids reais, confirmados comigo- Secret
radar-metacriado, sem nenhum valor em repositório meta_diagnosticorodando e retornando verde- Pixel disparando
PageVieweCompleteRegistration, visíveis no Gerenciador de Eventos event_idgravado no banco e conferível- Público "Clientes pagantes" sincronizado, com a taxa de correspondência informada pela Meta
- Teste de que lookalike com menos de 100 pessoas na semente é recusado