在 Google Ads API 中,部分訊息欄位會定義為空白訊息物件,例如 campaign.manual_cpm
,或是可能只有不需要設定的選用欄位,例如 campaign.manual_cpc
。設定這些欄位很重要,可讓 API 知道要為指定廣告活動使用哪種出價策略,但如果訊息為空白,就不是那麼直覺。
更新 campaign.name
欄位 (字串) 時,我們會直接更新欄位,就像更新一般 Python 物件屬性一樣:
campaign.name = "Test campaign value"
campaign.manual_cpc
是巢狀欄位,表示它包含另一個 protobuf 訊息,而非字串等原始型別。您也可以直接更新其欄位:
campaign.manual_cpc.enhanced_cpc_enabled = True
這會告知 API,這個廣告活動的出價策略為manual_cpc
,且已啟用成本效益管理系統。
但如果想使用空白的 manual_cpm
呢?或者不啟用成本效益管理系統?manual_cpc
如要這麼做,您需要將類別的另一個空白例項複製到廣告活動,例如:
client = GoogleAdsClient.load_from_storage()
empty_cpm = client.get_type('ManualCpm')
client.copy_from(campaign.manual_cpm, empty_cpm)
請注意 manual_cpm
如何為 campaign
物件指定:
name {
value: "Test campaign value"
}
manual_cpm {
}
已設定 manual_cpm
欄位,但其中沒有任何欄位有值。向使用此模式的 API 傳送要求時,您可以啟用記錄並檢查要求酬載,確認您是否正確設定空白訊息物件。
最後,您需要手動將這個欄位新增至要求物件的 update_mask
。欄位遮罩輔助函式無法判斷欄位是明確設為空物件,還是未設定。
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")