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