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

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

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