برای تغییر چندین نوع منبع در یک درخواست واحد یا ارسال همه تغییرات به یک نقطه پایانی واحد، از 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دارد.