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óre nie muszą być ustawione, na przykład campaign.manual_cpc
.
Ustawienie tych pól jest ważne, ponieważ informuje interfejs API, którą strategię ustalania stawek ma zastosować w danej kampanii, ale jeśli komunikaty są puste, nie jest to intuicyjne.
Podczas aktualizowania pola campaign.name
, które jest ciągiem znaków, ustawiamy to pole, aktualizując je bezpośrednio, tak jakby było to zwykłe pole atrybutu obiektu Pythona:
campaign.name = "Test campaign value"
campaign.manual_cpc
jest polem zagnieżdżonym, co oznacza, że zawiera inny komunikat protokołu, a nie typ podstawowy, taki jak ciąg znaków. Możesz też zaktualizować pola bezpośrednio:
campaign.manual_cpc.enhanced_cpc_enabled = True
Dowiesz się z interfejsu API, że ta kampania ma strategię ustalania stawek manual_cpc
z włączonym Ulepszonym CPC.
Co jednak, jeśli chcesz użyć manual_cpm
, który jest pusty? Czy manual_cpc
bez włączania Ulepszonego CPC? Aby to zrobić, skopiuj do kampanii osobne, puste wystąpienie klasy, np.:
client = GoogleAdsClient.load_from_storage()
empty_cpm = client.get_type('ManualCpm')
client.copy_from(campaign.manual_cpm, empty_cpm)
Zwróć uwagę, jak parametr manual_cpm
jest określony w przypadku 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 żądania do interfejsu API, które korzysta z tego wzorca, możesz sprawdzić, czy prawidłowo ustawiasz pusty obiekt wiadomości, włączając rejestrowanie i sprawdzając ładunek żądania.
Na koniec musisz ręcznie dodać to pole do update_mask
obiektu żądania. Pomocnik maski pola nie ma mechanizmu, który pozwalałby odróżnić pole, które zostało wyraźnie ustawione jako pusty obiekt, od pola, które nie zostało skonfigurowane.
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")