AdsApp을 사용하는 실적 최대화 캠페인

Google Ads 스크립트를 사용하면 실적 최대화 캠페인을 일부 관리할 수 있습니다. 스크립트를 사용하여 실적 최대화 캠페인을 가져오고, 애셋 그룹을 관리하고, 보고서를 실행할 수 있습니다. 하지만 스크립트를 사용하여 실적 최대화 캠페인을 만들 수는 없습니다. 고급 작업을 수행하려면 mutate를 사용하는 보다 일반적인 방법을 보여주는 이 가이드의 나머지 부분을 참고하세요.

실적 최대화 캠페인 가져오기

실적 최대화 캠페인은 AdsApp 객체의 performanceMaxCampaigns 컬렉션을 통해 사용할 수 있습니다. 다음과 같이 평소와 같이 검색할 수 있습니다.

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를 호출하여 애셋 그룹에서 애셋을 삭제합니다.

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