הגדרת אובייקטים ריקים של הודעות כשדות

ב-Google Ads API, חלק מהשדות של ההודעות מוגדרים כאובייקטים ריקים של הודעות, כמו campaign.manual_cpm, או שהם כוללים רק שדות אופציונליים, שלא צריך להגדיר. לדוגמה campaign.manual_cpc הגדרת האפשרויות האלה חשוב לציין ל-API באיזו שיטת בידינג להשתמש קמפיין, אבל הוא לא אינטואיטיבי כשההודעות ריקות.

כשמעדכנים את השדה campaign.name, שהוא מחרוזת, אנחנו מגדירים אותו על ידי עדכון ישיר, כאילו היה מאפיין אובייקט רגיל של Python:

campaign.name = "Test campaign value"

campaign.manual_cpc הוא שדה מקונן, כלומר הוא מכיל הודעת פרו-טופו אחרת ולא טיפוס פרימיטיבי, כמו מחרוזת. שלך יכול לעדכן את השדות שלו ישירות:

campaign.manual_cpc.enhanced_cpc_enabled = True

הפעולה הזו תיידע את ה-API ששיטת הבידינג שמוגדרת בקמפיין הזה היא manual_cpc עם אופטימיזציית עלות לקליק מופעלת.

אבל מה אם רוצים להשתמש בשדה manual_cpm, שהוא ריק? או manual_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 שמשתמש בדפוס הזה, תוכלו לוודא שאתם מגדירים של הודעה ריקה בצורה נכונה, על ידי הפעלת רישום ביומן ובדיקת מטען ייעודי (payload) של בקשה.

לסיום, צריך להוסיף את השדה הזה באופן ידני 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")