Кампании с максимальной эффективностью, созданные с помощью AdsApp

Лучший способ управлять кампаниями с максимальной эффективностью с помощью скриптов Google Рекламы – использовать стратегию mutate, чтобы напрямую управлять кампаниями с максимальной эффективностью. Кампании с максимальной эффективностью можно создавать только с помощью функции mutate. Однако вы также можете использовать другие объекты AdsApp, чтобы получать данные о кампаниях с максимальной эффективностью, управлять группами объектов и создавать отчеты.

Получение кампаний с максимальной эффективностью

Кампании с максимальной эффективностью доступны через коллекцию performanceMaxCampaigns объекта AdsApp. Вы можете получить их обычным способом:

const campaignName = "My Performance Max campaign";

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

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

В отличие от некоторых других типов кампаний, в кампаниях с максимальной эффективностью нет групп объявлений или объектов объявлений, которые вы можете видеть. Все, что связано с этими концепциями для других кампаний, обрабатывается автоматически на основе заданных вами групп объектов.

Объекты и группы объектов

Объявления из кампаний с максимальной эффективностью создаются на основе объектов, таких как видео, изображения, заголовки и описания, которые вы предоставляете или которые генерируются автоматически. Полный список необходимых объектов приведен в руководстве по объектам для кампаний с максимальной эффективностью в Google Ads API.

Объекты для кампаний с максимальной эффективностью объединяются в группы объектов. В каждой кампании с максимальной эффективностью должна быть хотя бы одна группа объектов. Создавать такие группы объектов напрямую в скриптах нельзя, но можно добавлять и удалять объекты из существующих групп.

Добавить объект в группу объектов

Сначала создайте объект:

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

Затем добавьте созданный объект в существующую группу объектов:

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

Обратите внимание, что на последнем шаге необходимо указать тип объекта. Полный список типов объектов можно найти в документации Google Ads API.

Чтобы использовать существующий объект, сначала создайте селектор объектов:

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

Затем используйте фильтр withCondition, чтобы оставить только нужные объекты. Полный список вариантов фильтрации приведен в разделе AssetSelector.

Наконец, получите итератор и выполните итерацию, как и с другими объектами:

const assetIterator = assetSelector.get();

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

Текстовые объекты

Текстовые объекты работают немного иначе: их не нужно создавать заранее. Вам нужно только указать текст, а система автоматически создаст объект. Если текст полностью совпадает с существующим текстовым объектом, будет использоваться существующий объект.

Например, вот как создать объект заголовка:

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

Как удалить объект из группы объектов

Вы также можете удалить объект из группы, но помните, что в каждой группе должно быть минимальное количество объектов определенных типов, иначе кампания не будет работать.

Вот как удалить объект, добавленный в предыдущем примере:

assetGroup.removeAsset(imageAsset, 'MARKETING_IMAGE');

Вы также можете получить список объектов в определенной группе объектов с помощью функции 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}'`
);

В качестве уникального идентификатора объекта будет выбрано название его ресурса. Вы также можете выбрать другие поля, например asset.type или asset.text_asset.text, чтобы уточнить результаты. Чтобы создать собственный запрос, воспользуйтесь конструктором запросов для этого типа отчета.

Получив целевой объект, вызовите remove для группы объектов, чтобы удалить объект из группы:

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