Toplu mutasyonlar

Tek bir istekte birden fazla kaynak türünü değiştirmek veya tüm değişiklikleri birleştirilmiş bir uç noktaya göndermek için GoogleAdsService.Mutate yöntemini kullanın. Desteklenen işlemlerin tam listesi için MutateOperation referansına bakın.

Değişiklik işlemleri

Her MutateGoogleAdsRequest, mutate_operations alanında yinelenen bir MutateOperation kabul eder:

  • Kaynak değiştirme işlemleri: Her giriş, bir kaynak türü için tek bir create, update veya remove işlemi belirtebilir.
  • İşlem operasyonları: Her giriş, book_campaigns_operation veya quote_campaigns_operation gibi bir işlem operasyonu da belirtebilir.

Tek bir GoogleAdsService.Mutate çağrısında bağımlı varlıklar (ör. kampanya ve reklam grubu) oluşturmak için iki MutateOperation girişi (biri CampaignOperation, diğeri AdGroupOperation içeren) oluşturun. Kampanyaya negatif kimlikli (ör. customers/CUSTOMER_ID/campaigns/-1) geçici bir kaynak adı atayın. Böylece reklam grubu işlemi, aynı istekte bu adı referans alabilir:

Python

import uuid

campaign_budget_service = client.get_service("CampaignBudgetService")
campaign_service = client.get_service("CampaignService")
googleads_service = client.get_service("GoogleAdsService")

campaign_budget_resource_name = campaign_budget_service.campaign_budget_path(
    customer_id, budget_id
)
temp_campaign_resource_name = campaign_service.campaign_path(customer_id, "-1")

mutate_operation1 = client.get_type("MutateOperation")
campaign = mutate_operation1.campaign_operation.create
campaign.resource_name = temp_campaign_resource_name
campaign.name = f"Bulk Mutate Campaign #{uuid.uuid4()}"
campaign.advertising_channel_type = (
    client.enums.AdvertisingChannelTypeEnum.SEARCH
)
campaign.status = client.enums.CampaignStatusEnum.PAUSED
campaign.manual_cpc = client.get_type("ManualCpc")
campaign.campaign_budget = campaign_budget_resource_name
campaign.contains_eu_political_advertising = (
    client.enums.EuPoliticalAdvertisingStatusEnum.DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING
)

mutate_operation2 = client.get_type("MutateOperation")
ad_group = mutate_operation2.ad_group_operation.create
ad_group.name = "Bulk Mutate Ad Group"
ad_group.campaign = temp_campaign_resource_name
ad_group.status = client.enums.AdGroupStatusEnum.ENABLED

response = googleads_service.mutate(
    customer_id=customer_id,
    mutate_operations=[mutate_operation1, mutate_operation2],
)

for op_response in response.mutate_operation_responses:
    result_type = op_response._pb.WhichOneof("response")
    result = getattr(op_response, result_type)
    print(f"Created {result_type}: {result.resource_name}")

Ruby

campaign_budget_resource_name =
  client.path.campaign_budget(customer_id, budget_id)
temp_campaign_resource_name =
  client.path.campaign(customer_id, -1)

mutate_operation1 = client.operation.mutate do |m|
  m.campaign_operation = client.operation.create_resource.campaign do |c|
    c.resource_name = temp_campaign_resource_name
    c.name = "Bulk Mutate Campaign #{(Time.new.to_f * 1000).to_i}"
    c.advertising_channel_type = :SEARCH
    c.status = :PAUSED
    c.manual_cpc = client.resource.manual_cpc
    c.campaign_budget = campaign_budget_resource_name
    c.contains_eu_political_advertising = :DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING
  end
end

mutate_operation2 = client.operation.mutate do |m|
  m.ad_group_operation = client.operation.create_resource.ad_group do |ag|
    ag.name = "Bulk Mutate Ad Group"
    ag.campaign = temp_campaign_resource_name
    ag.status = :ENABLED
  end
end

response = client.service.google_ads.mutate(
  customer_id: customer_id,
  mutate_operations: [mutate_operation1, mutate_operation2]
)

response.mutate_operation_responses.each do |op_response|
  result = op_response.send(op_response.response)
  puts "Created #{op_response.response}: #{result.resource_name}"
end

Atomiklik ve kısmi hata

Varsayılan olarak, bir GoogleAdsService.Mutate isteğindeki işlemler atomik olarak yürütülür: Tüm işlemler birlikte başarılı olur veya herhangi bir işlem hata içeriyorsa isteğin tamamı başarısız olur.

Bireysel kaynak hizmetleri gibi bu uç nokta da aşağıdaki seçenekleri destekler:

  • Kısmi hata (partial_failure = true): Geçerli işlemleri işler ve partial_failure_error içindeki başarısız işlemler için hata döndürür.
  • Doğrulama modu (validate_only = true): Hesapta değişiklik yapmadan işlemleri hatalara karşı kontrol eder:
    • Kaynak değiştirme işlemleri: Yalnızca doğrulama hatalarını döndürür ve sonuçları atlar.
    • İşlem operasyonları: Doğrulama başarılı olduğunda işlem sonucunu (ör. quote_campaigns_result veya book_campaigns_result) döndürür. Doğrulama hataları oluşursa işlem sonucu MutateOperationResponse öğesinden çıkarılır (ancak ErrorDetails.reservation_error_details içinde bir fiyat teklifi döndürülebilir). quote_campaigns_operation için validate_only = true ve partial_failure = false gerektiğini unutmayın.