Ads Manager 스크립트

Google Ads 스크립트의 AdsManagerApp 클래스를 사용하면 관리자 계정아래에 연결된 계정을 관리할 수 있습니다. 계정별로 별도의 스크립트를 만드는 대신 하나의 스크립트를 통해 모든 광고주 계정을 관리할 수 있습니다.

계정 목록 가져오기

예를 들어 accounts 메서드를 사용하여 관리자 계정 아래의 계정을 가져올 수 있습니다.

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

const accountIterator = accountSelector.get();

가져올 수 있는 계정에는 몇 가지 제한사항이 있습니다.

  • 다단계 계층 구조가 있는 경우 관리자 계정을 가져올 수 없습니다. 고객 계정만 선택할 수 있습니다.
  • 기본적으로 폐쇄, 취소, 정지된 계정은 반환되지 않습니다. customer_client.status에 다른 필터를 지정하는 withCondition을 호출하여 이 동작을 재정의할 수 있습니다.

accounts 호출은 기본적으로 관리자 계정 계층 구조 아래의 모든 고객 계정 목록을 가져옵니다. ManagedAccountSelector 클래스의 withLimit 메서드를 사용하여 스크립트가 가져오는 계정 수를 제한할 수 있습니다. 또 다른 방법은 고객 ID별로 계정을 선택하는 withIds 것입니다.

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

고객 계정 작업

고객 계정을 가져온 후에는 반복기의 hasNextnext 메서드를 사용하여 계정을 반복할 수 있습니다. 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 메서드는 ManagedAccountSelector와 일치하는 각 ManagedAccount에서 functionName 으로 지정된 함수를 실행합니다. 모든 계정이 처리되면 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에서 작동하므로 스크립트가 가져오는 계정 수를 제한하기 위해 자체 제한사항을 구현해야 합니다. ManagedAccountSelector 클래스의 withLimit 또는 withIds 메서드를 사용하여 스크립트가 가져오는 계정 수를 제한할 수 있습니다.

실행 시간 제한

Ads Manager 스크립트 실행 시간 제한에 대한 자세한 내용은 한도 문서 를 참고하세요.