Класс 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.