खाली मैसेज ऑब्जेक्ट को फ़ील्ड के तौर पर सेट करना

Google Ads API में, कुछ मैसेज फ़ील्ड को खाली मैसेज ऑब्जेक्ट के तौर पर तय किया गया है, जैसे कि campaign.manual_cpm. इसके अलावा, हो सकता है कि उनमें सिर्फ़ वैकल्पिक फ़ील्ड हों जिन्हें सेट करने की ज़रूरत न हो. उदाहरण के लिए, campaign.manual_cpc. इन फ़ील्ड को सेट करना ज़रूरी है, ताकि एपीआई को यह बताया जा सके कि दिए गए कैंपेन के लिए, बिडिंग की कौनसी रणनीति का इस्तेमाल करना है. हालांकि, मैसेज खाली होने पर, यह आसानी से समझ में नहीं आता.

campaign.name फ़ील्ड को अपडेट करते समय, हम फ़ील्ड को सीधे अपडेट करके सेट करते हैं, जैसे कि यह सामान्य Python ऑब्जेक्ट एट्रिब्यूट हो:

campaign.name = "Test campaign value"

campaign.manual_cpc एक नेस्ट किया गया फ़ील्ड है. इसका मतलब है कि इसमें एक और प्रोटोबस मैसेज है, न कि कोई प्राइमिटिव टाइप, जैसे कि स्ट्रिंग. इसके फ़ील्ड को सीधे अपडेट भी किया जा सकता है:

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)

ध्यान दें कि campaign ऑब्जेक्ट के लिए manual_cpm को कैसे तय किया गया है:

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")