ফিল্ড মাস্ক

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

FieldMasks ইউটিলিটি

ফিল্ড মাস্ক তৈরি করার জন্য সাজেস্ট করা পদ্ধতি হল আমাদের বিল্ট-ইন ফিল্ড মাস্ক ইউটিলিটি (FieldMasks) ব্যবহার করা, যা আপনাকে স্ক্র্যাচ থেকে তৈরি করার পরিবর্তে একটি পরিবর্তিত অবজেক্ট থেকে ফিল্ড মাস্ক তৈরি করতে দেয়।

ক্যাম্পেন আপডেট করার একটি উদাহরণ এখানে দেওয়া হল:

use Google::Ads::GoogleAds::Utils::FieldMasks qw(all_set_fields_of field_mask);

my $campaign =
  Google::Ads::GoogleAds::V26::Resources::Campaign->new({
    resourceName =>
      Google::Ads::GoogleAds::V26::Utils::ResourceNames::campaign(
        $customer_id, $campaign_id
      ),
    status => "PAUSED",
    networkSettings =>
      Google::Ads::GoogleAds::V26::Resources::NetworkSettings
      ->new({
        targetSearchNetwork => "false",
      }),
  });

my $campaign_operation =
  Google::Ads::GoogleAds::V26::Services::CampaignService::CampaignOperation
  ->new({
    update     => $campaign,
    updateMask => all_set_fields_of($campaign),
  });

এই উদাহরণে প্রথমে ResourceNames ইউটিলিটি ব্যবহার করে রিসোর্সের নাম সেট করার মাধ্যমে Campaign অবজেক্ট তৈরি করা হয়, যাতে API জানতে পারে কোন ক্যাম্পেন আপডেট করা হচ্ছে।

এই উদাহরণে ক্যাম্পেনে FieldMasks::all_set_fields_of() পদ্ধতি ব্যবহার করা হয় যাতে অটোমেটিক ফিল্ড মাস্ক তৈরি করা যায় যা সব সেট ফিল্ড গণনা করে। তারপর আপনি সরাসরি আপডেট কলে রিটার্ন করা মাস্ক পাস করতে পারবেন।

FieldMasks::all_set_fields_of() হল FieldMasks::field_mask()-এর জন্য একটি সহজ পদ্ধতি। এটি আপনার পাস করা অবজেক্টের সাথে একই ক্লাসের একটি খালি অবজেক্টের তুলনা করে। আগের কোডে, আপনি এগুলিও ব্যবহার করতে পারেন:

field_mask(
  Google::Ads::GoogleAds::V26::Resources::Campaign->new({}),
  $campaign
)

-এর পরিবর্তে all_set_fields_of($campaign) ব্যবহার করুন।

ম্যানুয়ালি মাস্ক তৈরি করুন

শুরু থেকে ফিল্ড মাস্ক তৈরি করতে, প্রথমে একটি Google::Ads::GoogleAds::Common::FieldMask অবজেক্ট তৈরি করুন, তারপর আপনি যেসব ফিল্ড পরিবর্তন করতে চান সেগুলির নাম দিয়ে একটি অ্যারে রেফারেন্স তৈরি করুন এবং শেষে ফিল্ড মাস্কের paths ফিল্ডে অ্যারে রেফারেন্স অ্যাসাইন করুন:

my $field_mask = Google::Ads::GoogleAds::Common::FieldMask->new({
  paths => ["status", "name"],
});

অবজেক্ট ফিল্ড ও তার সাবফিল্ড আপডেট করা

অবজেক্ট ফিল্ডে সাবফিল্ড থাকতে পারে (যেমন MaximizeConversions, যার মধ্যে সাবফিল্ড হিসেবে target_cpa_micros অন্তর্ভুক্ত থাকে) অথবা কোনও সাবফিল্ড নাও থাকতে পারে (যেমন ManualCpm)।

কোনও সাবফিল্ড সংজ্ঞায়িত করা নেই এমন অবজেক্ট ফিল্ড

Perl-এ অবজেক্ট ফিল্ড gRPC-তে চলা ক্লায়েন্ট লাইব্রেরিতে protobuf MESSAGE-এর সমতুল্য। কোনও সাবফিল্ডে সংজ্ঞায়িত করা হয়নি এমন কোনও অবজেক্ট ফিল্ড আপডেট করার সময়, ফিল্ড মাস্ক জেনারেট করতে FieldMasks ইউটিলিটি ব্যবহার করুন, যেমন আগের বিভাগে বর্ণনা করা হয়েছে।

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

কোনও অবজেক্ট ফিল্ড আপডেট করার সময়, যদি সেই মেসেজে সাবফিল্ড স্পষ্টভাবে সেট করা না থাকে, তাহলে আপনাকে FieldMask-এ প্রতিটি পরিবর্তনযোগ্য অবজেক্ট সাবফিল্ড ম্যানুয়ালি যোগ করতে হবে। এটি আগের উদাহরণের মতোই, যেখানে স্ক্র্যাচ থেকে ফিল্ড মাস্ক তৈরি করা হয়েছে।

একটি সাধারণ উদাহরণ হল, নতুন বিডিং স্ট্র্যাটেজির কোনও ফিল্ড সেট না করেই ক্যাম্পেনের বিডিং স্ট্র্যাটেজি আপডেট করা। নিচের উদাহরণে দেখানো হয়েছে যে বিড স্ট্র্যাটেজিতে কোনও সাবফিল্ড সেট না করেই MaximizeConversions বিড স্ট্র্যাটেজি ব্যবহার করার জন্য ক্যাম্পেন কীভাবে আপডেট করতে হয়।

