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

Google Ads API में, कुछ मैसेज फ़ील्ड का इस्तेमाल, बिडिंग की रणनीति चुनने के लिए किया जाता है 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. CampaignOperation पर मौजूद update_mask में, फ़ील्ड का नाम (manual_cpm) मैन्युअल तरीके से जोड़ें. फ़ील्ड मास्क हेल्पर, इस बात का पता अपने-आप नहीं लगा सकता कि कोई खाली मैसेज साफ़ तौर पर सेट किया गया है.
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 {
# }

वैकल्पिक सबफ़ील्ड वाले मैसेज सेट करना

enhanced_cpc_enabled को चालू किए बिना, manual_cpc को बिडिंग की रणनीति के तौर पर इस्तेमाल करने के लिए, 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. update_mask पर मौजूद CampaignOperation में, ManualCpc के हर ऐसे सबफ़ील्ड का पाथ मैन्युअल तरीके से जोड़ें जिसमें बदलाव किया जा सकता है. इस मामले में, काम का सबफ़ील्ड 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.

इन पैटर्न का इस्तेमाल करके अनुरोध भेजने पर, पेलोड की पुष्टि लॉगिंग चालू करके और अनुरोध की जांच करके की जा सकती है.