Скрипты для Центра клиентов

Класс MccApp в скриптах AdWords позволяет работать со всеми аккаунтами рекламодателей, связанными с Центром клиентов, в рамках одного скрипта, не создавая для каждого из них отдельный код. Одна из наиболее распространенных задач, которые можно решать с помощью такого скрипта, – создание отчетов на уровне Центра клиентов. Другие примеры использования можно найти здесь.

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

При помощи метода accounts можно получить все аккаунты Центра клиентов (кроме аккаунтов AdWords Express). Пример:

var accountSelector = MccApp.accounts()
    .withCondition("Impressions > 100")
    .forDateRange("LAST_MONTH")
    .orderBy("Clicks DESC");

var accountIterator = accountSelector.get();

Вызов этого метода по умолчанию извлекает список всех клиентских аккаунтов из иерархии Центра клиентов. Чтобы ограничить количество извлекаемых скриптом аккаунтов, можно использовать метод withLimit класса ManagedAccountSelector. Также можно выбирать аккаунты по идентификаторам клиента с помощью метода withIds, как показано ниже.

var accountSelector = MccApp.accounts()
    .withIds(['918-501-8835', '320-368-4437', '925-591-3280']);

Работа с клиентскими аккаунтами

В полученных клиентских аккаунтах можно выполнять итерацию с помощью методов hasNext и next класса ManagedAccountIterator. Чтобы переместить контекст выполнения в клиентский аккаунт, используйте метод select. Любые вызовы API применяются только к выбранному клиентскому аккаунту, пока не будет явно выбран другой аккаунт. Пример:

// Keep track of the MCC account for future reference.
var mccAccount = AdWordsApp.currentAccount();

// Select your accounts
...

// Iterate through the list of accounts
while (accountIterator.hasNext()) {
  var account = accountIterator.next();

  // Select the client account.
  MccApp.select(account);

  // Select campaigns under the client account
  var campaignIterator = AdWordsApp.campaigns().get();

  // Operate on client account
  ...
}

// Switch back to MCC account
MccApp.select(mccAccount);

Параллельное выполнение задач в аккаунтах

Скрипты AdWords позволяют работать параллельно с несколькими клиентскими аккаунтами. Для этого используется метод executeInParallel класса ManagedAccountSelector со следующей сигнатурой:

function executeInParallel(functionName, optionalCallbackFunctionName, optionalInput);

Метод executeInParallel выполняет функцию, указанную в аргументе functionName для каждого управляемого аккаунта ManagedAccount, который соответствует селектору ManagedAccountSelector. После обработки всех аккаунтов единоразово выполняется функция обратного вызова (если она указана в аргументе optionalCallbackFunctionName), которая передает массив всех объектов ответа в качестве своего аргумента для дальнейшей обработки. Вот пример типичного применения:

function main() {
  var accountSelector = MccApp.accounts()
      .withLimit(50)
      .withCondition("Impressions > 100")
      .forDateRange("LAST_MONTH")
      .orderBy("Clicks DESC");

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

function processClientAccount() {
  var clientAccount = AdWordsApp.currentAccount();

  // Process your client account here.
  ...

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

function afterProcessAllClientAccounts(results) {
  for (var i = 0; i < results.length; i++) {
    var result = results[i].getReturnValue();
    // Process the result further
    …
  }
}

Функция, указанная в аргументе functionName, может принимать строковый аргумент (optionalInput). Его можно использовать для передачи дополнительного параметра всем параллельным методам, вызванным с помощью executeInParallel. Пример:

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

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

Если вы хотите передать объект конфигурации JavaScript, содержащий настройки аккаунта, его можно преобразовать в строку при помощи метода JSON.stringify. Пример:

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

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

Функция, указанная в аргументе functionName, может возвращать строковые значения. Если же вам нужно возвратить объект JavaScript, его можно преобразовать в строку при помощи метода JSON.stringify. Пример:

function processClientAccount() {
  ...
  var 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.

Сроки выполнения

Подробную информацию об ограничениях, применяемых к скриптам для Центра клиентов, можно найти здесь.

Оставить отзыв о...

Текущей странице
Скрипты AdWords
Скрипты AdWords