এই ক্ষেত্রে, FieldMasks ইউটিলিটির all_set_fields_of() এবং field_mask() পদ্ধতি ব্যবহার করলে কাঙ্ক্ষিত লক্ষ্য অর্জন করা যায় না।

নিম্নলিখিত উদাহরণটি একটি ফিল্ড মাস্ক তৈরি করে যার মধ্যে maximize_conversions অন্তর্ভুক্ত থাকে। তবে, Google Ads API-তে এই আচরণ অনুমোদিত নয়, এর কারণ হল অসাবধানে ফিল্ড মুছে ফেলা প্রতিরোধ করা এবং এর ফলে একটি FieldMaskError.FIELD_HAS_SUBFIELDS ত্রুটি হয়।

# Creates a campaign with the proper resource name and an empty
# MaximizeConversions field.
my $campaign =
  Google::Ads::GoogleAds::V26::Resources::Campaign->new({
    resourceName =>
      Google::Ads::GoogleAds::V26::Utils::ResourceNames::campaign(
        $customer_id, $campaign_id
      ),
    maximizeConversions =>
      Google::Ads::GoogleAds::V26::Resources::MaximizeConversions
      ->new(),
  });

# Constructs an operation, using the FieldMasks' all_set_fields_of utility to
# derive the update mask. The field mask includes 'maximize_conversions',
# which produces a FieldMaskError.FIELD_HAS_SUBFIELDS error.
my $campaign_operation =
  Google::Ads::GoogleAds::V26::Services::CampaignService::CampaignOperation
  ->new({
    update     => $campaign,
    updateMask => all_set_fields_of($campaign),
  });

# Sends the operation in a mutate request that results in a
# FieldMaskError.FIELD_HAS_SUBFIELDS error because empty object fields cannot
# be included in a field mask.
my $response = $api_client->CampaignService()->mutate({
  customerId => $customer_id,
  operations => [$campaign_operation],
});

নিম্নলিখিত উদাহরণ থেকে বোঝা যায় যে কোনও সাবফিল্ড সেট না করেই MaximizeConversions বিডিং স্ট্র্যাটেজি ব্যবহার করার জন্য কীভাবে সঠিকভাবে ক্যাম্পেন আপডেট করতে হয়।

# Creates a campaign with the proper resource name.
my $campaign =
  Google::Ads::GoogleAds::V26::Resources::Campaign->new({
    resourceName =>
      Google::Ads::GoogleAds::V26::Utils::ResourceNames::campaign(
        $customer_id, $campaign_id
      ),
  });

# Creates a field mask from the existing campaign and adds the mutable subfield
# on the MaximizeConversions bidding strategy to the field mask. Because this
# field is included in the field mask but excluded from the campaign object,
# the Google Ads API sets the campaign's bidding strategy to a
# MaximizeConversions object with none of its subfields set.
# Only include 'maximize_conversions.target_cpa_micros' in the field mask
# as it is the only mutable subfield on MaximizeConversions when used as a
# standard bidding strategy.
#
# See the guide on assigning standard and portfolio bidding strategies
# (/google-ads/api/docs/campaigns/bidding/assign-strategies).
my $field_mask = all_set_fields_of($campaign);
push @{$field_mask->{paths}}, "maximize_conversions.target_cpa_micros";

# Creates an operation to update the campaign with the specified fields.
my $campaign_operation =
  Google::Ads::GoogleAds::V26::Services::CampaignService::CampaignOperation
  ->new({
    update     => $campaign,
    updateMask => $field_mask,
  });

ফিল্ডে থাকা কন্টেন্ট মুছে দিন

আগের উদাহরণে দেখানো ফিল্ড মাস্কে ফিল্ড যোগ করে অথবা ফিল্ডের মান খালি বা অনির্দিষ্ট হিসেবে সেট করে ফিল্ড স্পষ্টভাবে মুছে দেওয়া যায়। যেমন, ধরুন আপনার একটি ক্যাম্পেন আছে যা MaximizeConversions বিডিং স্ট্র্যাটেজি ব্যবহার করে এবং target_cpa_micros ফিল্ডে এমন একটি ভ্যালু সেট করা আছে যা 0-এর থেকে বেশি।

# Creates a campaign with the proper resource name and a MaximizeConversions
# object with target_cpa_micros set to 0.
my $campaign =
  Google::Ads::GoogleAds::V26::Resources::Campaign->new({
    resourceName =>
      Google::Ads::GoogleAds::V26::Utils::ResourceNames::campaign(
        $customer_id, $campaign_id
      ),
    maximizeConversions =>
      Google::Ads::GoogleAds::V26::Resources::MaximizeConversions
      ->new({
        targetCpaMicros => 0,
      }),
  });

# Constructs an operation using all_set_fields_of to derive the update mask,
# which includes 'maximize_conversions.target_cpa_micros'.
my $campaign_operation =
  Google::Ads::GoogleAds::V26::Services::CampaignService::CampaignOperation
  ->new({
    update     => $campaign,
    updateMask => all_set_fields_of($campaign),
  });

মনে রাখবেন, নেস্ট করা সাবফিল্ড সহ ফিল্ড শুধুমাত্র প্রতিটি স্বতন্ত্র সাবফিল্ড মুছে দিয়েই পরিষ্কার করা যেতে পারে, যেমন সংজ্ঞায়িত সাবফিল্ড সহ অবজেক্ট ফিল্ড-এ দেখানো হয়েছে।