फ़ील्ड मास्क का इस्तेमाल करके अपडेट करने की सुविधा

Google Ads API में, फ़ील्ड मास्क का इस्तेमाल करके अपडेट किए जाते हैं. फ़ील्ड मास्क सूचियां वे सभी फ़ील्ड जिन्हें आपको अपडेट के साथ बदलना है. साथ ही, तय किए गए वे फ़ील्ड भी शामिल करें जो फ़ील्ड मास्क में नहीं हैं उन्हें अनदेखा किया जाता है, भले ही उन्हें सर्वर पर भेजा गया हो.

FieldMaskUtil

हमारा सुझाव है कि आप फ़ील्ड मास्क जनरेट करने के लिए, पहले से मौजूद फ़ील्ड मास्क का इस्तेमाल करें यह सुविधा बहुत सारी खास जानकारी छिपा देती है और फ़ील्ड जनरेट करने में मदद करती है मास्क अपने-आप, इकाई के फ़ील्ड में किए जाने वाले बदलावों की निगरानी करते हैं.

कैंपेन अपडेट करने के लिए, फ़ील्ड मास्क जनरेट करने का तरीका यहां बताया गया है:

campaign = client.resource.campaign
campaign.resource_name = client.path.campaign(customer_id, campaign_id)

mask = client.field_mask.with campaign do
  campaign.status = :PAUSED
  campaign.network_settings = client.resource.network_settings do |ns|
    ns.target_search_network = false
  end
end

कोड पहले एक खाली कैंपेन ऑब्जेक्ट बनाता है. इसके बाद, अपडेट किए जा रहे कैंपेन के बारे में एपीआई को बताने के लिए, उसका संसाधन नाम सेट करता है.

इस उदाहरण में, कैंपेन शुरू करने के लिए, client.field_mask.with तरीके का इस्तेमाल किया गया है जिसमें अपडेट शामिल हैं. इस ब्लॉक के आखिर में, यूटिलिटी ब्लॉक के बाद के कैंपेन की मौजूदा स्थिति की तुलना, ब्लॉक करने से पहले के कैंपेन की स्थिति, और अपने-आप एक फ़ील्ड बनाता है बदले गए फ़ील्ड की सूची बनाने वाला मास्क. आप वह फ़ील्ड मास्क कार्रवाई करते समय, इसे म्यूटेट कॉल के लिए इस तरह बनाएं:

operation = client.operation.campaign
operation.update = campaign
operation.update_mask = mask

यह तरीका तब अपनाने की सलाह दी जाती है, जब कोई मुश्किल काम हो रहा हो और हर चरण पर पूरा कंट्रोल चाहिए. हालांकि, ज़्यादातर मामलों में, रूबी लाइब्रेरी की आसान सुविधा:

operation = client.operation.update_resource.campaign do |c|
  c.status = :PAUSED
  c.network_settings = client.resource.network_settings do |ns|
    ns.target_search_network = false
  end
end

इस तरीके से अपने-आप एक नया खाली कैंपेन संसाधन बनता है. आपके द्वारा ब्लॉक में किए जाने वाले परिवर्तनों के आधार पर फ़ील्ड मास्क, अपडेट बनाता है कार्रवाई से, update और update_mask के साथ आखिरी कार्रवाई दिखाता है पहले से भरा हुआ है. campaign तरीका का इस्तेमाल करके, कैंपेन को साथ ही, कैंपेन की शुरुआती स्थिति के बारे में भी बताना होगा. यह पैटर्न सभी के लिए काम करता है ऐसे संसाधन जो अपडेट की कार्रवाई का समर्थन करते हैं.

मैन्युअल तरीके से मास्क बनाना

लाइब्रेरी की किसी सुविधा का इस्तेमाल किए बिना, शुरुआत से फ़ील्ड मास्क बनाने के लिए पहले Google::Protobuf::FieldMask बनाएगा, फिर कोई अरे बनाएगा उन सभी फ़ील्ड के नाम डालें जिनमें आपको बदलाव करना है. इसके बाद, आखिर में फ़ील्ड मास्क के path फ़ील्ड को अरे असाइन करें.

mask = Google::Protobuf::FieldMask.new
mask.path = ["status", "name"]

मैसेज फ़ील्ड और उनके सब-फ़ील्ड अपडेट करना

MESSAGE फ़ील्ड में सबफ़ील्ड हो सकते हैं (जैसे कि MaximizeConversions, जिसमें तीन हैं: target_cpa_micros, cpc_bid_ceiling_micros, और cpc_bid_floor_micros) या ऐसा बिलकुल नहीं हो सकता (जैसे कि ManualCpm).

बिना किसी तय सबफ़ील्ड वाले मैसेज फ़ील्ड

किसी सबफ़ील्ड के साथ तय नहीं किए गए MESSAGE फ़ील्ड को अपडेट करते समय, आपको फ़ील्ड मास्क जनरेट करना होगा, जैसा कि पहले बताया गया है.

तय किए गए सबफ़ील्ड वाले मैसेज फ़ील्ड

जब MESSAGE फ़ील्ड को अपडेट किया जाता है, तो उसके बिना सबफ़ील्ड का इस्तेमाल किया जाता है किसी सबफ़ील्ड को साफ़ तौर पर सेट करना हो, तो आपको मैन्युअल तरीके से MESSAGE की हर म्यूटेबल सबफ़ील्ड की FieldMask की वैल्यू सबमिट करें, जो ने पहले उदाहरण दिया था, जिसने शुरुआत से फ़ील्ड मास्क बनाया था.

