Đặ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, ví dụ: 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 thông báo trống.

Khi cập nhật trường campaign.name (là một chuỗi), chúng tôi đặ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à 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 là loại dữ liệu nguyên gốc, chẳng hạn như một chuỗi. Bạn cũng có thể cập nhật các trường trực tiếp:

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, giá trị này trống thì sao? Hoặc manual_cpc nếu bạn không bật cpc nâng cao? Để làm 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 manual_cpm được chỉ định cho đối tượng campaign:

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

Trường manual_cpm đã được đặt, nhưng không trường nào của trường này 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 bạn đ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 tự thêm trường này vào update_mask của đối tượng yêu cầu. Trình trợ giúp mặt nạ trường (field mask) 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 một đố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")