ב-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")