Définir des objets de message vides en tant que champs

Dans l'API Google Ads, certains champs de message sont utilisés pour indiquer un choix de stratégie d'enchères pour un Campaign. Il peut s'agir de :

Notez que les champs de stratégie d'enchères sur Campaign appartiennent à un groupe bidding_strategy oneof. Si vous définissez une nouvelle stratégie d'enchères, comme manual_cpm ou manual_cpc, toute stratégie d'enchères précédemment configurée dans ce groupe oneof est automatiquement supprimée.

Pour mettre à jour un champ primitif tel que campaign.name, définissez-le directement :

campaign.name = "Test campaign value"

Pour mettre à jour un message imbriqué avec des sous-champs définissables, comme campaign.manual_cpc lors de l'activation du CPC optimisé, définissez-le comme suit :

campaign.manual_cpc.enhanced_cpc_enabled = True

Définir des messages réellement vides

Pour utiliser une stratégie d'enchères comme manual_cpm, qui est un message vide :

  1. Obtenez une instance vide du type de message (ManualCpm).
  2. Utilisez client.copy_from pour attribuer cette instance vide au champ de la campagne.
  3. Ajoutez manuellement le nom du champ (manual_cpm) à update_mask sur CampaignOperation. L'outil d'assistance pour le masque de champ ne peut pas détecter automatiquement qu'un message vide a été défini de manière explicite.
from google.ads.googleads import util
from google.ads.googleads.client import GoogleAdsClient
from google.api_core.protobuf_helpers import field_mask

client = GoogleAdsClient.load_from_storage()
# Assume 'campaign' is an existing Campaign object you are updating.

# 1. Get an empty ManualCpm type.
empty_cpm = client.get_type("ManualCpm")

# 2. Copy it to the campaign's manual_cpm field.
client.copy_from(campaign.manual_cpm, empty_cpm)

# 3. Create the operation and manually add "manual_cpm" to the update_mask.
campaign_operation = client.get_type("CampaignOperation")
client.copy_from(campaign_operation.update, campaign)
client.copy_from(
    campaign_operation.update_mask,
    field_mask(None, util.convert_proto_plus_to_protobuf(campaign)),
)
campaign_operation.update_mask.paths.append("manual_cpm")

# The resulting proto sent to the API will include:
# manual_cpm {
# }

Définir des messages avec des sous-champs facultatifs

Pour utiliser manual_cpc comme stratégie d'enchères sans activer enhanced_cpc_enabled, vous pouvez essayer une approche semblable à ManualCpm. Toutefois, comme ManualCpc comporte des sous-champs, l'ajout de manual_cpc à update_mask génère une erreur FieldMaskError.FIELD_HAS_SUBFIELDS. L'API nécessite plus de spécificité lorsqu'un message dans le masque comporte des sous-champs.

Pour définir correctement campaign.manual_cpc tout en vous assurant que enhanced_cpc_enabled reste non défini :

  1. Instanciez un objet ManualCpc vide et copiez-le dans campaign.manual_cpc à l'aide de client.copy_from.
  2. Ajoutez manuellement le chemin d'accès à chaque sous-champ mutable de ManualCpc à update_mask sur CampaignOperation. Dans ce cas, le sous-champ concerné est enhanced_cpc_enabled.
from google.ads.googleads import util
from google.ads.googleads.client import GoogleAdsClient
from google.api_core.protobuf_helpers import field_mask

client = GoogleAdsClient.load_from_storage()
# Assume 'campaign' is an existing Campaign object you are updating.

# 1. Copy an empty ManualCpc object into campaign.manual_cpc.
client.copy_from(campaign.manual_cpc, client.get_type("ManualCpc"))

# 2. Manually add the subfield path to the update_mask.
campaign_operation = client.get_type("CampaignOperation")
client.copy_from(campaign_operation.update, campaign)
client.copy_from(
    campaign_operation.update_mask,
    field_mask(None, util.convert_proto_plus_to_protobuf(campaign)),
)

# For ManualCpc, because it has subfields, you must specify the subfield
# path in the update_mask. This tells the API you are updating something
# within manual_cpc. By not setting enhanced_cpc_enabled on the campaign
# object, it defaults to false.
campaign_operation.update_mask.paths.append("manual_cpc.enhanced_cpc_enabled")

# The update_mask paths will include: ['manual_cpc.enhanced_cpc_enabled']
# This correctly signals to the API that ManualCpc is the chosen strategy,
# with enhanced_cpc_enabled in its default state.

Lorsque vous envoyez des requêtes à l'aide de ces modèles, vous pouvez vérifier la charge utile en activant la journalisation et en inspectant la requête.