ใน Google Ads API การอัปเดตจะทำโดยใช้มาสก์ช่อง รายการมาสก์ของช่อง ช่องทั้งหมดที่คุณตั้งใจจะเปลี่ยนแปลงในการอัปเดต และช่องที่ระบุ ที่ไม่ได้อยู่ในฟิลด์มาสก์จะถูกละเว้น แม้ว่าจะส่งถึงเซิร์ฟเวอร์ก็ตาม
ยูทิลิตี FieldMasks
วิธีที่แนะนำสำหรับการสร้างมาสก์ของช่องคือการใช้มาสก์ของช่องในตัว
ยูทิลิตี
(FieldMasks
),
ให้คุณสร้างฟิลด์มาสก์จากออบเจ็กต์ที่ถูกดัดแปลง แทนที่จะสร้าง
ตั้งแต่ต้น
ตัวอย่างการอัปเดตแคมเปญมีดังนี้
my $campaign = Google::Ads::GoogleAds::V17::Resources::Campaign->new({
resourceName =>
Google::Ads::GoogleAds::V17::Utils::ResourceNames::campaign(
$customer_id, $campaign_id
),
status => PAUSED,
networkSettings =>
Google::Ads::GoogleAds::V17::Resources::NetworkSettings->new({
targetSearchNetwork => "false"
})
});
my $campaign_operation =
Google::Ads::GoogleAds::V17::Services::CampaignService::CampaignOperation->new({
update => $campaign,
updateMask => all_set_fields_of($campaign)
});
ตัวอย่างนี้สร้างออบเจ็กต์ Campaign
ก่อนโดยตั้งชื่อทรัพยากร
โดยใช้ยูทิลิตี ResourceNames
เพื่อให้ API ทราบว่า
แคมเปญที่จะอัปเดต
ตัวอย่างนี้ใช้
FieldMasks::all_set_fields_of()
ในการสร้างมาสก์ฟิลด์ที่แจกแจง
ตั้งค่าฟิลด์ จากนั้นคุณจะส่งต่อมาสก์ที่ส่งคืนไปยังการเรียกใช้การอัปเดตได้โดยตรง
FieldMasks::all_set_fields_of()
เป็นวิธีการอำนวยความสะดวกสำหรับ
FieldMasks::field_mask()
โดยจะเปรียบเทียบออบเจ็กต์ที่คุณส่งกับออบเจ็กต์ว่างของคลาสเดียวกัน ดังนั้นในส่วน
ด้านบน คุณสามารถใช้
field_mask(Google::Ads::GoogleAds::V17::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
ซึ่งมี 3 ส่วน ได้แก่
target_cpa_micros
, cpc_bid_ceiling_micros
และ cpc_bid_floor_micros
); หรือ
พวกเขาไม่สามารถมีข้อมูลใดๆ เลย (เช่น ManualCpm
)
ช่องออบเจ็กต์ที่ไม่มีช่องย่อยที่กำหนด
ช่องออบเจ็กต์ใน Perl มีค่าเท่ากับ MESSAGE
Protobuf ในไคลเอ็นต์
ไลบรารีที่ทำงานบน gRPC เมื่ออัปเดตช่องออบเจ็กต์ที่ไม่ได้กำหนด
กับฟิลด์ย่อย ให้ใช้ยูทิลิตี FieldMasks เพื่อสร้างฟิลด์มาสก์ เช่น
ที่อธิบายไว้ข้างต้น
ช่องออบเจ็กต์ที่มีช่องย่อยที่กำหนดไว้
เมื่ออัปเดตฟิลด์ออบเจ็กต์ที่กําหนดด้วยฟิลด์ย่อยโดยไม่มีฟิลด์ที่ชัดเจน
ตั้งค่าฟิลด์ย่อยในข้อความนั้น คุณต้องเพิ่มฟิลด์
ฟิลด์ย่อยของออบเจ็กต์ mutable ใน FieldMask
ซึ่งคล้ายกับตัวอย่างด้านบน
ซึ่งจะสร้างฟิลด์มาสก์ใหม่ตั้งแต่ต้น
ตัวอย่างหนึ่งที่พบบ่อยคือการอัปเดตกลยุทธ์การเสนอราคาของแคมเปญโดยไม่ตั้งค่า
เกี่ยวกับกลยุทธ์การเสนอราคาใหม่ ตัวอย่างด้านล่างแสดงวิธี
อัปเดตแคมเปญให้ใช้ฟังก์ชัน
กลยุทธ์การเสนอราคา MaximizeConversions
โดยไม่ตั้งค่าฟิลด์ย่อยในกลยุทธ์การเสนอราคา
ในกรณีนี้ การใช้เมธอด all_set_fields_of()
และ field_mask()
ของเมธอด
ยูทิลิตี FieldMasks ไม่บรรลุเป้าหมายที่ตั้งใจไว้
ตัวอย่างต่อไปนี้จะสร้างมาสก์ฟิลด์ที่มี
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::V17::Resources::Campaign->new({
resourceName =>
Google::Ads::GoogleAds::V17::Utils::ResourceNames::campaign(
$customer_id, $campaign_id
),
maximizeConversions =>
Google::Ads::GoogleAds::V17::Resources::MaximizeConversions->new()
});
# Constructs an operation, using the FieldMasks' all_set_fields_of utility to
# derive the update mask. The field mask will include 'maximize_conversions',
# which will produce a FieldMaskError.FIELD_HAS_SUBFIELDS error.
my $campaign_operation =
Google::Ads::GoogleAds::V17::Services::CampaignService::CampaignOperation->new({
update => $campaign,
updateMask => all_set_fields_of($campaign)
});
# Sends the operation in a mutate request that will result 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::V17::Resources::Campaign->new({
resourceName => Google::Ads::GoogleAds::V17::Utils::ResourceNames::campaign(
$customer_id, $campaign_id
)
});
# 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.
# 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
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::V17::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::V17::Resources::Campaign->new({
resourceName => Google::Ads::GoogleAds::V17::Utils::ResourceNames::campaign(
$customer_id, $campaign_id
),
maximizeConversions => Google::Ads::GoogleAds::V17::Resources::MaximizeConversions->new({
targetCpaMicros => 0
})
});
# Constructs an operation, using the FieldMasks' all_set_fields_of utility to
# derive the update mask, which will include 'maximize_conversions.target_cpa_micros'.
my $campaign_operation =
Google::Ads::GoogleAds::V17::Services::CampaignService::CampaignOperation->new({
update => $campaign,
updateMask => all_set_fields_of($campaign)
});
โปรดทราบว่าคุณสามารถล้างช่องที่มีช่องย่อยที่ซ้อนกันได้โดยการล้างแต่ละฟิลด์ ฟิลด์ย่อยแต่ละรายการ ดังที่แสดงในฟิลด์ออบเจ็กต์ที่มีการกำหนด ช่องย่อย