बल्क में बदलाव

एक ही अनुरोध में कई तरह के संसाधनों में बदलाव करने या सभी बदलावों को एक ही यूनीफ़ाइड एंडपॉइंट पर भेजने के लिए, GoogleAdsService.Mutate का इस्तेमाल करें. काम करने वाले सभी ऑपरेशनों की पूरी सूची देखने के लिए, MutateOperation रेफ़रंस देखें.

बदलाव करने से जुड़ी कार्रवाइयां

हर MutateGoogleAdsRequest, अपने mutate_operations फ़ील्ड में दोहराए गए MutateOperation को स्वीकार करता है:

  • संसाधन में बदलाव करने की कार्रवाइयां (सभी वर्शन के लिए उपलब्ध): हर एंट्री में, एक संसाधन टाइप के लिए एक create, update या remove कार्रवाई तय की जा सकती है.
  • कार्रवाई से जुड़ी कार्रवाइयां (v23 और इसके बाद के वर्शन): हर एंट्री में कार्रवाई से जुड़ी कोई कार्रवाई भी तय की जा सकती है. जैसे, book_campaigns_operation या quote_campaigns_operation (v22 में, MutateOperation सिर्फ़ संसाधन में बदलाव करने से जुड़ी कार्रवाइयों के साथ काम करता है).

एक ही GoogleAdsService.Mutate कॉल में, एक-दूसरे पर निर्भर रहने वाली इकाइयां (जैसे, कैंपेन और विज्ञापन ग्रुप) बनाने के लिए, दो MutateOperation एंट्री बनाएं. इनमें से एक में CampaignOperation और दूसरी में AdGroupOperation शामिल हो. कैंपेन को नेगेटिव आईडी (जैसे, customers/CUSTOMER_ID/campaigns/-1) वाला अस्थायी संसाधन का नाम असाइन करें, ताकि विज्ञापन ग्रुप ऑपरेशन, एक ही अनुरोध में इसे रेफ़रंस के तौर पर इस्तेमाल कर सके:

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

एटॉमिसिटी और कुछ हद तक फ़ेल होना

डिफ़ॉल्ट रूप से, GoogleAdsService.Mutate अनुरोध में मौजूद कार्रवाइयां एक साथ पूरी होती हैं. इसका मतलब है कि सभी कार्रवाइयां एक साथ पूरी होती हैं या किसी भी कार्रवाई में गड़बड़ी होने पर पूरा अनुरोध पूरा नहीं होता है.

अलग-अलग संसाधन सेवाओं की तरह, यह एंडपॉइंट इन विकल्पों के साथ काम करता है:

  • कुछ कार्रवाइयां पूरी नहीं हुईं (partial_failure = true): यह फ़ंक्शन, मान्य कार्रवाइयों को पूरा करता है और partial_failure_error में पूरी नहीं हुई कार्रवाइयों के लिए गड़बड़ियां दिखाता है.
  • पुष्टि करने का मोड (validate_only = true): यह मोड, खाते में बदलाव किए बिना गड़बड़ियों के लिए कार्रवाइयों की जांच करता है:
    • संसाधन में बदलाव करने की कार्रवाइयां: सिर्फ़ पुष्टि से जुड़ी गड़बड़ियां दिखाता है और नतीजे नहीं दिखाता.
    • कार्रवाई से जुड़े ऑपरेशन (v23 और इसके बाद के वर्शन): पुष्टि होने पर, कार्रवाई का नतीजा (जैसे कि quote_campaigns_result या book_campaigns_result) दिखाता है. अगर पुष्टि करने में गड़बड़ियां होती हैं, तो कार्रवाई का नतीजा MutateOperationResponse में नहीं दिखता. हालांकि, ErrorDetails.reservation_error_details में अब भी कोटेशन दिख सकता है. ध्यान दें कि quote_campaigns_operation के लिए validate_only = true और partial_failure = false ज़रूरी हैं.