將空白訊息物件設為欄位

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

請注意,campaign 物件如何指定 manual_cpm

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