Скрипты менеджера рекламы

Класс AdsManagerApp в скриптах Google Рекламы позволяет вам управлять аккаунтами, связанными с вашим управляющим аккаунтом . Вы можете управлять всеми учетными записями рекламодателей с помощью одного скрипта вместо того, чтобы создавать отдельный скрипт для каждой учетной записи.

Получить список аккаунтов

Вы можете получить учетные записи под управляющей учетной записью, используя метод accounts , например:

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

const accountIterator = accountSelector.get();

Существуют некоторые ограничения на доступ к учетным записям:

  • Управляющие аккаунты невозможно получить, если у вас многоуровневая иерархия. Можно выбрать только учетные записи клиентов.
  • По умолчанию закрытые, отмененные и приостановленные аккаунты не возвращаются. Вы можете переопределить это поведение, вызвав withCondition , указав другой фильтр для customer_client.status .

Вызов accounts по умолчанию получает список всех клиентских учетных записей в иерархии управляющих учетных записей. Вы можете использовать метод 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 . Вам необходимо использовать метод 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 Рекламы позволяют работать с несколькими клиентскими учетными записями параллельно, используя метод executeInParallel класса ManagedAccountSelector . Метод 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 , поэтому вам придется реализовать свои собственные ограничения, чтобы ограничить количество учетных записей, которые извлекает ваш скрипт. Вы можете использовать метод withLimit или withIds класса ManagedAccountSelector , чтобы ограничить количество учетных записей, извлекаемых вашим скриптом.

Сроки исполнения

На этой странице вы найдете подробную информацию об ограничениях времени выполнения скриптов Ads Manager.