ضبط كائنات الرسائل الفارغة كحقول

في Google Ads API، تكون بعض حقول الرسائل محددة كعناصر رسائل فارغة، مثل campaign.manual_cpm، أو قد تحتوي فقط على حقول اختيارية لا تحتاج إلى ضبط، على سبيل المثال campaign.manual_cpc. من المهم ضبط هذه الحقول لإخبار واجهة برمجة التطبيقات باستراتيجية عروض الأسعار التي يجب استخدامها في حملة معيّنة، ولكن ليس من السهل تنفيذ ذلك عندما تكون الرسائل فارغة.

عند تعديل الحقل campaign.name، وهو سلسلة، نحدّد الحقل من خلال تعديله مباشرةً كما لو كان سمة كائن Python عاديًا:

campaign.name = "Test campaign value"

campaign.manual_cpc هو حقل مدمج، أي أنه يحتوي على رسالة Protobuf أخرى وليس من النوع الأولي، مثل سلسلة. يمكنك تعديل حقوله مباشرةً أيضًا:

campaign.manual_cpc.enhanced_cpc_enabled = True

سيؤدي ذلك إلى إعلام واجهة برمجة التطبيقات بأنّ هذه الحملة لها استراتيجية عروض أسعار بقيمة manual_cpc مع تفعيل تكلفة النقرة المحسّنة.

ماذا لو أردت استخدام manual_cpm، وهو فارغ؟ أو manual_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، ولكن لا يتضمن أي من حقوله قيمًا. وعند إرسال طلب إلى واجهة برمجة التطبيقات التي تستخدم هذا النمط، يمكنك التحقّق من إعداد كائن الرسالة الفارغ بشكل صحيح من خلال تفعيل التسجيل وفحص حمولة الطلب.

أخيرًا، عليك إضافة هذا الحقل يدويًا إلى عنصر الطلب 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")