Na API Google Ads, alguns campos de mensagem são usados para indicar uma opção de estratégia de lances para um Campaign.
Eles podem ser:
- Mensagens realmente vazias: por exemplo,
campaign.manual_cpmnão tem subcampos definidos. - Mensagens com campos opcionais: por exemplo,
campaign.manual_cpctem o subcampo opcionalenhanced_cpc_enabled.
Os campos de estratégia de lances em Campaign pertencem a um grupo bidding_strategy oneof. Definir uma nova estratégia de lances, como
manual_cpm ou manual_cpc, limpa implicitamente qualquer estratégia de lances
configurada anteriormente naquele grupo oneof.
Para atualizar um campo primitivo como
campaign.name, defina-o diretamente:
campaign.name = "Test campaign value"
Para atualizar uma mensagem aninhada com subcampos definíveis, como campaign.manual_cpc
ao ativar o CPC otimizado, defina-o da seguinte maneira:
campaign.manual_cpc.enhanced_cpc_enabled = True
Definir mensagens realmente vazias
Para usar uma estratégia de lances como manual_cpm, que é uma mensagem
vazia:
- Receba uma instância vazia do tipo de mensagem (
ManualCpm). - Use
client.copy_frompara atribuir essa instância vazia ao campo da campanha. - Adicione manualmente o nome do campo (
manual_cpm) aoupdate_masknoCampaignOperation. O ajudante de máscara de campo não consegue detectar automaticamente que uma mensagem vazia foi definida explicitamente.
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 {
# }
Definir mensagens com subcampos opcionais
Para usar manual_cpc como estratégia de lances sem ativar
enhanced_cpc_enabled, tente uma abordagem semelhante a
ManualCpm. No entanto, como ManualCpc tem
subcampos, adicionar manual_cpc ao update_mask resulta em um
erro FieldMaskError.FIELD_HAS_SUBFIELDS. A API
requer mais especificidade quando uma mensagem na máscara tem subcampos.
Para definir campaign.manual_cpc corretamente e garantir que enhanced_cpc_enabled
permaneça indefinido:
- Instancie um objeto
ManualCpcvazio e copie-o paracampaign.manual_cpcusandoclient.copy_from. - Adicione manualmente o caminho a cada subcampo mutável de
ManualCpcaoupdate_masknoCampaignOperation. Nesse caso, o subcampo relevante é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.
Ao enviar solicitações usando esses padrões, é possível verificar o payload ativando o registro em log e inspecionando a solicitação.