Skrypty Ad Managera

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

Pobieranie listy kont

Konta na koncie menedżera możesz pobrać za pomocą accounts metody, na przykład:

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

const accountIterator = accountSelector.get();

Istnieją pewne ograniczenia dotyczące kont, które można pobrać:

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

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

// 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 wykonania na konto klienta, musisz użyć metody select. Po wybraniu konta klienta wszystkie dalsze wywołania interfejsu API będą dotyczyć tego konta, 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 Search and Display 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 operacji na wielu kontach klientów za pomocą metody executeInParallel klasy ManagedAccountSelector. Metoda executeInParallel ma następującą sygnaturę:

function executeInParallel(functionName, optionalCallbackFunctionName, optionalInput);

Metoda executeInParallel wykonuje funkcję określoną przez functionName na każdym ManagedAccount który pasuje do ManagedAccountSelector. Gdy wszystkie konta zostaną przetworzone, wywołanie zwrotne, jeśli zostało określone przez optionalCallbackFunctionName, jest wykonywane raz, a jako argument przekazywana jest lista obiektów ExecutionResult do dalszego przetwarzania. Typowe użycie pokazano tutaj:

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 przyjmować argument ciągu znaków (optionalInput). Ten parametr może służyć do przekazywania dodatkowego parametru do wszystkich metod równoległych wywoływanych przez 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, który zawiera ustawienia specyficzne dla konta, możesz najpierw przekonwertować go na ciąg znaków za pomocą JSON.stringify metody:

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ż zwracać ciąg znaków zamiast obiektu za pomocą JSON.stringify:

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 wywołania zwrotnego w postaci listy ExecutionResult obiektów. Jeśli funkcja zwróciła ciąg znaków JSON, możesz go przekonwertować z powrotem na obiekt w JavaScripcie 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, więc musisz zaimplementować 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 wykonania

Szczegółowe informacje o limitach czasu wykonania skryptów Ad Managera znajdziesz w dokumentacji dotyczącej limitów.