Di Google Ads API, pembaruan dilakukan menggunakan mask kolom. Daftar mask kolom semua kolom yang ingin Anda ubah dengan update, serta kolom tertentu yang tidak ada dalam mask kolom akan diabaikan, bahkan jika dikirim ke server.
FieldMaskUtil
Cara yang direkomendasikan untuk membuat mask kolom adalah menggunakan utilitas mask kolom bawaan kami yang menyembunyikan banyak detail spesifik dan memungkinkan Anda membuat mask kolom secara otomatis dengan memantau perubahan yang Anda buat pada kolom entity.
Berikut cara membuat mask kolom untuk memperbarui kampanye:
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
Kode membuat objek Kampanye kosong terlebih dahulu, lalu menetapkan nama resource-nya sebagai memberi tahu API kampanye yang sedang diperbarui.
Contoh ini menggunakan metode client.field_mask.with
pada kampanye untuk memulai
blok yang mencakup pembaruan. Di akhir blok ini, utilitas
membandingkan status kampanye saat ini setelah pemblokiran dengan status
status kampanye sebelum pemblokiran, dan secara otomatis membuat
mask yang menghitung kolom yang diubah. Anda bisa memberikan mask kolom itu ke
operasi saat membangunnya untuk panggilan mutate seperti berikut:
operation = client.operation.campaign
operation.update = campaign
operation.update_mask = mask
Metode ini direkomendasikan ketika Anda membuat operasi yang rumit dan menginginkan kontrol yang baik atas setiap langkah. Namun, untuk sebagian besar kasus, Anda dapat menggunakan utilitas library Ruby yang lebih sederhana:
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
Metode ini secara otomatis membuat aset kampanye kosong baru, konstruksi
mask kolom berdasarkan perubahan yang Anda buat dalam blok, membangun update
operasi, dan menampilkan operasi akhir dengan update
dan update_mask
sudah diisi. Anda juga dapat meneruskan kampanye ke metode campaign
untuk
menentukan status awal kampanye. Pola ini berfungsi untuk semua
resource yang mendukung operasi update.
Membuat mask secara manual
Untuk membuat mask kolom dari awal, tanpa menggunakan utilitas library apa pun, Anda
akan membuat Google::Protobuf::FieldMask
terlebih dahulu, lalu membuat array
diisi dengan nama semua isian
yang ingin Anda ubah, dan terakhir
tetapkan array ke kolom path
mask kolom.
mask = Google::Protobuf::FieldMask.new
mask.path = ["status", "name"]
Memperbarui kolom pesan dan subkolomnya
Kolom MESSAGE
dapat memiliki subkolom (seperti
MaximizeConversions
yang memiliki tiga:
target_cpa_micros
, cpc_bid_ceiling_micros
, dan cpc_bid_floor_micros
), atau
kolom tersebut tidak dapat memiliki subkolom sama sekali (seperti ManualCpm
).
Kolom pesan tanpa subkolom yang ditentukan
Saat memperbarui kolom MESSAGE
yang tidak ditentukan dengan subkolom apa pun, gunakan
FieldMaskUtil untuk membuat mask kolom, seperti yang ditampilkan sebelumnya.
Kolom pesan dengan subkolom yang ditentukan
Saat memperbarui kolom MESSAGE
yang ditentukan dengan subkolom tanpa menetapkan subkolom apa pun secara eksplisit pada pesan tersebut, Anda harus menambahkan setiap subkolom MESSAGE
yang dapat diubah secara manual ke FieldMask
, mirip dengan contoh sebelumnya yang membuat mask kolom dari awal.
Salah satu contoh umum adalah memperbarui strategi bidding kampanye tanpa menetapkan
kolom apa pun pada strategi bidding baru. Contoh berikut
menunjukkan cara memperbarui kampanye untuk menggunakan
Strategi bidding MaximizeConversions
tanpa menetapkan subkolom apa pun pada strategi bidding.
Untuk contoh ini, menggunakan perbandingan bawaan {i>FieldMaskUtil<i} tidak mencapai tujuan yang diinginkan.
Kode berikut menghasilkan mask kolom yang menyertakan maximize_conversions
.
Namun, Google Ads API tidak mengizinkan perilaku ini untuk mencegah
membersihkan {i>field <i}secara tidak sengaja
dan menghasilkan
FieldMaskError.FIELD_HAS_SUBFIELDS
{i>error<i}.
# 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],
)
Kode berikut menunjukkan cara memperbarui kampanye dengan benar untuk menggunakan
MaximizeConversions
strategi bidding tanpa menetapkan subkolomnya.
# 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],
)
Mengosongkan kolom
Beberapa kolom dapat dihapus secara eksplisit. Mirip dengan contoh sebelumnya, Anda harus
secara eksplisit menambahkan kolom
ini ke mask kolom. Misalnya, anggaplah Anda memiliki
kampanye yang menggunakan strategi bidding MaximizeConversions
dan bahwa
Kolom target_cpa_micros
ditetapkan dengan nilai yang lebih besar dari 0
.
Kode berikut berjalan; namun, maximize_conversions.target_cpa_micros
tidak akan ditambahkan ke mask kolom sehingga tidak ada perubahan yang dibuat
Kolom 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
Kode berikut menunjukkan cara menghapus target_cpa_micros
dengan benar
pada strategi bidding MaximizeConversions
.
# 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
Perhatikan bahwa "salah" kode berfungsi sebagaimana mestinya untuk kolom yang ditentukan
sebagai optional
di Google Ads API protocol buffers
. Tapi karena
target_cpa_micros
sama dengan
bukan kolom optional
, kolom "salah" kode ini tidak memperbarui bidding
untuk mengosongkan kolom target_cpa
.