Đặ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 đặt, chẳng hạn như campaign.manual_cpc. Việc đặt các trường này 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ất định, nhưng sẽ không trực quan khi các 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ực tiếp trường này như thể đây là một thuộc tính đối tượng Python bình thường:

campaign.name = "Test campaign value"

campaign.manual_cpc là một trường lồng ghép, có nghĩa là trường này chứa một thông báo protobuf khác chứ không phải là một loại dữ liệ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 tương ứ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 manual_cpc có bật CPC nâng cao.

Nhưng nếu bạn muốn sử dụng manual_cpm thì trống? 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 bản sao 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 manual_cpm được chỉ định cho đối tượng campaign:

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

Trường manual_cpm đã được thiết lập nhưng không có trường nào trong đó 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 đặt đúng đối tượng thông báo trống 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 trường mặt nạ 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à 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")