会社に打刻システムが導入されたんだけど打刻忘れしそうなのでChatworkにGAS使ってBot導入した話

最近会社に打刻用のWebシステム(たぶん自家製)が導入されて、出勤時と退勤時にアクセスして出勤もしくは退勤のボタンをポチッとな、っていう運用が始まったのだけれども、初めのうちはどうしても忘れる。

ということで、出勤前と退勤前の時間帯に忘れずに打刻してねって促すようなチャットBotChatwork上に作ることにした。

チャットBotっていうとHubotとかが一般的かと思うが、この程度でサーバー用意するのもなぁ、、、と思い今回はサーバー用意せずにGoogle Apps Script(以下、GAS)で作った。

事前準備

まず適当にBot専用のチャットワークアカウントを用意する。
また、ChatworkにBotを導入するにあたってチャットワークAPIが必要なので、Botアカウントでログインして申請する(承認まで数日かかった気がする)。

GASプロジェクト作成・ライブラリ追加

Google ドライブ上にGASのプロジェクトを作成する。
一度もGASのプロジェクトを作ったことがない場合は、まず自分のアカウントでドライブを開いて、「新規」>「その他」>「アプリを追加」、"google apps script"とかで検索して「Google Apps Script」を接続する。
接続以降は「新規」>「その他」>「Google Apps Script」で新しいプロジェクトが開くので、「chatwork-bot」とか適当にプロジェクト名をつけてあげればいい。

次に、GAS上でチャットワークAPIを扱うためにChatWork Client for Google Apps Scriptというチャットワークの中の人が作ったライブラリを追加する。

プロジェクトを開いたら、メニューの「リソース」>「ライブラリ」で、上記ライブラリのプロジェクトキーをコピペして選択。
ChatWorkClientというライブラリが追加されたら、最新バージョンを選択して保存。

スクリプト作成

GASからChatworkへ打刻しろよ的なことを促すスクリプト

上に示したスクリプトには含まれていないが、実際は変数TOKENROOM_IDKINTAI_SYSTEM_URLも定義している。
TOKENには申請して取得したチャットワークAPIトークンを、ROOM_IDには投稿したいチャットのルームID(チャットワークURLの#!ridに続く8桁の数字)を入れておく。
KINTAI_SYSTEM_URLは会社で使っているシステムのURLを入れている。

このあとトリガーを設定して定時実行させるのだけど、今の時点で動作確認も含めて手動実行してみるといい。
helloMessagegoodbyeMessageのどちらか実行したい関数を選択して、実行ボタンを押すだけ。
うまくいけば、指定したルームIDのチャットグループにメッセージが飛ぶ。

トリガー設定

定時実行するためのトリガーを最後に設定する。
メニューの「リソース」>「現在のプロジェクトのトリガー」からトリガーを追加する。
helloMessagegoodbyeMessageの2つ分のトリガーを追加して、時間主導型の日タイマー、あとはそれぞれの関数を実行させたい時間帯を選択すれば完了。

導入してみて

トリガーが正しく設定されていれば、指定した時間帯にそれぞれの関数が実行されてメッセージが飛んで来る。
事前準備とかを除けば、1時間もかからずこの程度のチャットBotはできてしまうのはイイ。サーバーも不要。
ただ、これだと課題もあって、

  • 日タイマーの時間選択が「午前8時〜9時」みたいなざっくりしたものしかない
  • 土日祝日関係なしに打刻しろってBotが言ってくる

とか。

今回の用途はそこまでシビアじゃないので別に良いのだけど、カッチリ作ろうと思ったらこのあたりちゃんと考えてスクリプト組もうね、という感じ。