Trong API Google Ads, một số trường thông báo được xác định là các đối tượng thông báo trống, chẳng hạn như campaign.manual_cpm
hoặc chúng chỉ có thể có các trường không bắt buộc mà bạn không cần đặt, ví dụ: campaign.manual_cpc
.
Việc đặt các trường này là rất quan trọng để cho API biết chiến lược đặt giá thầu nào sẽ sử dụng cho Chiến dịch đã cho, nhưng điều này 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 sẽ đặt trường 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, tức 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 nguyên 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 đối tượng 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
không bật chiến lược cpc nâng cao? Để làm việc này, bạn sẽ cần sao chép một phiên bản 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 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 bạn đang thiết lập đú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 sẽ 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 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")