• AdWords scripts for MCCは対象アカウントを選び並列処理の結果をまとめて確認する

AdWords scripts for MCCは対象アカウントを選び並列処理の結果をまとめて確認する

公開日: 執筆:佐藤

AdWords scripts for MCCで複数アカウントを処理するときは、先に対象のcustomer IDを限定します。executeInParallel()で動かす関数と、全アカウントの実行結果を受け取るcallbackを分け、成功と失敗をアカウント別に記録します。

最初から入札や広告を変更してはいけません。まず読み取りだけの処理で、選ばれたアカウント、実行状態、error、return valueを確認し、対象選択と結果回収が正しいことを確かめてください。

MCC Scriptsは複数のアカウントを一つのscriptから扱う

Google Ads Developers BlogのMCC Scripts公式発表では、My Client CenterのScripts画面から、複数の管理対象アカウントへ変更を加えたり、レポートを作ったりできます。

通常のAdWords Scriptsでは、一つのアカウント内でキャンペーンやキーワードを選びます。MCC Scriptsでは、その前にどのアカウントで処理するかを選びます。

処理は二段階です。

段階 決めること
アカウント選択 どのcustomer IDを処理対象にするか
アカウント内処理 選んだ各アカウントで何を読み、何を変更するか

この二つを一つの条件式へ詰め込むと、アカウントを選び間違えたのか、選択後の処理が間違ったのかを分けられません。

MccApp.accounts()で対象を限定する

MccApp.accounts()は、MCCへ関連付けられたアカウントを選ぶためのselectorを返します。2014年5月7日保存の公式MCC Scriptsガイドでは、withIds()やwithCondition()で対象を絞れます。

定期処理では、対象を名前の部分一致だけに任せず、確認済みのcustomer IDを作業台帳へ残します。名前は変更できますが、customer IDは対象を照合する値として使えます。

次のIDは説明用です。実在するAdWordsアカウントを示しません。

function main() {
  MccApp.accounts()
    .withIds(['123-456-7890', '234-567-8901'])
    .executeInParallel('inspectAccount', 'collectResults');
}

この時点では、各アカウントで実行するinspectAccountと、結果を集めるcollectResultsの名前を渡しただけです。入札や広告は変更していません。

executeInParallel()は各アカウントの処理と結果回収を分ける

executeInParallel()の第一引数には、各アカウントで動かす関数名を渡します。第二引数には、すべての処理が終わったあとに一度だけ呼ばれるcallbackの関数名を渡せます。

各アカウントで動く関数は文字列を返せます。objectを返したい場合は、JSON.stringify()で文字列へ変え、callbackでJSON.parse()を使って読みます。

最初の確認では、customer IDだけを返します。

function inspectAccount() {
  var account = AdWordsApp.currentAccount();

  return JSON.stringify({
    customerId: account.getCustomerId(),
    accountName: account.getName()
  });
}

読み取りだけの処理で対象が合っていることを確認してから、キャンペーンやキーワードを読む処理へ進みます。変更処理は、対象件数と条件を確認できるまで加えません。

callbackではExecutionResultをアカウント別に記録する

callbackには、各アカウントのExecutionResultがリストで渡されます。customer ID、実行状態、error、return valueを使い、どのアカウントが成功し、どこで失敗したかを分けます。

function collectResults(results) {
  var i;

  for (i = 0; i < results.length; i += 1) {
    Logger.log(
      results[i].getCustomerId() + ' | ' +
      results[i].getStatus() + ' | ' +
      results[i].getError() + ' | ' +
      results[i].getReturnValue()
    );
  }
}

この例は値をlogへ出すだけです。実行状態の文字列を決め打ちせず、返された状態とerrorを保存します。return valueを次の自動変更へそのまま使う処理も入れていません。

実務の記録では、script名、実行日時、対象customer ID、実行状態、error、return value、確認担当を一行へまとめます。成功したアカウントだけを数えて終わらず、結果が返らなかった対象も元のID一覧と照合します。

MccApp.select()は順番に処理する場合に使う

並列処理が不要なら、MccApp.accounts()で得た各アカウントをMccApp.select(account)で選び、そのあとにAdWordsAppの処理を実行できます。MccApp.select()を呼ぶと、それ以降のAPI呼出は選ばれたアカウントの範囲で動きます。

順番に処理する方法は、アカウントごとに途中結果を確認したい場合や、一件ずつ停止条件を判定したい場合に向きます。並列処理は、複数対象を同時に進め、最後に結果を集める場合に使います。

速さだけで選ばず、途中で止める条件、結果をまとめる方法、失敗した一件を再実行する方法で決めます。

変更対象と停止条件をscriptの外にも残す

MCC Scriptsがアカウントを選べることと、選ばれたすべてのアカウントを変更してよいことは同じではありません。変更処理を追加する前に、次の四点を作業台帳へ残します。

  1. 対象のcustomer ID
  2. 読み取る項目と変更する項目
  3. 変更しない条件と処理を止める条件
  4. 実行結果を確認し、必要なら戻す担当

委託先がscriptを作る場合も、MCC、各アカウント、script、結果記録の所有者を明確にします。コードを受け取るだけでは、実行権限、対象ID、定期実行、失敗記録を引き継げません。

最初の一手は、確認済みのcustomer IDを少数だけwithIds()へ指定し、AdWordsApp.currentAccount()からIDと名前を返すことです。変更処理を入れずにExecutionResultを照合し、対象選択と結果回収を確認してください。

戻る