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

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

Получить список учетных записей

Вы можете получить доступ к учетным записям, находящимся в учетной записи менеджера, используя метод 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 Search and Display campaigns under the client account
  const campaignIterator = AdsApp.campaigns().get();

  // Operate on client account
  ...
}

Параллельная работа над счетами.

Скрипты Google Ads позволяют работать с несколькими клиентскими аккаунтами параллельно, используя метод 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 см. в документации по лимитам .