ใน Google Ads API ช่องข้อความบางช่องจะกําหนดเป็นออบเจ็กต์ข้อความว่าง เช่น campaign.manual_cpm
หรืออาจมีเฉพาะช่องที่ไม่บังคับซึ่งไม่จําเป็นต้องตั้งค่า เช่น campaign.manual_cpc
การตั้งค่าช่องเหล่านี้เป็นสิ่งสําคัญในการบอก API ว่าควรใช้กลยุทธ์การเสนอราคาใดสําหรับแคมเปญหนึ่งๆ แต่จะไม่สะดวกเมื่อข้อความว่างเปล่า
เมื่ออัปเดตฟิลด์ campaign.name
ซึ่งเป็นสตริง เราจะตั้งค่าฟิลด์โดยอัปเดตโดยตรงราวกับว่าเป็นแอตทริบิวต์ออบเจ็กต์ Python ปกติ ดังนี้
campaign.name = "Test campaign value"
campaign.manual_cpc
คือช่องที่ฝังอยู่ ซึ่งหมายความว่ามีข้อความ protobuf อื่น ไม่ใช่ประเภทพื้นฐาน เช่น สตริง คุณอัปเดตช่องของรายการโดยตรงได้ด้วย
campaign.manual_cpc.enhanced_cpc_enabled = True
ซึ่งจะบอก API ว่าแคมเปญนี้มีกลยุทธ์การเสนอราคาเป็น manual_cpc
โดยเปิดใช้ CPC ที่ปรับปรุงแล้ว
แต่จะเกิดอะไรขึ้นหากคุณต้องการใช้ manual_cpm
ซึ่งว่างเปล่า หรือ manual_cpc
โดยไม่ต้องเปิดใช้ CPC ที่ปรับปรุงแล้ว โดยคุณจะต้องคัดลอกอินสแตนซ์เปล่าของคลาสแยกต่างหากลงในแคมเปญ เช่น
client = GoogleAdsClient.load_from_storage() empty_cpm = client.get_type('ManualCpm') client.copy_from(campaign.manual_cpm, empty_cpm)
โปรดดูวิธีระบุ manual_cpm
สําหรับออบเจ็กต์ campaign
name { value: "Test campaign value" } manual_cpm { }
มีการตั้งค่าฟิลด์ manual_cpm
แต่ไม่มีฟิลด์ใดมีค่า เมื่อส่งคำขอไปยัง API ที่ใช้รูปแบบนี้ คุณสามารถตรวจสอบว่าคุณตั้งค่าออบเจ็กต์ข้อความว่างอย่างถูกต้องโดยเปิดใช้การบันทึกและตรวจสอบเพย์โหลดคำขอ
สุดท้าย คุณจะต้องเพิ่มช่องนี้ลงในupdate_mask
ของออบเจ็กต์คำขอด้วยตนเอง ตัวช่วยมาสก์ฟิลด์ไม่มีกลไกในการระบุความแตกต่างระหว่างฟิลด์ที่ตั้งค่าเป็นออบเจ็กต์ว่างอย่างชัดเจนกับฟิลด์ที่ไม่ได้ตั้งค่า
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")