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 instagramDropped = false;
let placementsDropped = false; let placementsDropped = false;
try { // Imagem única + IG é o caminho comprovado. Só largamos o Instagram se o
creative = await buildCreative(params.instagram_actor_id, wantPlacements); // próprio criativo de imagem única falhar com erro específico de IG (id
} catch (err) { // inválido / sem acesso). Prioridade: NUNCA trocar IG por "3 imagens".
if (params.instagram_actor_id && isInstagramError(err)) { const buildSingleWithIgFallback = async () => {
// Problema no Instagram: refaz sem IG (mantendo a customização se houver). try {
instagramDropped = true; return await buildCreative(params.instagram_actor_id, false);
try { } catch (err) {
creative = await buildCreative(undefined, wantPlacements); if (params.instagram_actor_id && isInstagramError(err)) {
} catch (err2) { instagramDropped = true;
if (wantPlacements) { return await buildCreative(undefined, false);
placementsDropped = true;
creative = await buildCreative(undefined, false);
} else {
throw err2;
}
} }
} 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; 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; const creativeId = (creative as any)?.id;