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