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

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

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

Кампании с максимальной эффективностью доступны через коллекцию 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 Performance Max .

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

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

Сначала создайте актив:

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

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

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

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 для группы активов, чтобы удалить актив из группы активов:

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