Chiến dịch Tối đa hoá hiệu suất sử dụng AdsApp

Cách tốt nhất để quản lý chiến dịch Tối đa hoá hiệu suất bằng tập lệnh Google Ads là sử dụng chiến lược biến đổi để trực tiếp quản lý chiến dịch Tối đa hoá hiệu suất. Bạn chỉ có thể tạo chiến dịch Tối đa hoá hiệu suất bằng hàm mutate. Tuy nhiên, bạn cũng có thể sử dụng các đối tượng AdsApp khác để truy xuất chiến dịch Tối đa hoá hiệu suất, quản lý nhóm thành phần và chạy báo cáo nếu muốn.

Truy xuất chiến dịch Tối đa hoá hiệu suất

Chiến dịch Tối đa hoá hiệu suất có trong bộ sưu tập performanceMaxCampaigns của đối tượng AdsApp. Bạn có thể truy xuất các tệp này như bình thường:

const campaignName = "My Performance Max campaign";

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

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

Không giống như một số loại chiến dịch khác, chiến dịch Tối đa hoá hiệu suất không có nhóm quảng cáo hoặc đối tượng quảng cáo mà bạn có thể thấy; mọi thứ liên quan đến các khái niệm này cho các chiến dịch khác đều được xử lý tự động cho bạn dựa trên các nhóm thành phần mà bạn đặt.

Thành phần và nhóm thành phần

Quảng cáo trong chiến dịch Tối đa hoá hiệu suất chạy dựa trên thành phần như video, hình ảnh, dòng tiêu đề và nội dung mô tả – do bạn cung cấp hoặc được tạo tự động. Để xem thông tin tổng quan đầy đủ về những loại thành phần bắt buộc, hãy xem hướng dẫn về thành phần của chiến dịch Tối đa hoá hiệu suất trên Google Ads API.

Các thành phần cho chiến dịch Tối đa hoá hiệu suất được kết hợp với nhau thành một nhóm thành phần và mỗi chiến dịch Tối đa hoá hiệu suất phải có ít nhất một nhóm thành phần. Bạn không thể tạo trực tiếp các nhóm thành phần này trong tập lệnh, nhưng có thể thêm và xoá thành phần khỏi một nhóm thành phần hiện có.

Thêm thành phần vào nhóm thành phần

Trước tiên, hãy tạo thành phần:

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

Sau đó, hãy sử dụng thành phần bạn vừa tạo để thêm thành phần đó vào một nhóm thành phần hiện có:

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

Lưu ý rằng bạn phải chỉ định loại tài sản ở bước cuối cùng. Bạn có thể tìm thấy danh sách đầy đủ các loại tài sản trong tài liệu về API Google Ads

Để sử dụng một thành phần hiện có, trước tiên, hãy tạo một bộ chọn thành phần:

const assetSelector = AdsApp.adAssets().assets();

Sau đó, hãy sử dụng bộ lọc withCondition để thu hẹp phạm vi thành những thành phần mà bạn muốn thao tác. Hãy xem tài liệu tham khảo AssetSelector để biết danh sách đầy đủ các lựa chọn bộ lọc.

Cuối cùng, hãy tìm nạp trình lặp và lặp lại như với các thực thể khác:

const assetIterator = assetSelector.get();

for (const asset of assetIterator) {
   ...
}

Thành phần văn bản

Thành phần văn bản hoạt động hơi khác một chút, đó là bạn không cần phải tạo thành phần trước. Bạn chỉ cần chỉ định văn bản thay vì thành phần, hệ thống sẽ tự động tạo thành phần cho bạn. Nếu văn bản trùng khớp hoàn toàn với một thành phần văn bản hiện có, thì thành phần hiện có sẽ được sử dụng lại.

Ví dụ: sau đây là cách tạo thành phần tiêu đề:

assetGroup.addAsset('asset text here', 'HEADLINE');

Xoá thành phần khỏi nhóm thành phần

Bạn cũng có thể xoá một thành phần khỏi nhóm thành phần; tuy nhiên, hãy lưu ý rằng bạn phải có số lượng tối thiểu của một số loại thành phần nhất định để chiến dịch hợp lệ.

Sau đây là cách xoá thành phần đã được thêm trong ví dụ trước:

assetGroup.removeAsset(imageAsset, 'MARKETING_IMAGE');

Bạn cũng có thể lấy danh sách các thành phần trong một nhóm thành phần nhất định bằng hàm 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}'`
);

Thao tác này sẽ chọn tên tài nguyên của tài sản làm giá trị nhận dạng riêng biệt. Bạn cũng có thể chọn các trường khác, chẳng hạn như asset.type hoặc asset.text_asset.text để tinh chỉnh thêm kết quả. Sử dụng trình tạo truy vấn cho loại báo cáo này để tạo truy vấn của riêng bạn.

Sau khi bạn có thành phần mục tiêu, hãy gọi remove trên nhóm thành phần để xoá thành phần khỏi nhóm thành phần:

// This example assumes at least one asset is returned. We'll remove the first
// asset, whatever it is. In your code, customize this to choose the right
// asset to be removed.
const row_info = results.next().asset;
assetGroup.remove(row_info.asset.resource_name, row_info.asset_group_asset.field_type);