fix: priorizar imagem única + Instagram sobre as 3 imagens (1772103)

A cascata anterior, ao falhar a customização por posicionamento, podia
derrubar o Instagram e deixar criativo sem IG num ad set que mira IG —
gerando 1772103. Agora: se a customização (asset_feed_spec) falhar, cai
para imagem única MANTENDO o Instagram (caminho comprovado). O IG só é
removido se o próprio criativo de imagem única falhar com erro de IG.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Marcio Bevervanso 2026-06-16 13:08:04 -03:00
parent 58d9825fa5
commit adc6580848

View file

@ -698,38 +698,33 @@ export async function addAdToAdSet(client: Client, params: AddAdToAdSetParams) {
let instagramDropped = false;
let placementsDropped = false;
// Imagem única + IG é o caminho comprovado. Só largamos o Instagram se o
// próprio criativo de imagem única falhar com erro específico de IG (id
// inválido / sem acesso). Prioridade: NUNCA trocar IG por "3 imagens".
const buildSingleWithIgFallback = async () => {
try {
creative = await buildCreative(params.instagram_actor_id, wantPlacements);
return await buildCreative(params.instagram_actor_id, false);
} catch (err) {
if (params.instagram_actor_id && isInstagramError(err)) {
// Problema no Instagram: refaz sem IG (mantendo a customização se houver).
instagramDropped = true;
try {
creative = await buildCreative(undefined, wantPlacements);
} catch (err2) {
if (wantPlacements) {
placementsDropped = true;
creative = await buildCreative(undefined, false);
} else {
throw err2;
return await buildCreative(undefined, false);
}
}
} else if (wantPlacements) {
// Erro provável da customização por posicionamento → cai pra imagem única.
placementsDropped = true;
try {
creative = await buildCreative(params.instagram_actor_id, false);
} catch (err2) {
if (params.instagram_actor_id && isInstagramError(err2)) {
instagramDropped = true;
creative = await buildCreative(undefined, false);
} else {
throw err2;
}
}
} else {
throw err;
}
};
if (wantPlacements) {
try {
// 1) Melhor caso: imagem específica por posicionamento, com IG.
creative = await buildCreative(params.instagram_actor_id, true);
} catch {
// 2) Customização por posicionamento falhou (ex: conflito com a
// identidade de IG) → cai pra imagem única mantendo o Instagram.
placementsDropped = true;
creative = await buildSingleWithIgFallback();
}
} else {
creative = await buildSingleWithIgFallback();
}
const creativeId = (creative as any)?.id;