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

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