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")