Đặt đối tượng thông báo trống dưới dạng trường

Trong API Google Ads, một số trường thông báo được xác định là đối tượng thông báo trống, chẳng hạn như campaign.manual_cpm, hoặc chỉ có các trường không bắt buộc mà bạn không cần thiết lập, chẳng hạn như campaign.manual_cpc. Việc thiết lập các trường này rất quan trọng để cho API biết chiến lược đặt giá thầu nào sẽ được sử dụng cho Chiến dịch nhất định, nhưng sẽ không trực quan khi thông báo trống.

Khi cập nhật trường campaign.name (là một chuỗi), chúng ta đặt trường này bằng cách cập nhật trực tiếp trường đó như thể đó là một thuộc tính đối tượng Python thông thường:

campaign.name = "Test campaign value"

campaign.manual_cpc là một trường lồng nhau, nghĩa là trường này chứa một thông báo protobuf khác chứ không phải một kiểu gốc, chẳng hạn như một chuỗi. Bạn cũng có thể cập nhật trực tiếp các trường của lớp này:

campaign.manual_cpc.enhanced_cpc_enabled = True

Thao tác này sẽ cho API biết rằng Chiến dịch này có chiến lược đặt giá thầu là manual_cpc và đã bật chiến lược CPC nâng cao.

Nhưng nếu bạn muốn sử dụng manual_cpm trống thì sao? Hoặc manual_cpc mà không bật chiến lược đặt giá thầu cpc nâng cao? Để thực hiện việc này, bạn cần sao chép một bản sao trống riêng biệt của lớp vào chiến dịch, ví dụ:

client = GoogleAdsClient.load_from_storage()

empty_cpm = client.get_type('ManualCpm')
client.copy_from(campaign.manual_cpm, empty_cpm)

Lưu ý cách chỉ định manual_cpm cho đối tượng campaign:

name {
  value: "Test campaign value"
}
manual_cpm {
}

Trường manual_cpm được đặt, nhưng không có trường nào có giá trị. Khi gửi yêu cầu đến API sử dụng mẫu này, bạn có thể xác minh rằng mình đang thiết lập đối tượng thông báo trống đúng cách bằng cách bật tính năng ghi nhật ký và kiểm tra tải trọng yêu cầu.

Cuối cùng, bạn cần thêm trường này vào update_mask của đối tượng yêu cầu theo cách thủ công. Trình trợ giúp mặt nạ trường không có cơ chế để xác định sự khác biệt giữa một trường được đặt rõ ràng thành đối tượng trống và một trường chưa được đặt.

from google.api_core.protobuf_helpers import field_mask

campaign_operation.create = campaign
campaign_operation.update_mask = field_mask(None, campaign)
# Here we manually add the "manual_cpm" field
campaign_operation.update_mask.append("manual_cpm")