Establece objetos de mensaje vacíos como campos

En la API de Google Ads, algunos campos de mensajes se utilizan para indicar una elección de estrategia de ofertas para una campaña. Estos pueden ser los siguientes:

Para actualizar un campo primitivo como campaign.name, configúralo directamente:

campaign.name = "Test campaign value"

Para actualizar un mensaje anidado con subcampos configurables, como campaign.manual_cpc cuando habilitas el CPC avanzado, configúralo de la siguiente manera:

campaign.manual_cpc.enhanced_cpc_enabled = True

Cómo establecer mensajes verdaderamente vacíos

Para usar una estrategia de ofertas como manual_cpm, que es un mensaje vacío, haz lo siguiente:

  1. Obtén una instancia vacía del tipo de mensaje (ManualCpm).
  2. Usa client.copy_from para asignar esta instancia vacía al campo de la campaña.
  3. Agrega manualmente el nombre del campo (manual_cpm) a update_mask en CampaignOperation. El asistente de máscara de campo no puede detectar automáticamente que se estableció explícitamente un mensaje vacío.
client = GoogleAdsClient.load_from_storage()
# Assume 'campaign' is an existing Campaign object you are updating.

# 1. Get an empty ManualCpm type
empty_cpm = client.get_type('ManualCpm')
# 2. Copy it to the campaign's manual_cpm field
client.copy_from(campaign.manual_cpm, empty_cpm)

# 3. Manually add "manual_cpm" to the update_mask.
from google.api_core.protobuf_helpers import field_mask
campaign_operation = client.get_type('CampaignOperation')
campaign_operation.update = campaign
campaign_operation.update_mask = field_mask(None, campaign)
campaign_operation.update_mask.paths.append("manual_cpm")

# The resulting proto sent to the API will include:
# manual_cpm {
# }

Establece mensajes con subcampos opcionales

Para usar manual_cpc como estrategia de ofertas sin habilitar enhanced_cpc_enabled, puedes probar un enfoque similar a ManualCpm. Sin embargo, como ManualCpc tiene subcampos, agregar manual_cpc a update_mask genera un error de FieldMaskError.FIELD_HAS_SUBFIELDS. La API requiere más especificidad cuando un mensaje en la máscara tiene subcampos.

Para establecer campaign.manual_cpc correctamente y garantizar que enhanced_cpc_enabled permanezca sin establecer, haz lo siguiente:

  1. Crea una instancia de un objeto ManualCpc vacío y asígnalo a campaign.manual_cpc.
  2. Agrega manualmente la ruta de acceso a cada subcampo mutable de ManualCpc a update_mask en CampaignOperation. En este caso, el subcampo pertinente es enhanced_cpc_enabled.
client = GoogleAdsClient.load_from_storage()
# Assume 'campaign' is an existing Campaign object you are updating.

# 1. Instantiate and assign an empty ManualCpc
campaign.manual_cpc = client.get_type('ManualCpc')

# 2. Manually add the subfield path to the update_mask.
from google.api_core.protobuf_helpers import field_mask
campaign_operation = client.get_type('CampaignOperation')
campaign_operation.update = campaign
campaign_operation.update_mask = field_mask(None, campaign)

# For ManualCpc, because it has subfields, you MUST specify the subfield
# path in the update_mask. This tells the API you are updating something
# within manual_cpc. By not setting enhanced_cpc_enabled on the campaign
# object, it defaults to false.
campaign_operation.update_mask.paths.append("manual_cpc.enhanced_cpc_enabled")

# The update_mask paths will include: ['manual_cpc.enhanced_cpc_enabled']
# This correctly signals to the API that ManualCpc is the chosen strategy,
# with enhanced_cpc_enabled in its default state.

Cuando envíes solicitudes con estos patrones, puedes verificar la carga útil habilitando el registro y, luego, inspeccionando la solicitud.