From 8ebbe079ec5e3ed55af9d163068fa12656cb5979 Mon Sep 17 00:00:00 2001
From: Marcio Bevervanso
Date: Tue, 16 Jun 2026 14:21:28 -0300
Subject: [PATCH] =?UTF-8?q?diag:=20revelar=20o=20motivo=20de=20a=20customi?=
=?UTF-8?q?za=C3=A7=C3=A3o=20por=20posicionamento=20falhar?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
As 3 imagens sobem, mas a Meta recusa montar o criativo com elas e o app
cai pra 1 imagem silenciosamente. Agora o erro real da Meta é logado
([Placement]) e devolvido na resposta (placement_error), aparecendo na
tela final — pra diagnosticar e corrigir a estrutura do asset_feed_spec.
Co-Authored-By: Claude Opus 4.8
---
src/app/dashboard/create/page.tsx | 18 ++++++++++++++++++
src/lib/mcp/tools.ts | 19 +++++++++++++++++--
2 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/src/app/dashboard/create/page.tsx b/src/app/dashboard/create/page.tsx
index 6977146..d3b8d2c 100644
--- a/src/app/dashboard/create/page.tsx
+++ b/src/app/dashboard/create/page.tsx
@@ -77,6 +77,9 @@ export default function CreateCampaignPage() {
// Subir a campanha já ativa (no ar) em vez de pausada para revisão.
const [startActive, setStartActive] = useState(false);
+ // Diagnóstico: motivo de a customização por posicionamento ter caído pra 1 imagem.
+ const [placementNote, setPlacementNote] = useState(null);
+
const [uploadedImageBytes, setUploadedImageBytes] =
useState(null);
@@ -608,6 +611,12 @@ export default function CreateCampaignPage() {
approved_at: new Date().toISOString(),
});
+ setPlacementNote(
+ data.data?.placements_dropped
+ ? data.data?.placement_error || 'A Meta recusou a customização por posicionamento; subiu com 1 imagem.'
+ : null
+ );
+
setStep('done');
} catch (err) {
console.error('[Debug] Publish error:', err);
@@ -1537,6 +1546,15 @@ export default function CreateCampaignPage() {
? 'Tudo enviado para o seu Gerenciador de Anúncios. A campanha subiu ATIVA e entra em análise da Meta agora — começa a entregar assim que for aprovada.'
: 'Tudo enviado para o seu Gerenciador de Anúncios. A campanha subiu PAUSADA — revise no Gerenciador e dê play quando quiser colocar no ar.'}
+
+ {placementNote && (
+
+
+ Subiu com 1 imagem (a Meta recusou usar as 3 por posicionamento). Motivo retornado pela Meta:
+