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

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

בדף הזה אפשר לקרוא פרטים על מגבלות הזמן לביצוע סקריפטים של Ads Manager.