Campanhas Performance Max usando o AdsApp

Os scripts do Google Ads fornecem certo gerenciamento das suas campanhas Performance Max. Você pode usar scripts para recuperar 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 no conjunto performanceMaxCampaigns de um objeto AdsApp. Elas podem ser recuperadas 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, as campanhas Performance Max não têm grupos ou objetos de anúncio visíveis. 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 não contêm recursos, como vídeos, imagens, títulos e descrições, tanto fornecidos por você quanto gerados automaticamente. Para uma visão geral completa dos tipos de recurso 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. Não é possível criar esses grupos de recursos diretamente nos scripts, mas você pode adicionar e remover recursos de um grupo atual.

Adicionar recurso ao 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, adicione o recurso a um grupo existente usando o recurso que você acabou de criar:

// 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. Você encontra uma lista completa dos tipos de recurso na documentação da API Google Ads.

Para usar um recurso atual, crie um seletor:

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

Em seguida, use um filtro withCondition para restringir aos recursos com que você quer operar. Para ver uma lista completa de opções de filtro, consulte a documentação de referência AssetSelector.

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 criará o recurso automaticamente. Se o texto for uma cópia exata de um recurso de texto existente, o recurso atual será reutilizado.

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

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

Remover recurso do grupo

Também é possível remover um recurso de um grupo. No entanto, você precisa 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 consultar uma lista de recursos em um determinado grupo 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}'`
);

Essa ação seleciona o nome do recurso como identificador exclusivo. Também é possível selecionar outros campos, como asset.type ou asset.text_asset.text, para refinar ainda mais os resultados. Use o criador de consultas para este tipo de relatório para criar sua própria consulta.

Quando você tiver o recurso de destino, chame remove no grupo para removê-lo:

// 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);