การตั้งค่าออบเจ็กต์ข้อความที่ว่างเปล่าเป็นช่อง

ใน 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")