ফিল্ড মাস্ক ব্যবহার করে আপডেট

Google Ads API-এ, ফিল্ড মাস্ক ব্যবহার করে আপডেট করা হয়। ফিল্ড মাস্ক আপনি আপডেটের সাথে পরিবর্তন করতে চান এমন সমস্ত ক্ষেত্র তালিকাভুক্ত করে এবং যে কোনও নির্দিষ্ট ক্ষেত্র যা ফিল্ড মাস্কে নেই তা উপেক্ষা করা হয়, এমনকি সার্ভারে পাঠানো হলেও।

ফিল্ডমাস্ক ইউটিল

ফিল্ড মাস্ক তৈরি করার প্রস্তাবিত উপায় হল আমাদের অন্তর্নির্মিত ফিল্ড মাস্ক ইউটিলিটি ব্যবহার করা যা অনেক নির্দিষ্ট বিবরণ লুকিয়ে রাখে এবং সত্তার ক্ষেত্রে আপনার করা পরিবর্তনগুলি পর্যবেক্ষণ করে স্বয়ংক্রিয়ভাবে ফিল্ড মাস্ক তৈরি করতে দেয়।

একটি প্রচারাভিযান আপডেট করার জন্য আপনি কীভাবে একটি ফিল্ড মাস্ক তৈরি করতে পারেন তা এখানে:

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 ফিল্ড আপডেট করার সময় যা কোনো সাবফিল্ডের সাথে সংজ্ঞায়িত করা হয়নি, একটি ফিল্ড মাস্ক তৈরি করতে FieldMaskUtil ব্যবহার করুন, যেমনটি আগে উপস্থাপিত হয়েছে।

সংজ্ঞায়িত সাবফিল্ড সহ বার্তা ক্ষেত্র

একটি 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

MaximizeConversions বিডিং কৌশলে target_cpa_micros ফিল্ডটি কীভাবে সঠিকভাবে সাফ করা যায় তা নিম্নলিখিত কোডটি দেখায়।

# 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 ক্ষেত্রটি সাফ করার জন্য বিডিং কৌশল আপডেট করে না