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,updateveyaremoveişlemi belirtebilir. - İşlem operasyonları: Her giriş,
book_campaigns_operationveyaquote_campaigns_operationgibi 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 vepartial_failure_erroriç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_resultveyabook_campaigns_result) döndürür. Doğrulama hataları oluşursa işlem sonucuMutateOperationResponseöğesinden çıkarılır (ancakErrorDetails.reservation_error_detailsiçinde bir fiyat teklifi döndürülebilir).quote_campaigns_operationiçinvalidate_only = truevepartial_failure = falsegerektiğini unutmayın.