Kampanie Performance Max korzystające z AdsApp

Najlepszym sposobem zarządzania kampaniami Performance Max za pomocą skryptów Google Ads jest użycie strategii mutate, która umożliwia bezpośrednie zarządzanie kampaniami Performance Max. Kampanie Performance Max można tworzyć tylko za pomocą funkcji mutate. Możesz jednak używać innych obiektów AdsApp, aby pobierać kampanie Performance Max, zarządzać grupami plików i generować raporty.

Pobieranie kampanii Performance Max

Kampanie Performance Max są dostępne w kolekcji performanceMaxCampaigns obiektu AdsApp. Możesz je odzyskać w zwykły sposób:

const campaignName = "My Performance Max campaign";

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

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

W przeciwieństwie do niektórych innych typów kampanii kampanie Performance Max nie mają grup reklam ani obiektów reklam, które możesz wyświetlać. Wszystkie kwestie związane z tymi pojęciami w przypadku innych kampanii są obsługiwane automatycznie na podstawie ustawionych przez Ciebie grup plików.

Komponenty i grupy plików

Reklamy z kampanii Performance Max działają na podstawie komponentów, takich jak filmy, obrazy, nagłówki i teksty reklamy – dostarczonych przez Ciebie lub wygenerowanych automatycznie. Pełny przegląd wymaganych typów komponentów znajdziesz w przewodniku po komponentach w kampaniach Performance Max w interfejsie Google Ads API.

Pliki w kampaniach Performance Max są zgrupowane w grupy plików, a każda kampania Performance Max musi mieć co najmniej 1 grupę plików. Nie możesz tworzyć tych grup plików bezpośrednio w skryptach, ale możesz dodawać i usuwać z nich komponenty.

Dodawanie komponentu do grupy plików

Najpierw utwórz komponent:

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

Następnie dodaj utworzony komponent do istniejącej grupy komponentów:

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

Zwróć uwagę, że w ostatnim kroku musisz określić typ komponentu. Pełną listę typów komponentów znajdziesz w dokumentacji interfejsu Google Ads API.

Aby użyć istniejącego komponentu, najpierw utwórz selektor komponentów:

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

Następnie użyj filtra withCondition, aby zawęzić listę do zasobów, na których chcesz wykonać działanie. Pełną listę opcji filtrowania znajdziesz w AssetSelectordokumentacji referencyjnej.

Na koniec pobierz iterator i iteruj go tak jak w przypadku innych elementów:

const assetIterator = assetSelector.get();

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

Komponenty tekstowe

Zasoby tekstowe działają nieco inaczej, ponieważ nie musisz tworzyć zasobu z wyprzedzeniem. Wystarczy, że podasz tekst zamiast komponentu, a system automatycznie utworzy komponent. Jeśli tekst jest dokładną kopią istniejącego komponentu tekstowego, zostanie użyty istniejący komponent.

Na przykład tak możesz utworzyć komponent nagłówka:

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

Usuwanie komponentu z grupy plików

Możesz też usunąć komponent z grupy plików, ale pamiętaj, że aby kampania była prawidłowa, musisz mieć minimalną liczbę określonych rodzajów komponentów.

Aby usunąć komponent dodany w poprzednim przykładzie:

assetGroup.removeAsset(imageAsset, 'MARKETING_IMAGE');

Możesz też uzyskać listę komponentów w danej grupie plików za pomocą funkcji 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}'`
);

Spowoduje to wybranie nazwy zasobu jako unikalnego identyfikatora komponentu. Możesz też wybrać inne pola, np. asset.type lub asset.text_asset.text, aby jeszcze bardziej doprecyzować wyniki. Aby utworzyć własne zapytanie, użyj kreatora zapytań dla tego typu raportu.

Gdy uzyskasz docelowy komponent, wywołaj remove w grupie plików, aby usunąć z niej komponent:

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