Nell'API Google Ads, alcuni campi dei messaggi sono definiti come oggetti di messaggistica vuoti,
ad esempio campaign.manual_cpm
,
oppure potrebbero avere solo campi facoltativi che non devono essere impostati,
campaign.manual_cpc
. L'impostazione di questi
è importante per indicare all'API quale strategia di offerta utilizzare
ma non è intuitivo quando i messaggi sono vuoti.
Quando aggiorniamo il campo campaign.name
, che è una stringa, impostiamo il campo
aggiornandolo direttamente come se fosse un normale attributo di oggetto Python:
campaign.name = "Test campaign value"
campaign.manual_cpc
è un campo nidificato, ovvero contiene
un altro messaggio protobuf e non un tipo primitivo, come una stringa. Tu
può aggiornare direttamente i campi:
campaign.manual_cpc.enhanced_cpc_enabled = True
Questo indicherà all'API che la campagna ha una strategia di offerta pari a manual_cpc
con il CPC ottimizzato attivato.
E se volessi utilizzare manual_cpm
, che è vuoto? Oppure manual_cpc
senza attivare il CPC ottimizzato? Per farlo dovrai copiare un file
un'istanza vuota della classe nella campagna, ad esempio:
client = GoogleAdsClient.load_from_storage()
empty_cpm = client.get_type('ManualCpm')
client.copy_from(campaign.manual_cpm, empty_cpm)
Nota come viene specificato manual_cpm
per l'oggetto campaign
:
name {
value: "Test campaign value"
}
manual_cpm {
}
Il campo manual_cpm
è impostato, ma nessuno dei suoi campi contiene valori. Durante l'invio
richiesta all'API che utilizza questo pattern, puoi verificare se stai impostando
svuotare correttamente l'oggetto messaggio abilitando logging e ispezionando il
per le richieste di addestramento.
Infine, dovrai aggiungere manualmente questo campo all'oggetto di richiesta
update_mask
. L'helper maschera di campo non ha alcun meccanismo per determinare il
differenza tra un campo che è stato impostato esplicitamente su un oggetto vuoto e un
campo che non è stato impostato.
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")