सेटिंग के बिना किसी अभियान की बोली-प्रक्रिया कार्यनीति अपडेट करना एक सामान्य उदाहरण है बिडिंग की नई रणनीति से जुड़े किसी भी फ़ील्ड पर जाएं. नीचे दिए गए उदाहरण में, बिडिंग की रणनीति पर कोई भी सब-फ़ील्ड सेट किए बिना, MaximizeConversions बिडिंग की रणनीति का इस्तेमाल करने के लिए, कैंपेन को अपडेट करने का तरीका बताया गया है.

इस उदाहरण के लिए, FieldMaskUtil की बिल्ट-इन तुलना का इस्तेमाल करने से तय लक्ष्य को हासिल करने में कैसे मदद मिलती है.

यह कोड, ऐसा फ़ील्ड मास्क जनरेट करता है जिसमें maximize_conversions शामिल है. हालांकि, Google Ads API इस तरह के व्यवहार की अनुमति नहीं देता, ताकि गलती से फ़ील्ड को साफ़ कर देता है और FieldMaskError.FIELD_HAS_SUBFIELDS गड़बड़ी.

# Creates a campaign with the proper resource name.
campaign = client.resource.campaign do |c|
  c.resource_name = client.path.campaign(customer_id, campaign_id)
end

# Update the maximize conversions field within the update block, so it's
# captured in the field mask
operation = client.operation.update_resource.campaign(campaign) do |c|
  c.maximize_conversions = client.resource.maximize_conversions
end

# Sends the operation in a mutate request that will result in a
# FieldMaskError.FIELD_HAS_SUBFIELDS error because empty MESSAGE fields cannot
# be included in a field mask.
response = client.service.campaign.mutate_campaigns(
  customer_id: customer_id,
  operations: [operation],
)

नीचे दिया गया कोड बताता है कि कैंपेन को कैसे अपडेट करना है, ताकि MaximizeConversions बिडिंग की रणनीति का कोई भी सबफ़ील्ड सेट नहीं किया गया है.

# Create the operation directly from the campaign's resource name. Don't do
# anything in the block so that the field mask is empty. You could modify other
# fields in this block, just not the message field that is intended to have a
# blank subfield. We'll add that below.
campaign_resource_name = client.path.campaign(customer_id, campaign_id)
operation = client.operation.update_resource.campaign(campaign_resource_name) {}

# Manually add the maximize conversions subfield to the field mask so the API
# knows to clear it.
operation.update_mask.paths << "maximize_conversions.target_cpa_micros"

# This operation succeeds.
response = client.service.campaign.mutate_campaigns(
  customer_id: customer_id,
  operations: [operation],
)

फ़ील्ड खाली किए जा रहे हैं

कुछ फ़ील्ड साफ़ तौर पर मिटाए जा सकते हैं. पिछले उदाहरण की तरह, आपको इन फ़ील्ड को साफ़ तौर पर फ़ील्ड मास्क में जोड़ें. उदाहरण के लिए, मान लें कि आपके पास जो MaximizeConversions बिडिंग की रणनीति का इस्तेमाल करता है और target_cpa_micros फ़ील्ड की वैल्यू, 0 से ज़्यादा है.

यह कोड चलता है. हालांकि, maximize_conversions.target_cpa_micros को फ़ील्ड मास्क में नहीं जोड़ा जाएगा. इसलिए, target_cpa_micros फ़ील्ड में कोई बदलाव नहीं किया जाएगा:

# Create a campaign object representing the campaign you want to change.
campaign = client.resource.campaign do |c|
  c.resource_name = client.path.campaign(customer_id, campaign_id)
end

# The field mask in this operation will include 'maximize_conversions',
# but not 'maximize_conversions.target_cpa_micros', so it will result in an
# error.
operation = client.operation.update_resource.campaign(campaign) do |c|
  c.maximize_conversions = client.resource.maximize_conversions do |mc|
    mc.target_cpa_micros = 0
  end
end

# Operation will fail since field mask is incorrect.
response = client.service.campaign.mutate_campaigns(
  customer_id: customer_id,
  operations: [operation],
end

यह कोड बताता है कि target_cpa_micros को ठीक से कैसे हटाया जा सकता है फ़ील्ड में डालें.MaximizeConversions

# Create a campaign including the maximize conversions fields right away, since
# we're going to manually add them to the field mask.
campaign = client.resource.campaign do |c|
  c.resource_name = client.path.campaign(customer_id, campaign_id)
  c.maximize_conversions = client.resource.maximize_conversions do |mc|
    mc.target_cpa_micros = 0
  end
end

# Create the operation with an empty field mask. You may add a block here with
# other changes that will automatically get added to the field mask.
operation = client.operation.update_resource.campaign(campaign) {}

# Add the field to the field mask so the API knows to clear it.
operation.update_mask.paths << 'maximize_conversions.target_cpa_micros'

# Operation will succeed since we specified the correct field mask.
response = client.service.campaign.mutate_campaigns(
  customer_id: customer_id,
  operations: [operation],
end

ध्यान दें कि "गलत" कोड तय किए गए फ़ील्ड के लिए उम्मीद के मुताबिक काम करता है Google Ads API protocol buffers में optional के तौर पर सबमिट करें. हालांकि, जिस दिन target_cpa_micros है optional फ़ील्ड नहीं, बल्कि "गलत" कोड, बिडिंग को अपडेट नहीं करता target_cpa फ़ील्ड को खाली करने की रणनीति.