סקריפטים של Ads Manager

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

אחזור רשימת החשבונות

אפשר לאחזר חשבונות בחשבון ניהול באמצעות השיטה accounts, לדוגמה:

const accountSelector = AdsManagerApp.accounts()
    .withCondition('customer_client.descriptive_name = "My Account"');

const accountIterator = accountSelector.get();

יש כמה הגבלות על החשבונות שאפשר לאחזר:

  • אי אפשר לאחזר חשבונות ניהול אם יש לכם היררכיה עם כמה רמות. אפשר לבחור רק את חשבונות הלקוח.
  • כברירת מחדל, המערכת לא מחזירה חשבונות שנסגרו, בוטלו או הושעו. כדי לשנות את ההתנהגות הזו, אפשר להפעיל את withCondition ולציין מסנן אחר ל-customer_client.status.

קריאה ל-accounts מאחזרת כברירת מחדל את רשימת כל חשבונות הלקוח בהיררכיית חשבון הניהול. אפשר להשתמש ב-method‏ withLimit של הכיתה ManagedAccountSelector כדי להגביל את מספר החשבונות שהסקריפט מאחזר. אפשרות נוספת היא לבחור את החשבונות לפי מספרי הלקוחות שלהם באמצעות השיטה withIds:

// Hyphens in the account ID are optional.
const accountSelector = AdsManagerApp.accounts()
    .withIds(['123-456-7890', '234-567-8901', '345-678-9012']);

עבודה בחשבונות לקוח

אחרי שאתם מאחזרים את חשבונות הלקוח, אתם יכולים לעבור עליהם באמצעות השיטות hasNext ו-next של ה-iterator. כדי להחליף את הקשר של הביצוע לחשבון לקוח, צריך להשתמש ב-method‏ select. אחרי שבוחרים חשבון לקוח, כל קריאות ה-API הבאות יחולו על חשבון הלקוח עד שבוחרים חשבון אחר באופן מפורש:

// Keep track of the manager account for future reference.
const managerAccount = AdsApp.currentAccount();

// Select your accounts
const accountIterator = AdsManagerApp.accounts()
// ... Write some logic here to select the accounts you want using
// withCondition or withIds

// Iterate through the list of accounts
for (const account of accountIterator) {
  // Select the client account.
  AdsManagerApp.select(account);

  // Select campaigns under the client account
  const campaignIterator = AdsApp.campaigns().get();

  // Operate on client account
  ...
}

עבודה על חשבונות במקביל

סקריפטים של Google Ads מאפשרים לפעול בכמה חשבונות לקוח בו-זמנית, באמצעות השיטה executeInParallel של הכיתה ManagedAccountSelector. ל-method‏ executeInParallel יש את החתימה הבאה:

function executeInParallel(functionName, optionalCallbackFunctionName, optionalInput);

השיטה executeInParallel מבצעת פונקציה שצוינה על ידי functionName על כל ManagedAccount שManagedAccountSelector תואם אליו. אחרי עיבוד כל החשבונות, פונקציית ה-callback, אם היא צוינה על ידי optionalCallbackFunctionName, תופעל פעם אחת, ותעביר רשימה של אובייקטים מסוג ExecutionResult כארגומנטים שלה לעיבוד נוסף. השימוש האופייני מוצג בהמשך:

function main() {
  const accountSelector = AdsManagerApp.accounts()
      .withLimit(50)
      .withCondition('customer_client.currency_code = "USD"');

  accountSelector.executeInParallel("processClientAccount", "afterProcessAllClientAccounts");
}

function processClientAccount() {
  const clientAccount = AdsApp.currentAccount();

  // Process your client account here.
  ...

  // optionally, return a result, as text.
  return "";
}

function afterProcessAllClientAccounts(results) {
  for (const result of results) {
    // Process the result further
    ...
  }
}

הפונקציה שצוינה על ידי functionName יכולה לקבל לחלופין ארגומנט מחרוזת (optionalInput). אפשר להשתמש בפרמטר הזה כדי להעביר פרמטר נוסף לכל השיטות המקבילות שנקראות על ידי executeInParallel:

function main() {
  const accountSelector = AdsManagerApp.accounts().withIds([1234567890, 3456787890]);
  const sharedParameter = "INSERT_SHARED_PARAMETER_HERE";
  accountSelector.executeInParallel("processClientAccount", null, sharedParameter);
}

function processClientAccount(sharedParameter) {
  // Process your client account here.
  ...
}

אם רוצים להעביר אובייקט תצורה של JavaScript שמכיל הגדרות ספציפיות לחשבון, אפשר קודם להמיר אותו למחרוזת באמצעות השיטה JSON.stringify:

function main() {
  ...
  const accountFlags = {
    '1234567890': {
       'label': 'Brand 1 campaigns',
     },
    '3456787890': {
       'label': 'Brand 2 campaigns',
     }
  };
  accountSelector.executeInParallel("processClientAccount", null,
      JSON.stringify(accountFlags));
  ...
}

function processClientAccount(sharedParameter) {
  const accountFlags = JSON.parse(sharedParameter);
  // Process your client account here.
  ...
}

הפונקציה שצוינה על ידי functionName יכולה גם להחזיר מחרוזת במקום אובייקט באמצעות JSON.stringify:

function processClientAccount() {
  ...
  const jsonObj = {value: 10, list: [1,2,3,4,5,6], name: "Joe Smith"};
  return JSON.stringify(jsonObj);
}

הערכים המוחזרים מועברים לפונקציית ההתקשרות חזרה ברשימה של אובייקטים מסוג ExecutionResult. אם החזרת מחרוזת JSON מהפונקציה, אפשר להמיר אותה חזרה לאובייקט JavaScript באמצעות השיטה JSON.parse:

function callbackFunctionName(results) {
  for (var i = 0; i < results.length; i++) {
    var resultObj = JSON.parse(results[i].getReturnValue());
  }
}

השיטה executeInParallel פועלת עם 50 accounts לכל היותר, כך שתצטרכו להטמיע הגבלות משלכם כדי להגביל את מספר החשבונות שהסקריפט מאחזר. אפשר להשתמש ב-method‏ withLimit או ב-method‏ withIds של הכיתה ManagedAccountSelector כדי להגביל את מספר החשבונות שהסקריפט מאחזר.

מגבלות זמן לביצוע

בדף הזה מפורטות המגבלות על זמני הביצוע של סקריפטים ב-Ad Manager.