Đặ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 có thể chỉ có các trường không bắt buộc không cần thiết lập, ví dụ: campaign.manual_cpc. Đặt các cài đặt này là rất quan trọng để cho API biết nên sử dụng chiến lược đặt giá thầu nào cho Chiến dịch, nhưng 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 sẽ đặt trường này bằng cách cập nhật trực tiếp 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à trường lồng nhau, có nghĩa là trường này chứa một thông báo protobuf khác chứ không phải kiểu dữ liệu nguyên gốc, chẳng hạn như chuỗi. Bạn cũng có thể cập nhật trực tiếp các trường:

campaign.manual_cpc.enhanced_cpc_enabled = True

Điều 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 khi bật 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 cpc nâng cao? Để thực hiện việc này, bạn cần sao chép một tệp thực thể trống của lớp trên 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 API sử dụng mẫu này, bạn có thể xác minh rằng bạn đang đặt đối tượng thông báo trống một cách chính xác 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 phải tự thêm trường này vào dữ liệu của đối tượng yêu cầu update_mask. 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 trường được đặt rõ ràng thành đối tượng trống và 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")