Configurar objetos de mensaje vacíos como campos

En la API de Google Ads, algunos campos de mensajes se definen como objetos de mensaje vacíos, como campaign.manual_cpm, o pueden tener solo campos opcionales que no necesitan configurarse, por ejemplo, campaign.manual_cpc. Configurar estos campos es importante que le indique a la API qué estrategia de oferta usar para la campaña determinada, pero no es intuitivo cuando los mensajes están vacíos.

Cuando se actualiza el campo campaign.name, que es una string, lo configuramos directamente como si fuera un atributo de objeto normal de Python:

campaign.name = "Test campaign value"

campaign.manual_cpc es un campo anidado, lo que significa que contiene otro mensaje protobuf y no un tipo primitivo, como una string. También puedes actualizar sus campos directamente:

campaign.manual_cpc.enhanced_cpc_enabled = True

Esto le indicará a la API que esta campaña tiene una estrategia de oferta de manual_cpc con el CPC avanzado habilitado.

¿Pero qué pasa si quieres usar manual_cpm, que está vacío? ¿O a manual_cpc sin habilitar el CPC avanzado? Para ello, deberás copiar una instancia vacía de la clase en la campaña, por ejemplo:

client = GoogleAdsClient.load_from_storage()

empty_cpm = client.get_type('ManualCpm')
client.copy_from(campaign.manual_cpm, empty_cpm)

Observa cómo se especifica manual_cpm para el objeto campaign:

name {
  value: "Test campaign value"
}
manual_cpm {
}

El campo manual_cpm está configurado, pero ninguno de sus campos tiene valores. Cuando envías una solicitud a la API que usa este patrón, puedes verificar que configuras el objeto de mensaje vacío correctamente habilitando el registro y inspeccionando la carga útil de la solicitud.