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

در Google Ads API برخی از فیلدهای پیام به عنوان اشیاء پیام خالی تعریف می شوند، مانند campaign.manual_cpm ، یا ممکن است فقط دارای فیلدهای اختیاری باشند که نیازی به تنظیم ندارند، به عنوان مثال campaign.manual_cpc . تنظیم این فیلدها برای اینکه به API بگویید از کدام استراتژی پیشنهاد قیمت برای کمپین معین استفاده کند، مهم است، اما زمانی که پیام‌ها خالی هستند، شهودی نیست.

هنگام به روز رسانی فیلد campaign.name که یک رشته است، فیلد را با به روز رسانی مستقیم آن طوری تنظیم می کنیم که گویی یک ویژگی شی معمولی پایتون است:

campaign.name = "Test campaign value"

campaign.manual_cpc یک فیلد تودرتو است، به این معنی که حاوی پیام پروتوباف دیگری است و نه یک نوع اولیه، مانند یک رشته. همچنین می توانید فیلدهای آن را مستقیماً به روز کنید:

campaign.manual_cpc.enhanced_cpc_enabled = True

این به API می‌گوید که این کمپین دارای یک استراتژی پیشنهاد قیمت manual_cpc با فعال کردن CPC بهبودیافته است.

اما اگر بخواهید از manual_cpm استفاده کنید که خالی است چه؟ یا manual_cpc بدون فعال کردن cpc پیشرفته؟ برای انجام این کار باید یک نمونه خالی جداگانه از کلاس را در کمپین کپی کنید، به عنوان مثال:

client = GoogleAdsClient.load_from_storage()

empty_cpm = client.get_type('ManualCpm')
client.copy_from(campaign.manual_cpm, empty_cpm)

توجه داشته باشید که manual_cpm چگونه برای شی campaign مشخص شده است:

name {
  value: "Test campaign value"
}
manual_cpm {
}

فیلد manual_cpm تنظیم شده است، اما هیچ کدام از فیلدهای آن مقداری ندارند. هنگام ارسال درخواست به APIهایی که از این الگو استفاده می‌کنند، می‌توانید تأیید کنید که شیء پیام خالی را به درستی تنظیم کرده‌اید، با فعال کردن ورود به سیستم و بررسی بار درخواست.

در نهایت، باید این فیلد را به صورت دستی به update_mask شی درخواست اضافه کنید. کمک کننده فیلد ماسک مکانیزمی برای تعیین تفاوت بین فیلدی که به صراحت روی یک شی خالی تنظیم شده است و فیلدی که تنظیم نشده است ندارد.

from google.api_core.protobuf_helpers import field_mask

campaign_operation.create = campaign
campaign_operation.update_mask = field_mask(None, campaign)
# Here we manually add the "manual_cpm" field
campaign_operation.update_mask.append("manual_cpm")