في Google Ads API، يتم إجراء التعديلات باستخدام قناع حقل. تسرد قناع الحقول جميع الحقول التي تريد تغييرها من خلال التعديل، وسيتم تجاهل أي حقول محدّدة غير مضمّنة في قناع الحقول، حتى إذا تم إرسالها إلى الخادم.
FieldMaskUtil
إنّ الطريقة المقترَحة لإنشاء أقنعة الحقول هي استخدام أداة قناع الحقل المضمّنة التي تتيح لك إنشاء أقنعة حقول من عنصر معدَّل بدلاً من إنشائها من البداية.
في ما يلي مثال على تعديل حملة:
// Update campaign by setting its status to paused, and "Search network" to false.
Campaign campaignToUpdate = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
Status = CampaignStatus.Paused,
NetworkSettings = new NetworkSettings()
{
TargetSearchNetwork = false
}
};
// Create the operation.
CampaignOperation operation = new CampaignOperation()
{
Update = campaignToUpdate,
UpdateMask = FieldMasks.AllSetFieldsOf(campaignToUpdate)
};
// Update the campaign.
MutateCampaignsResponse response = campaignService.MutateCampaigns(
customerId.ToString(), new CampaignOperation[] { operation });
أولاً، ننشئ كائن Campaign
فارغًا. بعد ذلك، نضبط اسم المورد لكي تتمكّن واجهة برمجة التطبيقات من معرفة الحملة التي نعدّلها بالضبط.
يستخدِم المثال طريقة FieldMasks.AllSetFieldsOf
في الحملة
لإنشاء قناع حقل يُدرِج تلقائيًا جميع الحقول المحدّدة. يمكنك بعد ذلك
تمرير القناع الذي تم إرجاعه مباشرةً إلى طلب التعديل.
في بعض الأحيان، قد تحتاج إلى العمل مع عنصر حالي وتعديل بعض الحقول. في هذه الحالات، عليك تعديل الرمز على النحو التالي:
Campaign existingCampaign;
// Obtain existingCampaign from elsewhere.
...
// Create a new campaign based off the existing campaign for update.
Campaign campaignToUpdate = new Campaign(existingCampaign);
// Update campaign by setting its status to paused, and "Search network" to
// false.
campaignToUpdate.Status = CampaignStatus.Paused;
campaignToUpdate.NetworkSettings = new NetworkSettings()
{
TargetSearchNetwork = false
}
// Create the operation.
CampaignOperation operation = new CampaignOperation()
{
Update = campaignToUpdate,
UpdateMask = FieldMasks.FromChanges(existingCampaign, campaignToUpdate)
};
لإنشاء قناع حقل من الصفر، عليك أولاً إنشاء عنصر
FieldMask
، ثم إنشاء صفيف مملوء بأسماء جميع الحقول التي تريد
تغييرها، وأخيراً إلحاق محتويات الصفيف بحقل Path
في قناع الحقل.
FieldMask fieldMask = new FieldMask();
fieldMask.Paths.AddRange(new string[] { "status", "name" });
تعديل حقول الرسائل وحقولها الفرعية
يمكن أن تحتوي حقول MESSAGE
على حقول فرعية (مثل
MaximizeConversions
التي تحتوي على ثلاثة حقول:
target_cpa_micros
،
cpc_bid_ceiling_micros
، وcpc_bid_floor_micros
)، أو يمكن ألا تحتوي على أي حقول فرعية
إطلاقًا (مثل ManualCpm
).
حقول الرسائل التي لا تحتوي على حقول فرعية محدّدة
عند تعديل حقل MESSAGE
غير محدّد بأي حقول فرعية، استخدِم
FieldMasks
لإنشاء قناع حقل، كما هو موضّح أعلاه.
حقول الرسائل التي تحتوي على حقول فرعية محدّدة
عند تعديل حقل MESSAGE
تم تحديده باستخدام حقول فرعية بدون
ضبط أي من الحقول الفرعية في تلك الرسالة بشكل صريح، عليك
إضافة كل حقل فرعي من حقول MESSAGE
القابلة للتغيير يدويًا إلىFieldMask
، تمامًا مثل المثال أعلاه الذي ينشئ قناع حقل من الصفر.
ومن الأمثلة الشائعة على ذلك تعديل استراتيجية عروض أسعار الحملة بدون ضبط أيّ
من الحقول في استراتيجية عروض الأسعار الجديدة. يوضّح المثال التالي كيفية
تعديل حملة لاستخدام استراتيجية عروض الأسعار
MaximizeConversions
بدون ضبط أيّ من الحقول الفرعية في استراتيجية عروض الأسعار.
في هذه الحالة، لا يؤدي استخدام الطريقتَين AllSetFieldsOf()
وFromChanges()
من
FieldMasks
إلى تحقيق الهدف المقصود.
ينشئ المثال التالي قناع حقل يتضمّن
maximize_conversions
. ومع ذلك، لا تسمح Google Ads API بهذا السلوك لمنع محو الحقول عن طريق الخطأ، وتُنشئ خطأ FieldMaskError.FIELD_HAS_SUBFIELDS
.
// Creates a campaign with the proper resource name and an empty
// MaximizeConversions field.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
MaximizeConversions = new MaximizeConversions()
};
// Constructs an operation, using the FieldMasks' AllSetFieldsOf utility to
// derive the update mask. The field mask will include 'maximize_conversions`,
// which will produce a FieldMaskError.FIELD_HAS_SUBFIELDS error.
CampaignOperation operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = FieldMasks.AllSetFieldsOf(campaign)
};
// 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.
MutateCampaignsResponse response = campaignService.MutateCampaigns(
customerId.ToString(), new CampaignOperation[] { operation });
يوضّح المثال التالي كيفية تعديل حملة بشكلٍ سليم لاستخدام استراتيجية عروض أسعار
MaximizeConversions
بدون ضبط أيّ من حقولها الفرعية.
// Creates a Campaign object with the proper resource name.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
};
// Creates a field mask from the existing campaign and adds all of the fields
// on the MaximizeConversions bidding strategy to the field mask. Because these
// fields are included in the field mask but excluded from the campaign object,
// the Google Ads API will set the campaign's bidding strategy to a
// MaximizeConversions object with none of its subfields set.
FieldMask fieldMask = FieldMasks.AllSetFieldsOf(campaign);
// 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.
//
// Learn more about standard and portfolio bidding strategies here:
// https://developers.google.com/google-ads/api/docs/campaigns/bidding/assign-strategies
fieldMask.Paths.AddRange(new string[] {
"maximize_conversions.target_cpa_micros",
});
// Creates an operation to update the campaign with the specified fields.
CampaignOperation operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = fieldMask
};
محو الحقول
يمكن محو بعض الحقول صراحةً. على غرار المثال أعلاه، عليك
إضافة هذه الحقول صراحةً إلى قناع الحقول. على سبيل المثال، لنفترض أنّ لديك
حملة تستخدِم استراتيجية عروض أسعار MaximizeConversions
وأنّه تم ضبط الحقل
target_cpa_micros
على قيمة أكبر من 0.
يتم تشغيل الرمز التالي، ولكن لن تتم إضافة maximize_conversions.target_cpa_micros
إلى قناع الحقل، وبالتالي لن يتم إجراء أي تغييرات على حقل
target_cpa_micros
:
// Creates a campaign with the proper resource name and a MaximizeConversions
// object with target_cpa_micros set to 0.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
MaximizeConversions = new MaximizeConversions()
{
TargetCpaMicros = 0
}
};
// Constructs an operation, using the FieldMasks' AllSetFieldsOf utility to
// derive the update mask. However, the field mask will NOT include
// 'maximize_conversions.target_cpa_micros'.
CampaignOperation operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = FieldMasks.AllSetFieldsOf(campaign)
};
// Sends the operation in a mutate request that will succeed but will NOT update
// the 'target_cpa_micros' field because 'maximize_conversions.target_cpa_micros'
// was not included in the field mask.
MutateCampaignsResponse response = campaignService.MutateCampaigns(
customerId.ToString(), new CampaignOperation[] { operation });
يوضّح المثال التالي كيفية محو الحقل target_cpa_micros
بشكل صحيح في استراتيجية عروض الأسعار MaximizeConversions
.
// Creates a Campaign object with the proper resource name.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
};
// Constructs a field mask from the existing campaign and adds the
// 'maximize_conversions.target_cpa_micros' field to the field mask, which will
// clear this field from the bidding strategy without impacting any other fields
// on the bidding strategy.
FieldMask fieldMask = FieldMasks.AllSetFieldsOf(campaign);
fieldMask.Paths.AddRange(new string[] {
"maximize_conversions.target_cpa_micros",
});
// Creates an operation to update the campaign with the specified field.
CampaignOperation operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = fieldMask
};
يُرجى العِلم أنّ المثال "غير الصحيح" أعلاه يعمل على النحو المطلوب للحقول التي
يتم تعريفها على أنّها optional
في Google Ads API
protocol buffers
.
ولكن بما أنّ
target_cpa_micros
ليس حقل optional
، فإنّ المثال "غير الصحيح" لا يعدّل
استراتيجية عروض الأسعار لمحو حقل target_cpa
.