বাল্ক মিউটেট

একটিমাত্র অনুরোধে একাধিক রিসোর্স টাইপ পরিবর্তন করতে অথবা সমস্ত পরিবর্তন একটি সমন্বিত এন্ডপয়েন্টে পাঠাতে, 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 ), যাতে অ্যাড গ্রুপ অপারেশনটি একই অনুরোধে এটিকে রেফারেন্স করতে পারে।

পাইথন

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}")

রুবি

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 প্রয়োজন।