From 349203b761962f09b45b8f11d611b627c87f1a81 Mon Sep 17 00:00:00 2001 From: Marcio Bevervanso Date: Tue, 16 Jun 2026 12:47:18 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20op=C3=A7=C3=A3o=20de=20subir=20a=20camp?= =?UTF-8?q?anha=20j=C3=A1=20ativa=20(no=20ar)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Antes tudo subia PAUSED por padrão. Agora o pipeline propaga um status comum para campanha, conjunto e anúncio (os 3 precisam estar ACTIVE para entregar). A rota aceita activate=true e o Preview ganha um toggle "Iniciar a campanha já ativa" (default desmarcado = pausada para revisão). Co-Authored-By: Claude Opus 4.8 --- src/app/api/campaigns/create/route.ts | 6 +++ src/app/dashboard/create/page.tsx | 59 +++++++++++++++++++-------- src/lib/mcp/tools.ts | 12 ++++++ 3 files changed, 60 insertions(+), 17 deletions(-) diff --git a/src/app/api/campaigns/create/route.ts b/src/app/api/campaigns/create/route.ts index 3f23f21..1996d09 100644 --- a/src/app/api/campaigns/create/route.ts +++ b/src/app/api/campaigns/create/route.ts @@ -242,10 +242,16 @@ export async function POST(req: Request) { }; } + // Por padrão sobe PAUSED (revisar antes de ativar). Quando activate=true, + // os 3 níveis (campanha/conjunto/anúncio) sobem ACTIVE e já entram em + // análise/entrega na Meta. + const finalStatus = body.activate === true ? 'ACTIVE' : 'PAUSED'; + const result = await createFullCampaign(mcpClient, { campaign_name, objective: finalObjective, daily_budget: finalDailyBudget, + status: finalStatus, bid_strategy: finalBidStrategy, bid_amount: finalBidStrategy === 'LOWEST_COST_WITHOUT_CAP' ? undefined : finalBidAmount, targeting: { diff --git a/src/app/dashboard/create/page.tsx b/src/app/dashboard/create/page.tsx index 28de62c..4ac0f55 100644 --- a/src/app/dashboard/create/page.tsx +++ b/src/app/dashboard/create/page.tsx @@ -74,6 +74,9 @@ export default function CreateCampaignPage() { // Estampar o preço/oferta no criativo gerado por IA (bom p/ low-ticket DR). const [stampOffer, setStampOffer] = useState(false); + // Subir a campanha já ativa (no ar) em vez de pausada para revisão. + const [startActive, setStartActive] = useState(false); + const [uploadedImageBytes, setUploadedImageBytes] = useState(null); @@ -571,6 +574,9 @@ export default function CreateCampaignPage() { cta: copyVariations[selectedCopy] .cta || 'LEARN_MORE', + + // Sobe ACTIVE (no ar) ou PAUSED (revisar antes) nos 3 níveis. + activate: startActive, }), } ); @@ -1475,22 +1481,39 @@ export default function CreateCampaignPage() { -
- - +
+ + +
+ + +
)} @@ -1505,7 +1528,9 @@ export default function CreateCampaignPage() { Campanha no Ar!

- Seus criativos, públicos e orçamentos foram enviados com sucesso para o seu Gerenciador de Anúncios. A campanha entrará em análise pela Meta em instantes. + {startActive + ? '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.'}