members

members

【コピペで簡単】Hangouts ChatでリマインドBotを作る

Tweet

画像元

 

日次や週次あるいは月次で対応するタスクの抜け漏れをなくしたい、と思われている方は多いのではないでしょうか。
本記事ではそんな方向けに、GoogleのチャットツールであるHangouts Chatでリマインド用のBotを作る方法をTECHラボ所属の桑原よりご紹介します。

 

Hangouts Chatとは

Hangouts ChatはGoogleが提供するビジネスチャットツールです。
機能的にslackと酷似していることから、使い勝手や拡張性などはよく比較されます。
2020年2月時点で、まだリリース後2年ほどのため機能面は拡充段階といったところですが、slack同様に便利な機能がたくさんあります。

今回はそのうちの1つであるBotの作り方をご紹介します。

 

リマインドBotの作り方

それではリマインドBotの作り方をご紹介していきますが、まず今回作るものの前提として
「リマインドしたい内容とリマインド日時を誰でもスプレッドシート上で更新できる」
というのを前提として作っていこうと思います。

なお、以下コードやスクリーンショットは2020年2月28日時点のものになりますのでご承知おきください。

 

スクリプトエディタにコードを貼り付ける

メニューバーの「ツール」から「スクリプトエディタ」を開きます。

 

次に以下コードを貼り付け、プロジェクト名(赤枠部分)・ファイル名(青枠部分)を設定して保存します。

 

【コード】


function remind() {
// 現在日時を取得
var date = new Date();
Logger.log(date);
// 曜日
var day= date.getDay();
Logger.log(day);
// 時間
var hour = date.getHours();
// 分
var minutes = date.getMinutes();

// スプレの情報を取得
var sheet = SpreadsheetApp.getActive().getSheetByName(‘remind’);
var rowLast = sheet.getLastRow();
var data_remind = sheet.getRange(2, 1, rowLast, 4).getValues();

// 登録されているメッセージの回数繰り返す
for(var i = 0; i < data_remind.length; i++){
// スプレの時間指定とメッセージを取得
var remind_day = data_remind[i][0];
var remind_hour = data_remind[i][1];
var remind_minutes = data_remind[i][2];
var message = data_remind[i][3];

// 一分ごとのトリガーを設定し、合った時にメッセージをPOSTする
if(day == remind_day && hour == remind_hour && minutes == remind_minutes){ //時間が合っているか

var url = ‘https://chat.googleapis.com/から始まるチャットWEBHOOKのURL’;

var botMessage = { ‘text’: message }

var options = {
‘method’: ‘POST’,
‘headers’: {
‘Content-Type’: ‘application/json; charset=UTF-8’
},
‘payload’: JSON.stringify(botMessage)
};

var result = UrlFetchApp.fetch(url, options);
Logger.log(result);
Logger.log(‘applicable’);

}else{
Logger.log(‘not applicable’);
}
}
}


 

スプレッドシートに記入フォーマットを用意する

①シート名を「remind」にする

まず、シート名ですが、スクリプトのこの部分で活用するのでわかりやすいように今回は「remind」としましょう。

var sheet = SpreadsheetApp.getActive().getSheetByName(‘remind‘);

 

②シートを追加してデータの対応表を作る

スクリプトのこの部分で「getDay」というメソッドで曜日を取得しています。
var day= date.getDay();

getDayで取得する値は「月」「火」などの文字列ではなく0~6の数値であらわされます。
(0が日曜日、1が月曜日,・・・・,6が土曜日)

そのため、文字列を数値に変換する方法が必要になります。
今回はノンプログラマーでも簡単にできるようにスプレッドシートの関数を使って変換しました。

 

③remindシートに以下のような表を作成する

A列に以下のような関数を使って、E列に書いた曜日の文字列を数値に変換します。
=iferror(vlookup(E2,config!$A$2:$B$8,2,),””)

 

スプレッドシートのB~E列を記入

スプレッドシートのB~E列にリマインドしたい内容と日時を記入します。
記入例では月曜日の15時ちょうどに「テスト。月曜日のリマインドテストです。」という投稿(リマインド)をBotがするようになります。

 

出力先のチャットを決める(Hangouts ChatでWebhookを設定する)

グループチャットの左上にチャット名が表示されていますが、そこをクリックして「Webhookを設定」をクリックします。

そうすると以下のような画面が出てくるので「名前」の欄にBotの名前として設定したい文字を入れ、「アバターのURL」の欄にBotのアバター(アイコン画像)として設定したい画像のURLを入力します。
このURLはネット上に転がっている画像のURLでも設定は可能です。

 

今回は弊社のロゴを使ってみました。
保存するとこのような画面になるので右側にある青枠部分をクリックします。

そうすると「https://chat.googleapis.com」から始まるURLをコピーできます。

 

これをスクリプトエディタ内の以下に貼り付けて設定完了です。

 

トリガーを設定する

最後にトリガーを設定することで、スプレッドシート上に記入した時間が来たら勝手に動くように設定します。

 

①スクリプトエディタのメニューにある時計マークをクリックする

クリックすると別タブでトリガー設定の画面が出てきます。

 

②右下にある「トリガーを追加」ボタンをクリック

 

③以下トリガー設定を行う

実行する関数:スクリプト内「function」の後ろにある関数(今回の場合はremind)
イベントソース:時間主導型
時間ベースのトリガーのタイプ:分ベースのタイマー
時間の間隔:1分おき

 

こうすることで、1分間に1回トリガーが発火します。

ちなみに、スプレッドシート上で設定した時間と、このトリガーが発火した時間が同じ場合にテキストがBotから投稿されるようなコードになっているのでこういったトリガー設定をしています。

なお、上記を設定して保存すると、アカウントの選択とアクセス許可を求められるので許可します。

ということで、実際に配信されたのがこちら。

 

まとめ

いかがでしたでしょうか。

今回は、日次や週次あるいは月次で対応するタスクの抜け漏れをなくす方法の1つとして、Hangouts ChatでのBotの作り方をご紹介しました。

今回ご紹介した作り方以外にも作り方はあるので、今後の記事でご紹介できればと思います。

 

ラボ活動について

最後に、冒頭の「TECHラボ」について気になった方もいらっしゃるかと思うので簡単に説明しますと、メンバーズにはラボという「社員同士での自主的な学び/研究活動をする制度」があります。

その1つであるTECHラボでは、実業務の無駄な作業を効率化・自動化するために、普段業務では使う機会のないプログラミングを学びつつアウトプットをしています。

 

コラム執筆者

桑原佑司(くわはら ゆうじ)

第3ビジネスユニット アカウントサービス第17ユニット所属
2017年4月入社。主にWeb広告運用・Webコンサルに従事。
2017年のクリスマスに同期とプログラミング初心者しかいないTECHラボを立ち上げる。TECHラボ代表。
趣味はランニングと服を買うこと。ここ1年はJSでの業務効率化にはまってます。

 

執筆記事

スプレッドシート関数 IMPORTXMLでスクレイピングする方法

【動画解説付き】Googleアナリティクスを使っても 「何が問題か分からない」というディレクター必見の分析術

【動画解説付き】Googleアナリティクスを使っても 「何が問題か分からない」というディレクター必見の分析術

なぜ、Googleアナリティクス(GA)で「何が問題か」に辿りつけないのか、どんなデ ータが不足しているのかが分かり、ユーザテストとGoogleアナリティクスの組み合わせ方が分かります。

資料ダウンロード