توده جهش می یابد

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

عملیات جهش

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

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