Skrypty Ad Managera

Klasa AdsManagerApp w skryptach Google Ads umożliwia zarządzanie kontami połączonymi w ramach konta menedżera. Możesz zarządzać wszystkimi kontami reklamodawców za pomocą jednego skryptu, zamiast tworzyć osobny skrypt dla każdego konta.

Pobierz listę kont

Konta należące do konta menedżera możesz pobierać za pomocą metody accounts, np.:

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

const accountIterator = accountSelector.get();

Istnieje kilka ograniczeń dotyczących kont, które można pobrać:

  • Jeśli masz wielopoziomową hierarchię, nie można pobrać kont menedżera. Można wybrać tylko konta klientów.
  • Domyślnie zamknięte, zlikwidowane i zawieszone konta nie są zwracane. Możesz zastąpić to działanie, wywołując withCondition i określając inny filtr dla customer_client.status.

Wywołanie accounts domyślnie pobiera listę wszystkich kont klientów w hierarchii konta menedżera. Aby ograniczyć liczbę kont pobieranych przez skrypt, możesz użyć metody withLimit klasy ManagedAccountSelector. Możesz też wybrać konta według ich identyfikatorów klienta za pomocą metody withIds:

// Hyphens in the account ID are optional.
const accountSelector = AdsManagerApp.accounts()
    .withIds(['123-456-7890', '234-567-8901', '345-678-9012']);

Praca na kontach klientów

Po pobraniu kont klientów możesz je iterować za pomocą metod hasNext i next iteratora. Aby przełączyć kontekst wykonywania na konto klienta, musisz użyć metody select. Gdy wybierzesz konto klienta, wszystkie kolejne wywołania interfejsu API będą do niego stosowane, dopóki nie wybierzesz innego konta:

// 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
  ...
}

Równoległa praca na kontach

Skrypty Google Ads umożliwiają równoległe wykonywanie działań na wielu kontach klientów za pomocą metody executeInParallel klasy ManagedAccountSelector. Metoda executeInParallel ma taki podpis:

function executeInParallel(functionName, optionalCallbackFunctionName, optionalInput);

Metoda executeInParallel wykonuje funkcję określoną przez functionName w każdym zasobniku ManagedAccount, do którego pasuje element ManagedAccountSelector. Po przetworzeniu wszystkich kont funkcja wywołania zwrotnego, jeśli jest określona przez optionalCallbackFunctionName, jest wykonywana jeden raz, przekazując jako argument do dalszego przetwarzania listę obiektów ExecutionResult. Oto typowe zastosowanie:

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
    ...
  }
}

Funkcja określona przez functionName może opcjonalnie akceptować argument tekstowy (optionalInput). Dzięki temu parametr może przekazywać dodatkowy parametr do wszystkich metod równoległych wywoływanych przez metodę 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.
  ...
}

Jeśli chcesz przekazać obiekt konfiguracji JavaScript zawierający ustawienia dotyczące konta, możesz go najpierw przekonwertować na ciąg znaków, korzystając z metody 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.
  ...
}

Funkcja określona przez functionName może też za pomocą JSON.stringify zwracać ciąg znaków zamiast obiektu:

function processClientAccount() {
  ...
  const jsonObj = {value: 10, list: [1,2,3,4,5,6], name: "Joe Smith"};
  return JSON.stringify(jsonObj);
}

Zwrócone wartości są przekazywane do funkcji wywołania zwrotnego w postaci listy obiektów ExecutionResult. Jeśli funkcja zwróciła ciąg JSON, możesz przekonwertować go z powrotem na obiekt JavaScript za pomocą metody JSON.parse:

function callbackFunctionName(results) {
  for (var i = 0; i < results.length; i++) {
    var resultObj = JSON.parse(results[i].getReturnValue());
  }
}

Metoda executeInParallel działa na maksymalnie 50 accounts, dlatego musisz zastosować własne ograniczenia, aby ograniczyć liczbę kont pobieranych przez skrypt. Aby ograniczyć liczbę kont pobieranych przez skrypt, możesz użyć metody withLimit lub withIds klasy ManagedAccountSelector.

Limity czasu wykonywania

Szczegółowe informacje o limitach czasu wykonywania skryptów Ad Managera znajdziesz na tej stronie.