Campanhas Performance Max usando o AdsApp

Os scripts do Google Ads permitem gerenciar algumas campanhas Performance Max. É possível usar scripts para extrair campanhas Performance Max, gerenciar grupos de recursos e gerar relatórios. No entanto, não é possível usar scripts para criar campanhas Performance Max. Para fazer operações mais avançadas, consulte o restante deste guia, que demonstra uma abordagem mais genérica usando mutate.

Recuperação de campanhas Performance Max

As campanhas Performance Max estão disponíveis na coleção performanceMaxCampaigns de um objeto AdsApp. Você pode recuperá-los 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úncios que você possa conferir. Tudo relacionado a esses conceitos em outras campanhas é processado automaticamente com base nos grupos de recursos que você define.

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 conferir uma visão geral completa dos tipos de recursos necessários, consulte o guia de recursos da API Performance Max do 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 é possível adicionar e remover recursos de um grupo de recursos.

Adicionar recurso a um grupo

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, use o recurso que você acabou de criar e adicione-o a um grupo de recursos:

// 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 você precisa especificar o tipo de recurso na última etapa. Confira uma lista completa de tipos de recursos na documentação da API Google Ads.

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

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

Em seguida, use um filtro withCondition para restringir os recursos que você quer operar. Consulte a documentação de referência de AssetSelector para conferir a 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 você não precisa 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 cópia exata de um recurso de texto existente, ele será reutilizado.

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

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

Remover recurso do grupo de recursos

Também é possível remover um recurso de um grupo de recursos. No entanto, é necessário ter um número mínimo de determinados tipos de recursos para que a campanha seja válida.

Veja como remover o recurso adicionado no exemplo anterior:

assetGroup.removeAsset(imageAsset, 'MARKETING_IMAGE');

Também é possível acessar 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 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 removê-lo do grupo:

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