Google Ads API-তে, ফিল্ড মাস্ক ব্যবহার করে আপডেট করা হয়। ফিল্ড
মাস্কে (google.protobuf.FieldMask) snake_case-এর ফিল্ড পাথের তালিকা থাকে
যা আপনি আপডেটের মাধ্যমে পরিবর্তন করতে চান। ফিল্ড মাস্কে নেই এমন কোনও নির্দিষ্ট ফিল্ড
সার্ভারে পাঠানো হলেও তা উপেক্ষা করা হয়।
FieldMasks ইউটিলিটি
Java ক্লায়েন্ট লাইব্রেরিতে ফিল্ড মাস্ক জেনারেট করার জন্য সাজেস্ট করা পদ্ধতি হল
বিল্ট-ইন FieldMasks ইউটিলিটি ক্লাস ব্যবহার করা, যা আপনাকে স্ক্র্যাচ থেকে তৈরি করার পরিবর্তে
পরিবর্তিত অবজেক্ট থেকে ফিল্ড মাস্ক জেনারেট করতে দেয়।
ক্যাম্পেন আপডেট করার একটি উদাহরণ এখানে দেওয়া হল:
// Creates a Campaign object with the proper resource name and any other
// changes.
Campaign campaign =
Campaign.newBuilder()
.setResourceName(ResourceNames.campaign(customerId, campaignId))
.setStatus(CampaignStatus.PAUSED)
.build();
// Constructs an operation that updates the campaign, using the
// FieldMasks.allSetFieldsOf utility to derive the update mask. This mask tells
// the Google Ads API which attributes of the campaign you want to change.
CampaignOperation operation =
CampaignOperation.newBuilder()
.setUpdate(campaign)
.setUpdateMask(FieldMasks.allSetFieldsOf(campaign))
.build();
// Sends the operation in a mutate request.
MutateCampaignsResponse response =
campaignServiceClient.mutateCampaigns(
customerId.toString(), Collections.singletonList(operation));
এই উদাহরণে প্রথমে একটি খালি Campaign বিল্ডার তৈরি করা হয় এবং এর রিসোর্স
নাম সেট করা হয় যাতে API বুঝতে পারে কোন ক্যাম্পেন আপডেট করা হচ্ছে।
উদাহরণটি তারপরে ক্যাম্পেনে FieldMasks.allSetFieldsOf() কল করে
অটোমেটিক একটি ফিল্ড মাস্ক তৈরি করে যা সমস্ত সেট ফিল্ড গণনা করে। আপনি সরাসরি আপডেট কলে
ফেরত আসা মাস্ক পাস করতে পারবেন।
আপনাকে যদি আগে থেকে থাকা অবজেক্ট নিয়ে কাজ করতে হয় এবং কয়েকটি ফিল্ড আপডেট করতে হয়, তাহলে
FieldMasks.compare() এইভাবে ব্যবহার করুন:
// Assumes existingCampaign was retrieved from a previous API call.
// Creates a new campaign based on the existing campaign and updates the
// campaign by setting its status to paused.
Campaign campaignToUpdate =
existingCampaign.toBuilder()
.setStatus(CampaignStatus.PAUSED)
.build();
// Constructs an operation that updates the campaign, using the
// FieldMasks.compare utility to derive the update mask. This mask tells the
// Google Ads API which attributes of the campaign you want to change.
CampaignOperation operation =
CampaignOperation.newBuilder()
.setUpdate(campaignToUpdate)
.setUpdateMask(FieldMasks.compare(existingCampaign, campaignToUpdate))
.build();
// Sends the operation in a mutate request.
MutateCampaignsResponse response =
campaignServiceClient.mutateCampaigns(
customerId.toString(), Collections.singletonList(operation));
শুরু থেকে ফিল্ড মাস্ক তৈরি করতে, একটি FieldMask
বিল্ডার তৈরি করুন এবং আপনি পরিবর্তন করতে চান এমন প্রতিটি ফিল্ডের snake_case নাম যোগ করুন:
FieldMask fieldMask =
FieldMask.newBuilder()
.addPaths("status")
.addPaths("name")
.build();
মেসেজ ফিল্ড এবং তার সাবফিল্ড আপডেট করা
MESSAGE ফিল্ডে সাবফিল্ড থাকতে পারে (যেমন
MaximizeConversions, যাতে
target_cpa_micros, cpc_bid_ceiling_micros এবং cpc_bid_floor_micros আছে) অথবা
এতে কোনও সাবফিল্ড নাও থাকতে পারে (যেমন ManualCpm)।
কোনও নির্দিষ্ট সাবফিল্ড ছাড়া মেসেজ ফিল্ড
কোনও সাবফিল্ডের সাথে সংজ্ঞায়িত নয় এমন MESSAGE ফিল্ড আপডেট করার সময়, ফিল্ড মাস্ক জেনারেট করতে
FieldMasks ইউটিলিটি ব্যবহার করুন, যেমনটি পূর্ববর্তী
বিভাগে বর্ণনা করা হয়েছে।
নির্দিষ্ট সাবফিল্ড সহ মেসেজ ফিল্ড
কোনও MESSAGE ফিল্ড আপডেট করার সময়, যদি সেই মেসেজে কোনও সাবফিল্ড স্পষ্টভাবে সেট না করেই
সাবফিল্ড সংজ্ঞায়িত করা থাকে, তাহলে আপনাকে ম্যানুয়ালি প্রতিটি
পরিবর্তনযোগ্য MESSAGE সাবফিল্ড FieldMask-এ যোগ করতে হবে, যা স্ক্র্যাচ থেকে ফিল্ড
মাস্ক তৈরি করার মতোই।
একটি সাধারণ উদাহরণ হল, নতুন বিডিং স্ট্র্যাটেজিতে কোনও ফিল্ড সেট না করেই ক্যাম্পেনের বিডিং স্ট্র্যাটেজি (oneof ফিল্ড
campaign_bidding_strategy) আপডেট করা। বিডিং স্ট্র্যাটেজিতে কোনও সাবফিল্ড সেট না করেই MaximizeConversions বিডিং স্ট্র্যাটেজি ব্যবহার করার জন্য কীভাবে ক্যাম্পেন আপডেট করতে হয় তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে।
এই ক্ষেত্রে, FieldMasks-এর allSetFieldsOf() এবং compare() পদ্ধতি
ব্যবহার করে কাঙ্খিত লক্ষ্য অর্জন করা যায় না।
নিম্নলিখিত উদাহরণটি একটি ফিল্ড মাস্ক তৈরি করে যার মধ্যে
maximize_conversions অন্তর্ভুক্ত থাকে। তবে, Google Ads API-তে আপডেট মাস্কে সাবফিল্ড আছে এমন টপ-লেভেল মেসেজ
পাথ ব্যবহার করা যায় না (সাবফিল্ড যাতে ভুল করে মুছে না যায় তার জন্য) এবং এটি FieldMaskError.FIELD_HAS_SUBFIELDS
সমস্যা দেখায়।
// Creates a campaign with the proper resource name and an empty
// MaximizeConversions field.
Campaign campaign =
Campaign.newBuilder()
.setResourceName(ResourceNames.campaign(customerId, campaignId))
.setMaximizeConversions(MaximizeConversions.newBuilder().build())
.build();
// Constructs an operation using FieldMasks.allSetFieldsOf to derive the update
// mask. The field mask includes 'maximize_conversions', which produces a
// FieldMaskError.FIELD_HAS_SUBFIELDS error.
CampaignOperation operation =
CampaignOperation.newBuilder()
.setUpdate(campaign)
.setUpdateMask(FieldMasks.allSetFieldsOf(campaign))
.build();
// Sends the operation in a mutate request that results in a
// FieldMaskError.FIELD_HAS_SUBFIELDS error because empty MESSAGE fields with
// subfields cannot be included directly in a field mask.
MutateCampaignsResponse response =
campaignServiceClient.mutateCampaigns(
customerId.toString(), Collections.singletonList(operation));
নিম্নলিখিত উদাহরণ থেকে বোঝা যায় যে কোনও সাবফিল্ড সেট না করেই
MaximizeConversions বিডিং স্ট্র্যাটেজি ব্যবহার করার জন্য কীভাবে সঠিকভাবে ক্যাম্পেন আপডেট করতে হয়।
স্ট্যান্ডার্ড ও পোর্টফোলিও বিডিং স্ট্র্যাটেজি অ্যাসাইন করা
সম্পর্কে আরও জানুন।
// Creates a Campaign object with the proper resource name.
Campaign campaign =
Campaign.newBuilder()
.setResourceName(ResourceNames.campaign(customerId, campaignId))
.build();
// Creates a field mask from the campaign and adds the mutable subfield
// ('maximize_conversions.target_cpa_micros') on the MaximizeConversions
// bidding strategy to the field mask. Because this subfield is included in the
// field mask while excluded from the campaign object, the Google Ads API
// switches the campaign's bidding strategy oneof to MaximizeConversions with
// target_cpa_micros unset.
FieldMask fieldMask =
FieldMasks.allSetFieldsOf(campaign).toBuilder()
.addPaths("maximize_conversions.target_cpa_micros")
.build();
// Creates an operation to update the campaign with the specified fields.
CampaignOperation operation =
CampaignOperation.newBuilder()
.setUpdate(campaign)
.setUpdateMask(fieldMask)
.build();
ফিল্ডে থাকা কন্টেন্ট মুছে দিন
কিছু ফিল্ড স্পষ্টভাবে মুছে ফেলা যেতে পারে। আগের উদাহরণের মতো, আপনাকে
অবশ্যই এই ফিল্ডগুলি ফিল্ড মাস্কে যোগ করতে হবে এবং মেসেজ অবজেক্টে
সেগুলি সেট না করে রেখে দিতে হবে। যেমন, ধরুন আপনার একটি ক্যাম্পেন আছে যা
MaximizeConversions বিডিং স্ট্র্যাটেজি ব্যবহার করে এবং target_cpa_micros ফিল্ডটি
0-এর থেকে বেশি ভ্যালু দিয়ে সেট করা আছে।
নিম্নলিখিত কোড রান করে, কিন্তু maximize_conversions.target_cpa_micros প্রত্যাশা অনুযায়ী
মুছে যাবে না:
// Creates a campaign with the proper resource name and a MaximizeConversions
// object with target_cpa_micros set to 0L.
Campaign campaign =
Campaign.newBuilder()
.setResourceName(ResourceNames.campaign(customerId, campaignId))
.setMaximizeConversions(
MaximizeConversions.newBuilder().setTargetCpaMicros(0L).build())
.setStatus(CampaignStatus.PAUSED)
.build();
// Constructs an operation using FieldMasks.allSetFieldsOf to derive the
// update mask.
CampaignOperation operation =
CampaignOperation.newBuilder()
.setUpdate(campaign)
.setUpdateMask(FieldMasks.allSetFieldsOf(campaign))
.build();
// Sends the operation in a mutate request that does not clear the field
// cleanly.
MutateCampaignsResponse response =
campaignServiceClient.mutateCampaigns(
customerId.toString(), Collections.singletonList(operation));
পরের উদাহরণে দেখানো হয়েছে যে কীভাবে MaximizeConversions বিডিং স্ট্র্যাটেজিতে
target_cpa_micros ফিল্ড সঠিকভাবে খালি করতে হয়।
// Creates a Campaign object with the proper resource name.
Campaign campaign =
Campaign.newBuilder()
.setResourceName(ResourceNames.campaign(customerId, campaignId))
.build();
// Constructs a field mask from the campaign and adds the
// 'maximize_conversions.target_cpa_micros' field to the field mask, which
// clears this field from the bidding strategy without impacting any other
// fields on the bidding strategy.
FieldMask fieldMask =
FieldMasks.allSetFieldsOf(campaign).toBuilder()
.addPaths("maximize_conversions.target_cpa_micros")
.build();
// Creates an operation to update the campaign with the specified field.
CampaignOperation operation =
CampaignOperation.newBuilder()
.setUpdate(campaign)
.setUpdateMask(fieldMask)
.build();