تنظیم اشیای پیام خالی به‌عنوان فیلد

در «میانای برنامه‌سازی کاربردی Google Ads»، برخی‌از فیلدهای پیام برای نشان دادن انتخاب استراتژی پیشنهاد قیمت برای Campaign استفاده می‌شوند. این موارد می‌تواند شامل این‌ها باشد:

  • پیام‌های واقعاً خالی: برای مثال، campaign.manual_cpm زیرفیلد تعریف‌شده‌ای ندارد.
  • پیام‌های دارای فیلدهای اختیاری: برای مثال، campaign.manual_cpc دارای زیرفیلد اختیاری enhanced_cpc_enabled است.

توجه داشته باشید که فیلدهای استراتژی پیشنهاد قیمت در Campaign متعلق به گروه bidding_strategy oneof است. تنظیم استراتژی پیشنهاد قیمت جدیدی مانند manual_cpm یا manual_cpc به‌طور ضمنی هرگونه استراتژی پیشنهاد قیمت پیکربندی‌شده قبلی را در آن گروه oneof پاک می‌کند.

برای به‌روزرسانی فیلد ابتدایی مثل campaign.name، آن را مستقیماً تنظیم می‌کنید:

campaign.name = "Test campaign value"

برای به‌روزرسانی پیام تودرتو با زیرفیلدهای قابل‌تنظیم، مثل campaign.manual_cpc هنگام فعال کردن «کلیک‌بهای بهبودیافته»، آن را به‌صورت زیر تنظیم کنید:

campaign.manual_cpc.enhanced_cpc_enabled = True

تنظیم پیام‌های واقعاً خالی

برای استفاده از استراتژی پیشنهاد قیمت مانند manual_cpm، که یک پیام خالی است:

  1. نمونه خالی از نوع پیام (ManualCpm) را دریافت کنید.
  2. از client.copy_from برای اختصاص دادن این نمونه خالی به فیلد پویش استفاده کنید.
  3. نام فیلد (manual_cpm) را به‌صورت دستی به update_mask در CampaignOperation اضافه کنید. یاری‌رسان پوشش فیلد نمی‌تواند به‌طور خودکار تشخیص دهد که پیام خالی به‌طور صریح تنظیم شده است.
from google.ads.googleads import util
from google.ads.googleads.client import GoogleAdsClient
from google.api_core.protobuf_helpers import field_mask

client = GoogleAdsClient.load_from_storage()
# Assume 'campaign' is an existing Campaign object you are updating.

# 1. Get an empty ManualCpm type.
empty_cpm = client.get_type("ManualCpm")

# 2. Copy it to the campaign's manual_cpm field.
client.copy_from(campaign.manual_cpm, empty_cpm)

# 3. Create the operation and manually add "manual_cpm" to the update_mask.
campaign_operation = client.get_type("CampaignOperation")
client.copy_from(campaign_operation.update, campaign)
client.copy_from(
    campaign_operation.update_mask,
    field_mask(None, util.convert_proto_plus_to_protobuf(campaign)),
)
campaign_operation.update_mask.paths.append("manual_cpm")

# The resulting proto sent to the API will include:
# manual_cpm {
# }

تنظیم پیام‌ها با زیرفیلدهای اختیاری

برای استفاده از manual_cpc به‌عنوان استراتژی پیشنهاد قیمت بدون فعال کردن enhanced_cpc_enabled، می‌توانید رویکردی مشابه ManualCpm را امتحان کنید. بااین‌حال، چون ManualCpc دارای زیرفیلد است، افزودن manual_cpc به update_mask منجر به خطای FieldMaskError.FIELD_HAS_SUBFIELDS می‌شود. وقتی پیامی در پوشش دارای زیرفیلد باشد، «میانای برنامه‌سازی کاربردی» به جزئیات بیشتری نیاز دارد.

برای تنظیم صحیح campaign.manual_cpc درحالی‌که مطمئن می‌شوید enhanced_cpc_enabled تنظیم نشده باقی می‌ماند:

  1. شیء ManualCpc خالی را نمونه‌سازی کنید و آن را بااستفاده از client.copy_from در campaign.manual_cpc کپی کنید.
  2. مسیر هر فیلد فرعی تغییرپذیر ManualCpc را به‌صورت دستی به update_mask در CampaignOperation اضافه کنید. در این مورد، زیرفیلد مربوطه enhanced_cpc_enabled است.
from google.ads.googleads import util
from google.ads.googleads.client import GoogleAdsClient
from google.api_core.protobuf_helpers import field_mask

client = GoogleAdsClient.load_from_storage()
# Assume 'campaign' is an existing Campaign object you are updating.

# 1. Copy an empty ManualCpc object into campaign.manual_cpc.
client.copy_from(campaign.manual_cpc, client.get_type("ManualCpc"))

# 2. Manually add the subfield path to the update_mask.
campaign_operation = client.get_type("CampaignOperation")
client.copy_from(campaign_operation.update, campaign)
client.copy_from(
    campaign_operation.update_mask,
    field_mask(None, util.convert_proto_plus_to_protobuf(campaign)),
)

# For ManualCpc, because it has subfields, you must specify the subfield
# path in the update_mask. This tells the API you are updating something
# within manual_cpc. By not setting enhanced_cpc_enabled on the campaign
# object, it defaults to false.
campaign_operation.update_mask.paths.append("manual_cpc.enhanced_cpc_enabled")

# The update_mask paths will include: ['manual_cpc.enhanced_cpc_enabled']
# This correctly signals to the API that ManualCpc is the chosen strategy,
# with enhanced_cpc_enabled in its default state.

هنگام ارسال درخواست بااستفاده از این الگوها، می‌توانید با فعال کردن ثبت گزارش و بازرسی درخواست، بار مفید را درستی‌سنجی کنید.