En la API de Google Ads, algunos campos de mensaje se definen como objetos de mensaje vacíos.
como campaign.manual_cpm
,
o pueden tener solo campos opcionales que no necesitan establecerse, por ejemplo,
campaign.manual_cpc
Configurar estas opciones
es importante para indicarle a la API qué estrategia de ofertas usar
Campaña, pero no es intuitiva cuando los mensajes están vacíos.
Cuando actualices el campo campaign.name
, que es una cadena, configuramos el campo
actualizándolo directamente como si fuera un atributo normal del objeto 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 cadena. Tú
también puede actualizar sus campos directamente:
campaign.manual_cpc.enhanced_cpc_enabled = True
Esto indicará a la API que esta campaña tiene una estrategia de oferta de manual_cpc
con el CPC avanzado habilitado.
Pero ¿qué sucede si deseas usar manual_cpm
, que está vacío? O manual_cpc
sin habilitar el CPC mejorado? Para ello, deberás copiar una copia separada
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)
Ten en cuenta 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. Al enviar
solicitud a la API que usan este patrón, puedes verificar que estás configurando el
objeto de mensaje vacío de forma correcta habilitando logging e inspeccionando
la carga útil de la solicitud.
Por último, deberás agregar manualmente este campo al objeto de la
update_mask
El ayudante de máscara de campo no tiene un mecanismo para determinar la
diferencia entre un campo que se configuró explícitamente como un objeto vacío y un
que no se ha establecido.
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")