Campanhas Performance Max usando o AdsApp

A melhor maneira de gerenciar suas campanhas Performance Max com os scripts do Google Ads é usar a estratégia de mutação para gerenciar diretamente suas campanhas Performance Max. As campanhas Performance Max só podem ser criadas com a função mutate. No entanto, você também pode usar outros objetos AdsApp para recuperar campanhas Performance Max, gerenciar grupos de recursos e gerar relatórios, se preferir.

Recuperação de campanhas Performance Max

As campanhas Performance Max estão disponíveis na performanceMaxCampaigns coleção de um AdsApp objeto. Você pode recuperá-las normalmente:

const campaignName = "My Performance Max campaign";

const campaignIterator = AdsApp.performanceMaxCampaigns()
    .withCondition(`campaign.name = "${campaignName}"`)
    .get();

for (const campaign of campaignIterator) {
  ...
}

Ao contrário de alguns outros tipos de campanha, as campanhas Performance Max não têm grupos de anúncios ou objetos de anúncio que você pode conferir. Tudo relacionado a esses conceitos para outras campanhas é processado automaticamente com base nos grupos de recursos definidos.

Recursos e grupos de recursos

Os anúncios das campanhas Performance Max são veiculados com base em recursos como vídeos, imagens, títulos e descrições, fornecidos por você ou gerados automaticamente. Para uma visão geral completa dos tipos de recursos necessários, consulte o guia de recursos das campanhas Performance Max da API Google Ads.

Os recursos das campanhas Performance Max são agrupados em um grupo de recursos, e cada campanha Performance Max precisa ter pelo menos um grupo de recursos. Não é possível criar esses grupos de recursos diretamente em scripts, mas você pode adicionar e remover recursos de um grupo de recursos existente.

Adicionar recurso ao grupo de recursos

Primeiro, crie o recurso:

const imageUrl = "http://www.example.com/example.png";
const imageBlob = UrlFetchApp.fetch(imageUrl).getBlob();
const assetOperation = AdsApp.adAssets().newImageAssetBuilder()
   .withName("new asset name")
   .withData(imageBlob)
   .build();
const imageAsset = assetOperation.getResult();

Em seguida, usando o recurso que você acabou de criar, adicione-o a um grupo de recursos existente:

// First, fetch the Performance Max campaign we want to operate on.
const campaignIterator = AdsApp.performanceMaxCampaigns()
   .withCondition(`campaign.name = '${campaignName}'`)
   .get();
let campaign;
if (campaignIterator.hasNext()) {
   campaign = campaignIterator.next();
} else {
   throw `No campaign found with name ${campaignName}.`
}

// Then, get that campaign's asset groups.
const assetGroupIterator = campaign.assetGroups().get();

// The campaign must have at least one asset group, so we can just assume so here.
const assetGroup = assetGroupIterator.next();

// Add the asset from the previous step.
assetGroup.addAsset(imageAsset, 'MARKETING_IMAGE');

Observe como é necessário especificar o tipo de recurso na última etapa. Você pode encontrar uma lista completa de tipos de recursos na documentação da API Google Ads

Para usar um recurso existente, primeiro crie um seletor de recursos:

const assetSelector = AdsApp.adAssets().assets();

Em seguida, use um filtro withCondition para restringir os recursos em que você quer operar. Consulte AssetSelector para uma lista completa de opções de filtro.

Por fim, busque o iterador e itere como com outras entidades:

const assetIterator = assetSelector.get();

for (const asset of assetIterator) {
   ...
}

Recursos de texto

Os recursos de texto funcionam de maneira um pouco diferente, porque não é necessário criar o recurso com antecedência. Basta especificar o texto em vez de um recurso, e o sistema vai criar o recurso automaticamente. Se o texto for uma duplicata exata de um recurso de texto existente, o recurso existente será reutilizado.

Por exemplo, veja como criar um recurso de título:

assetGroup.addAsset('asset text here', 'HEADLINE');

Remover recurso do grupo de recursos

Você também pode remover um recurso de um grupo de recursos. No entanto, lembre-se de que cada grupo de recursos precisa ter um número mínimo de determinados tipos de recursos para que a campanha seja válida.

Veja como remover o recurso que foi adicionado no exemplo anterior:

assetGroup.removeAsset(imageAsset, 'MARKETING_IMAGE');

Você também pode receber uma lista de recursos em um determinado grupo de recursos com a função search:

// The resource name is a unique identifier for this asset group.
const assetGroupName = assetGroup.getResourceName();
results = AdsApp.search(
   `SELECT asset.resource_name, asset_group_asset.field_type
    FROM asset_group_asset
    WHERE asset_group.resource_name = '${assetGroupName}'`
);

Isso seleciona o nome do recurso como identificador exclusivo. Você também pode selecionar outros campos, como asset.type ou asset.text_asset.text, para refinar ainda mais os resultados. Use o criador de consultas para esse tipo de relatório para criar sua própria consulta.

Depois de ter o recurso de destino, chame remove no grupo de recursos para remover o recurso do grupo de recursos:

// This example assumes at least one asset is returned. We'll remove the first
// asset, whatever it is. In your code, customize this to choose the right
// asset to be removed.
const row_info = results.next().asset;
assetGroup.remove(row_info.asset.resource_name, row_info.asset_group_asset.field_type);