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

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 बेहतर 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")