なお、今回はB2B形式のビジネスを行う広告主を想定して、カレンダー通りの土日と祝日の広告表示オプションをオフにするケースを考えます。

スクリプトの前提条件

スクリプトを実行するには、いくつかの前提条件を満たしている必要があります。とはいえ、そんなにハードルの高い条件ではないので、安心してください。

通常期のコントロールはデフォルトの機能で切り替えていること

AdWordsには、曜日ごと・時間ごとの電話番号表示オプションの表示・非表示を自動で切り替えることができる機能がついています。今回は、カレンダー通りの土日と祝日の広告表示オプションをオフにするケースを想定しているので、土日の広告コントロールは、AdWordsのデフォルトの機能で設定してください。

また、ビジネスアワーのみ電話番号表示オプションをオンにして、早朝や深夜の電話番号表示オプションをオフにするところもデフォルトの設定を使ってください。

祝日情報は全て1つのGoogleカレンダーにて管理されていること

今回のAdWordsスクリプトでは、祝日データは、スクリプト内には保持せずに、同じGoogleサービスであるGoogleカレンダーを使います。AdWordsスクリプトは、もともとGoogle Apps Scriptの一部であり、GoogleカレンダーもGoogle Apps ScriptのAPIが実装されていることから、Googleカレンダー上のデータはAdWordsスクリプトから操作しやすくなっています。

また、日本の祝日と同じカレンダーを利用する場合は、Googleカレンダーでデフォルトで提供されている祝日カレンダーである 日本の祝日 を使えば解決します。もし、カレンダー通りの祝日と完全に一致しない場合は、Googleカレンダーを作成し、そこに休日情報を登録する必要が有ります。

電話番号表示オプションの設定対象キャンペーンは全キャンペーンであること

AdWordsスクリプトを極力シンプルにするために、電話番号表示オプションの設定対象キャンペーンを別途指定するインターフェースは準備していません。アカウント内に登録されている全てのキャンペーンに対して自動的に電話番号表示オプションが設定されます。もし、なんらかの理由で「特定のキャンペーンに対しては電話番号表示オプションは使いたくない」という事情がある場合、今回紹介するAdWordsスクリプトをそのまま利用することはできません。とはいえ、一部修正するだけで済みますので、その場合もご安心ください。

登録されている電話番号は全て有効な番号であること

こちらも、AdWordsスクリプトを極力シンプルにするための制約になります。電話番号表示オプションで使うための電話番号が有効な状態で登録されている場合、たとえ初期時点で「ある電話番号はどのキャンペーンにも紐付けていない」としても、無関係にAdWordsスクリプトは全ての電話番号を全てのキャンペーンに紐付けます。もし、今は使えない電話番号がアカウントに登録する場合は、削除設定にしておきましょう。

AdWordsスクリプトの前準備

GoogleカレンダーAPIは、AdWordsスクリプト上では Advanced API に分類されており、利用するためには前準備が必要になります。

前準備は、

  • AdWordsスクリプト上でGoogle Calendar APIを有効にする
  • Google Developer Consoleへの登録(未登録の場合)
  • AdWordsスクリプトに紐付いているDeveloper Console上のプロジェクトでGoogle Calendar APIを有効にする

の3点です。

AdWordsスクリプト上でGoogle Calendar APIを有効にする

AdWordsスクリプトの作成ボタンを押したあと、表示されるエディタの上部にあるボタンの中から、 API(上級) と書かれたボタンをクリックします。

次に、ポップアップされたウィンドウの中から、 Calendar のチェックボックスにチェックを入れます。

これで、AdWordsスクリプト側のAPI利用設定は完了です。

Developer Console上でGoogle Calendar APIを有効にする

先ほどクリックした API(上級) のボタンを再びクリックし、今度は、このウィンドウ内のリンクから、 Google Developers Consoleに移動します。

この画面から、AdWords スクリプトで有効にするAPIを指定します。ここでは、Calendar APIが必要ですので、 Calendar API を探してきて、リンクをクリックし、 APIを有効にする のボタンをクリックして、Calendar APIを有効にしてください。

AdWordsスクリプトの紹介

では、ここから今回のAdWordsスクリプトを紹介します。スクリプトの冒頭部分に、利用するGoogle CalendarのIDを指定する場所がありますので、ここをご自身のカレンダーIDに変更してお使いください(日本の祝日と同じカレンダー通りで行う場合は、そのままで問題ありません)。

var CALENDAR_ID = 'ja.japanese#holiday@group.v.calendar.google.com';

function main() {
  setPhoneNumberExtension( (isHoliday() ? '表示しない' : '表示する') );
}

function isHoliday() {
  var events = Calendar.Events.list(CALENDAR_ID, {
    timeMin: (new Date()).toISOString(),
    singleEvents: true,
    orderBy: 'startTime',
    maxResults: 1
  }).items;

  if (events.length >= 1) {
    var start = events[0].start.date;
    return ((new Date()).toISOString().substr(0, 10) == start);
  } else {
    return false;
  }
}

function setPhoneNumberExtension(settingValue) {
  if (settingValue == '表示する') {
    Logger.log('全てのキャンペーンに対し, 全ての電話番号表示オプションの関連付けを設定します');
    enablePhoneNumberExtension();
  } else if (settingValue == '表示しない') {
    Logger.log('全てのキャンペーンから, 全ての電話番号表示オプションの関連付けを削除します');
    disablePhoneNumberExtension();
  }
}

function disablePhoneNumberExtension() {
  var campaigns = AdWordsApp.campaigns().get();
  while (campaigns.hasNext()) {
    var campaign = campaigns.next();
    var phoneNumbers = campaign.extensions().phoneNumbers().get();
    while (phoneNumbers.hasNext()) {
      var phoneNumber = phoneNumbers.next();
      campaign.removePhoneNumber(phoneNumber);
    }
  }
}

function enablePhoneNumberExtension() {
  var campaigns = AdWordsApp.campaigns().get();
  while (campaigns.hasNext()) {
    var campaign = campaigns.next();
    var phoneNumbers = AdWordsApp.extensions().phoneNumbers().get();
    while (phoneNumbers.hasNext()) {
      var phoneNumber = phoneNumbers.next();
      campaign.addPhoneNumber(phoneNumber);
    }
  }
}

まとめ

広告表示オプションは使うだけでも, 品質スコアの向上が見込める非常に強力な武器になります. しかし, いざ電話がかかってきても応対することができない, となるとせっかくコンバージョンの直前まで持っていったのが無駄になってしまい, 他の競合に取られてしまいます. そのようなことが起こらないように, 電話応対ができないタイミングについては電話番号表示オプションをオフに設定してユーザビリティの確保を心がけましょう.