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:
parent
58d9825fa5
commit
adc6580848
1 changed files with 24 additions and 29 deletions
|
|
@ -698,38 +698,33 @@ export async function addAdToAdSet(client: Client, params: AddAdToAdSetParams) {
|
||||||
let instagramDropped = false;
|
let instagramDropped = false;
|
||||||
let placementsDropped = 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 {
|
try {
|
||||||
creative = await buildCreative(params.instagram_actor_id, wantPlacements);
|
return await buildCreative(params.instagram_actor_id, false);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (params.instagram_actor_id && isInstagramError(err)) {
|
if (params.instagram_actor_id && isInstagramError(err)) {
|
||||||
// Problema no Instagram: refaz sem IG (mantendo a customização se houver).
|
|
||||||
instagramDropped = true;
|
instagramDropped = true;
|
||||||
try {
|
return await buildCreative(undefined, false);
|
||||||
creative = await buildCreative(undefined, wantPlacements);
|
|
||||||
} catch (err2) {
|
|
||||||
if (wantPlacements) {
|
|
||||||
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;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue