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 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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue