קמפיינים למיקסום ביצועים שמשתמשים ב-AdsApp

הדרך הכי טובה לנהל את הקמפיינים למיקסום הביצועים באמצעות סקריפטים של Google Ads היא להשתמש באסטרטגיית mutate כדי לנהל ישירות את הקמפיינים למיקסום הביצועים. אפשר ליצור קמפיינים למיקסום ביצועים רק באמצעות הפונקציה mutate. עם זאת, אם אתם מעדיפים, אתם יכולים גם להשתמש באובייקטים אחרים של AdsApp כדי לאחזר קמפיינים למיקסום הביצועים, לנהל קבוצות נכסים ולהריץ דוחות.

אחזור של קמפיינים למיקסום הביצועים

קמפיינים למיקסום הביצועים זמינים דרך אוסף performanceMaxCampaigns של אובייקט AdsApp. אפשר לשחזר אותם כרגיל:

const campaignName = "My Performance Max campaign";

const campaignIterator = AdsApp.performanceMaxCampaigns()
    .withCondition(`campaign.name = "${campaignName}"`)
    .get();

for (const campaign of campaignIterator) {
  ...
}

בניגוד לסוגים אחרים של קמפיינים, בקמפיינים למיקסום הביצועים אין קבוצות של מודעות או אובייקטים של מודעות שאתם יכולים לראות. כל מה שקשור למושגים האלה בקמפיינים אחרים מטופל באופן אוטומטי על סמך קבוצות הנכסים שהגדרתם.

נכסים וקבוצות נכסים

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

הנכסים בקמפיינים למיקסום ביצועים מאוגדים יחד בקבוצת נכסים, וכל קמפיין למיקסום ביצועים חייב לכלול לפחות קבוצת נכסים אחת. אי אפשר ליצור את קבוצות הנכסים האלה ישירות בסקריפטים, אבל אפשר להוסיף נכסים לקבוצת נכסים קיימת ולהסיר ממנה נכסים.

הוספת נכס לקבוצת נכסים

קודם כל יוצרים את הנכס:

const imageUrl = "http://www.example.com/example.png";
const imageBlob = UrlFetchApp.fetch(imageUrl).getBlob();
const assetOperation = AdsApp.adAssets().newImageAssetBuilder()
   .withName("new asset name")
   .withData(imageBlob)
   .build();
const imageAsset = assetOperation.getResult();

לאחר מכן, מוסיפים את הנכס שיצרתם לקבוצת נכסים קיימת:

// First, fetch the Performance Max campaign we want to operate on.
const campaignIterator = AdsApp.performanceMaxCampaigns()
   .withCondition(`campaign.name = '${campaignName}'`)
   .get();
let campaign;
if (campaignIterator.hasNext()) {
   campaign = campaignIterator.next();
} else {
   throw `No campaign found with name ${campaignName}.`
}

// Then, get that campaign's asset groups.
const assetGroupIterator = campaign.assetGroups().get();

// The campaign must have at least one asset group, so we can just assume so here.
const assetGroup = assetGroupIterator.next();

// Add the asset from the previous step.
assetGroup.addAsset(imageAsset, 'MARKETING_IMAGE');

שימו לב שבשלב האחרון צריך לציין את סוג הנכס. רשימה מלאה של סוגי נכסים זמינה בתיעוד של Google Ads API.

כדי להשתמש בנכס קיים, קודם צריך ליצור בורר נכסים:

const assetSelector = AdsApp.adAssets().assets();

לאחר מכן, משתמשים בwithCondition פילטר כדי לצמצם את התוצאות לנכסים שרוצים לבצע עליהם פעולות. רשימה מלאה של אפשרויות הסינון מופיעה במאמרי העזרה של AssetSelector.

לבסוף, מאחזרים את האובייקט iterator ומבצעים איטרציה כמו עם ישויות אחרות:

const assetIterator = assetSelector.get();

for (const asset of assetIterator) {
   ...
}

נכסי טקסט

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

לדוגמה, כך יוצרים נכס של כותרת:

assetGroup.addAsset('asset text here', 'HEADLINE');

הסרת נכס מקבוצת נכסים

אפשר גם להסיר נכס מקבוצת נכסים, אבל חשוב לזכור שצריך שיהיה מספר מינימלי של סוגים מסוימים של נכסים כדי שהקמפיין יהיה תקין.

כך מסירים את הנכס שנוסף בדוגמה הקודמת:

assetGroup.removeAsset(imageAsset, 'MARKETING_IMAGE');

אפשר גם לקבל רשימה של נכסים בקבוצת נכסים מסוימת באמצעות הפונקציה search:

// The resource name is a unique identifier for this asset group.
const assetGroupName = assetGroup.getResourceName();
results = AdsApp.search(
   `SELECT asset.resource_name, asset_group_asset.field_type
    FROM asset_group_asset
    WHERE asset_group.resource_name = '${assetGroupName}'`
);

הפעולה הזו בוחרת את שם המשאב של הנכס כמזהה הייחודי שלו. אפשר לבחור גם שדות אחרים, כמו asset.type או asset.text_asset.text, כדי לצמצם עוד יותר את התוצאות. אפשר להשתמש בכלי ליצירת שאילתות עבור סוג הדוח הזה כדי ליצור שאילתה משלכם.

אחרי שמקבלים את נכס היעד, קוראים ל-remove בקבוצת הנכסים כדי להסיר את הנכס מקבוצת הנכסים:

// This example assumes at least one asset is returned. We'll remove the first
// asset, whatever it is. In your code, customize this to choose the right
// asset to be removed.
const row_info = results.next().asset;
assetGroup.remove(row_info.asset.resource_name, row_info.asset_group_asset.field_type);