GASを使ってGoogle AnalyticsデータをChatworkに自動通知するbotを作ってみた
弊社のデータチームでは、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 マーケティングデータチーム エンジニア)