Ustawianie pustych obiektów wiadomości jako pól

W interfejsie Google Ads API niektóre pola wiadomości są zdefiniowane jako puste obiekty wiadomości. na przykład campaign.manual_cpm, lub mogą zawierać tylko pola opcjonalne, których nie trzeba ustawiać, na przykład campaign.manual_cpc Ustawiam te opcje jest ważne, aby wskazać interfejsowi API, którą strategię ustalania stawek zastosować w przypadku danego Kampania, ale nie jest to intuicyjne, gdy komunikaty są puste.

Podczas aktualizowania pola campaign.name, które jest ciągiem znaków, ustawiamy pole przez zaktualizowanie go bezpośrednio w taki sposób, jakby był to zwykły atrybut obiektu Python:

campaign.name = "Test campaign value"

campaign.manual_cpc jest polem zagnieżdżonym, czyli zawiera inny komunikat buforowania, a nie typ podstawowy, np. ciąg znaków. Ty może również bezpośrednio aktualizować swoje pola:

campaign.manual_cpc.enhanced_cpc_enabled = True

Informuje to interfejs API, że strategia ustalania stawek w tej kampanii to manual_cpc z włączonym Ulepszonym CPC.

A jeśli chcesz użyć kolumny manual_cpm, która jest pusta? lub manual_cpc bez włączania Ulepszonego CPC? Aby to zrobić, musisz skopiować osobny puste wystąpienie klasy w kampanii, np.:

client = GoogleAdsClient.load_from_storage()

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

Zwróć uwagę na sposób określania pola manual_cpm dla obiektu campaign:

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

Pole manual_cpm jest ustawione, ale żadne z jego pól nie ma wartości. Podczas wysyłania do interfejsu API korzystającego z tego wzorca, możesz sprawdzić, czy ustawiasz prawidłowo pusty obiekt wiadomości, włączając logging i sprawdzając ładunku żądania.

Na koniec musisz ręcznie dodać to pole do update_mask Asystent maski pola nie ma mechanizmu do określania różnicę między polem, które zostało jawnie ustawione na pusty obiekt, a wartością które nie zostało ustawione.

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