サイバーホルンのブログCyberhorn's Blog

GASを使ってGoogle AnalyticsデータをChatworkに自動通知するbotを作ってみた

  • 2021.08.24
  • 2021.08.18

データ×マーケティング

弊社のデータチームでは、HPを運用するにあたってGoogle Analyticsでユーザー行動を計測しています。

例えば、

「サイトの訪問者数はどれくらいか」
「訪問者のうち新規で訪問した人はどのくらいか」
「1回の訪問で何ページ閲覧しているのか」

などのデータを日々確認しています。

しかし、毎日のHP訪問者の移り変わりを確認するために毎度Google Analyticsのサイトを開いて数値を見に行くのは面倒。

社内のコミュニケーションツールであるChatworkで成果を見れると便利だよね〜という話になり、Google Apps Script(以下GAS)を使ってChatworkでGoogle Analyticsのデータを自動投稿することになりました。

備忘録として、自動bot作成手順を以下に残しておきます。

準備するもの

・Googleスプレッドシート

Chatworkに送信するGoogle Analyticsデータを一時的に保管するシート。

・Chatworkの送信者トークン

Chatworkのアカウントから「サービス連携」を開き、API tokenを発行。

このtokenの発行者がbotの送信者となります。

・Chatworkの送信先のグループID

ブラウザで開いたときのURLの#rid以降の数字。

https://www.chatwork.com/#!rid*********

このグループにbotが送信します。

手順

GoogleスプレッドシートにGoogle Analyticsからデータを落とす

まずは、GoogleスプレッドシートにGoogle Analyticsのアドオンを追加します。

ツールバーから「アドオン」>「アドオンを取得」

アドオンを追加できたら、「Create new report」からデータ取得に移ります。

右側に表示されたCreate new reportでデータ取得設定を行なっていきます。

1) Name your report

作成するレポート名を記入。

2) Select a view

Google Analyticsから落としたいメディアアカウントを選択。

今回は弊社HPが対象なので”サイバーホルン”を選ぶ。

3) Choose configuration options

Metrics:必要な指標を選ぶ。今回は

“users”,”newUsers”,”sessions”,”goalCompletionsAll”,”pageviews”,”pageviewsPerSession”

を選択。

Dimensions:データの切り口。今回は”date”を選択。

ここまでできたら「Create Report」をクリック。

新しく「Report Configuration」というシートが作成されます。

次に、「Run reports」から実際データを取得してみます。

設定したレポート名のシートが新しく作成されました。

定時更新でGoogle Analyticsから自動でデータを引き落とせるようにする

「Schedule reports」をクリック。

「Enable reports to run automatically.」にチェックを入れて更新日時を設定する。

今回は毎日朝の4-5時に更新されるように設定。

このとき、Chatworkに送信する予定の時間より前の時間になるよう注意してください。

「Save」をクリックして完了です。

GASでスクリプトを書く

Googleスプレッドシートの「ツール」>「スクリプトエディタ」をクリックして、GASファイルを開きます。

GASファイルにコードを記述していきます。

実際のコードは以下の通りです。

//チャットワーク
var CW_TOKEN = "**********************"; //送信者トークン
var CW_ROOM_ID = "*********"; //ルームID

//スプレッドシート
var ss_id = "********";
var sh_name = "会社HP(社内アクセス除外)";
var sh = SpreadsheetApp.openById(ss_id).getSheetByName(sh_name);
var lastRow = sh.getDataRange().getLastRow(); //最終行
var yDate = sh.getRange(lastRow, 1).getValue(); //最新日

// Chatworkに送る文字列を生成
var ave_user = SpreadsheetApp.openById(ss_id).getSheetByName("過去30日平日平均").getRange(2, 5).getValue();
var strBody =
  "※自動送信※\n"
  + "おはようございます!\n" + sh_name + "のデイリーレポートをお届けします!" + "\n"
  + "\n"
  + "[info][title]" + sh_name + "_昨日のデータ " + Utilities.formatDate(yDate, "JST", "yyyy/MM/dd") + "[/title]"
  + "ユーザー: " + sh.getRange(lastRow, 2).getValue() + " (過去30日平日平均 " + ave_user + ")" + "\n"
  + "新規ユーザー: " + sh.getRange(lastRow, 3).getValue() + "\n"
  + "セッション: " + sh.getRange(lastRow, 4).getValue() + "\n"
  + "ページビュー: " + sh.getRange(lastRow, 6).getValue() + "\n"
  + "[/info]" + "\n" + "\n"
  + "dpのリンクはこちら。https://datastudio.google.com/s/xxxxxxxxx" + "\n";

function main() {
  sendMessageFromGA();
  delTrigger();
}

// チャットワークにメッセージを送る
function sendMessageFromGA() {
  const cwClient = ChatWorkClient.factory({ token: CW_TOKEN });
  cwClient.sendMessage({
    room_id: CW_ROOM_ID,
    body: strBody
  });
  return;
}

// トリガーを設定
function setTrigger() {
  const time = new Date();
  time.setHours(06);
  time.setMinutes(00);
  if (isBusinessDay(time)) {
    ScriptApp.newTrigger('main').timeBased().at(time).create();
  }
  return;
}

// 余分なトリガーを削除
function delTrigger() {
  const triggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < triggers.length; i++) {
    var trigger = triggers[i];
    if (trigger.getHandlerFunction() == "main") {
      ScriptApp.deleteTrigger(trigger);
    }
  }
  return;
}

// 平日を判定
function isBusinessDay(date) {
  // 土日
  if (date.getDay() == 0 || date.getDay() == 6) {
    return false;
  }
  // 祝日
  const calJa = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com'); //Googleカレンダーから取得
  if (calJa.getEventsForDay(date).length > 0) {
    return false;
  }
  return true;
}

Google Analyticsから取得したデータそのものに加えて、Googleスプレッドシート上で”過去30日平均ユーザー数”も計算しています。

また、Googleカレンダーを用いて土日祝日は配信しない設定としています。

実際に自動送信されたメッセージがこちらです。

おわりに

いかがだったでしょうか?

これが少しでも役立てば幸いです。

今後はBigQueryを使って広告運用データもChatworkに自動配信できるようにしていきます。

(文章 : Cyberhoron マーケティングデータチーム エンジニア)

  • 2021.08.24
  • 2021.08.18

データ×マーケティング

広告代理店/制作会社の方へ

無料アカウント診断サービス