تغییرات انبوه

برای تغییر دادن چندین نوع منبع در یک درخواست یا ارسال همه تغییرات به یک نقطه پایانی یکپارچه، از GoogleAdsService.Mutate استفاده کنید. برای مشاهده فهرست کامل عملیات پشتیبانی‌شده، به مرجع MutateOperation مراجعه کنید.

عملیات تغییریافته

هر MutateGoogleAdsRequest یک MutateOperation تکراری را در فیلد mutate_operations خود می‌پذیرد:

  • عملیات تغییر منبع: هر ورودی می‌تواند یک عملیات create، update، یا remove را برای یک نوع منبع مشخص کند.
  • عملیات کنش: هر ورودی می‌تواند عملیات کنشی را نیز مشخص کند، مانند book_campaigns_operation یا quote_campaigns_operation.

برای ایجاد نهادهای وابسته (مانند پویش و گروه آگهی) در یک فراخوانی 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): عملیات را ازنظر وجود خطا بررسی می‌کند بدون اینکه تغییرات را در حساب اعمال کند:
    • عملیات تغییر منبع: فقط خطاهای اعتبارسنجی را برمی‌گرداند و نتایج را حذف می‌کند.
    • عملیات کنش: درصورت موفقیت اعتبارسنجی، نتیجه کنش (مانند quote_campaigns_result یا book_campaigns_result) را برمی‌گرداند؛ اگر خطاهای اعتبارسنجی رخ دهد، نتیجه کنش از MutateOperationResponse حذف می‌شود (اگرچه ممکن است همچنان مظنه در ErrorDetails.reservation_error_details برگردانده شود). توجه داشته باشید که quote_campaigns_operation به validate_only = true و partial_failure = false نیاز دارد.