Summary
対話形式での勤怠登録や有給残日数などの確認や休憩時間を取らずにずっと仕事をしている人への声がけなど日常的に行われる総務・管理部門とのやりとりを省力化しながら、そこにコミュニケーション要素をプラスしています。
機械的な勤怠登録を行っていた頃に比べ、社員間でのコミュニケーションがbotを介して増えていく非常にdottらしいbotとなりました。
機能
・対話形式で出退勤・休憩開始・休憩終了の登録
・登録完了後にはそのスレッドにお返事
・対話形式で有給残日数の確認
・年次有給休暇の取得割合が一定の閾値以下の場合、有給の取得を促す
・設定した時間以上連続で休憩をとらずに働いている場合、休憩を取るように促す
・月初に先月の残業時間に応じた声かけを行う
・前月の合計残業時間を社内で共有し、残業時間の削減を促す
上記の機能に加え、随時機能追加中。
社内の反応
返信をスレッド化したことによりパブリックチャンネルでもプライベート感が生まれました。それによって気軽に雑談ができるケースが増え、botからの多様なメッセージによって社内でのコミュニケーションがさらに活気付きました。
botに対して行った反応をキッカケにメンバー間でのコミュニケーションが生まれるなど、社内の風通しが今までよりさらに良くなっていっています。
Technology
GCPを介してSlackからfreeeへの勤怠登録を行う構成にしました。
Slack
botが受け取ったイベント(メッセージ)はSlackのEvents APIを使用しGAEへ送っています。
GAE(App Engine)
SlackのEvents APIでは3秒以内にレスポンスを返却する必要があるため、受け取ったイベントは一旦Firesoreへ登録し、レスポンスを返却しています。勤怠登録などの処理をすると3秒以上かかってしまうため、この方法で実装しました。
Cloud Schedulerから定期実行される休憩促しや残業確認などのAPIも実装されています。
Cloud Functions
Firestoreのデータ登録トリガーで呼び出されます。ここではbotが受け取ったメッセージを解析し、freee APIを使用して勤怠登録や有給残日数の確認を行い、Slackのスレッドへ返信しています。
freee側では確定された退勤かどうかの判断などができないため、botが受け取った退勤報告後に休憩開始をできないようにするなどの整合性チェックも実装しました。