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

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

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

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