将空消息对象设置为字段

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