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

ב-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 עם אופטימיזציית עלות לקליק מופעלת.

אבל מה קורה אם רוצים להשתמש ב-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")