AdsApp を使用した P-MAX キャンペーン

Google 広告スクリプトを使用すると、P-MAX キャンペーンの一部を管理できます。スクリプトを使用して P-MAX キャンペーンを取得したり、アセット グループを管理したり、レポートを実行したりすることはできますが、スクリプトを使用して P-MAX キャンペーンを作成することはできません。より高度なオペレーションを行うには、このガイドの残りの部分をご覧ください。ここでは、mutate を使用したより一般的なアプローチについて説明します。

P-MAX キャンペーンの取得

P-MAX キャンペーンは、AdsApp オブジェクトの performanceMaxCampaigns コレクションで使用できます。通常どおり取得できます。

const campaignName = "My Performance Max campaign";

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

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

他のキャンペーン タイプとは異なり、P-MAX キャンペーンには、表示できる広告グループや広告オブジェクトはありません。他のキャンペーンのこれらのコンセプトに関連するすべての処理は、設定したアセット グループに基づいて自動的に処理されます。

アセットとアセット グループ

P-MAX キャンペーンの広告は、動画、画像、広告見出し、説明文などのアセットに基づいて配信されます。これらのアセットは、お客様が提供するものでも、自動生成されたものでもかまいません。必要なアセットの種類について詳しくは、Google Ads API P-MAX アセット ガイドをご覧ください。

P-MAX キャンペーンのアセットは、アセット グループにまとめられます。各 P-MAX キャンペーンには、少なくとも 1 つのアセット グループが必要です。これらのアセット グループはスクリプトで直接作成することはできませんが、既存のアセット グループにアセットを追加したり、アセットを削除したりすることはできます。

アセット グループにアセットを追加する

まず、アセットを作成します。

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.typeasset.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);