Di Google Ads API, beberapa kolom pesan ditetapkan sebagai objek pesan kosong,
seperti campaign.manual_cpm
,
atau mungkin hanya memiliki kolom opsional yang tidak perlu ditetapkan, misalnya
campaign.manual_cpc
. Menyetel
kolom ini penting untuk memberi tahu API strategi bidding mana yang akan digunakan
Kampanye, tetapi tidak intuitif jika pesan kosong.
Saat memperbarui kolom campaign.name
, yang berupa string, kita menetapkan kolom tersebut
dengan memperbaruinya secara langsung seolah-olah itu adalah atribut objek Python normal:
campaign.name = "Test campaign value"
campaign.manual_cpc
adalah kolom bertingkat, artinya berisi
pesan protobuf lainnya dan bukan jenis primitif, seperti string. Anda
juga dapat memperbarui kolomnya secara langsung:
campaign.manual_cpc.enhanced_cpc_enabled = True
Kolom ini akan memberi tahu API bahwa Kampanye ini memiliki strategi bidding manual_cpc
dengan Enhanced CPC diaktifkan.
Namun, bagaimana jika Anda ingin menggunakan manual_cpm
, yang kosong? Atau manual_cpc
tanpa mengaktifkan Enhanced CPC? Untuk melakukannya, Anda perlu menyalin
instance kosong dari class ke kampanye, misalnya:
client = GoogleAdsClient.load_from_storage()
empty_cpm = client.get_type('ManualCpm')
client.copy_from(campaign.manual_cpm, empty_cpm)
Perhatikan cara manual_cpm
ditentukan untuk objek campaign
:
name {
value: "Test campaign value"
}
manual_cpm {
}
Kolom manual_cpm
ditetapkan, tetapi tidak ada kolomnya yang memiliki nilai. Saat mengirim
ke API yang menggunakan pola ini, Anda dapat memverifikasi bahwa Anda menyetel
objek pesan kosong dengan benar dengan mengaktifkan logging dan memeriksa
payload permintaan.
Terakhir, Anda harus menambahkan {i>field<i} ini secara manual ke
update_mask
. Helper {i>field mask<i} tidak
memiliki mekanisme untuk menentukan
perbedaan antara bidang yang telah disetel secara eksplisit sebagai objek kosong, dan
yang belum ditetapkan.
from google.api_core.protobuf_helpers import field_mask
campaign_operation.create = campaign
campaign_operation.update_mask = field_mask(None, campaign)
# Here we manually add the "manual_cpm" field
campaign_operation.update_mask.append("manual_cpm")