勤怠botって?
大阪事務所内の勤怠予定(誰がいつ休むのか等)を管理するSlack botです。
専用の入力フォームで入力された予定を一元管理し、週明けと当日に誰が休むのかといった内容を通知してくれます。
通知だけでなく、予定の取り消し、登録されたすべての予定を確認することもできます。
背景
大阪事務所ではSlack上に勤怠チャンネルを作り、そこにいつ休むのかなどの個人の勤怠予定を書き込んでいました。
しかし、通知をする仕組みがなかったので、出勤していない人がいると「あれ、今日〇〇さんお休みだったかな」と過去の書き込みを確認することがあります。
ただ、予定を書き込んだ日から期間が空いていたり、書き込み数が多かった場合、過去の書き込みをさかのぼるのが結構面倒でした。
そこで、通知と予定の一覧を確認したいと思い、今回勤怠botを作ってみました。
構成
サーバサイドは代表的なクラウドサービスであるAWSを利用しました。
今回はAWS Lambda、DynamoDB、CloudWatchの3つのサービスを使いました。
各サービスの概要は2018年10月の『AWS Lambdaを使った雑務への取り組み』に掲載しておりますので、ここでは省略します。
そのため、今回はSlack側で利用した機能を紹介したいと思います。
モーダル
モーダルとは、Slackの画面上にポップアップで表示されるメッセージです。単なる情報の表示だけでなく、ユーザーの入力を受け付けることができます。
モーダルはSlackのBlock Kit Builderで自由に作ることができます。
画像左側がモーダルのプレビュー、右側がモーダルを構成するコンポーネントで構成されたJSONデータです。
画像左端に使用できるコンポーネントが表示されており、いずれかをクリックするとモーダル内にクリックしたコンポーネントが追加されます。
今回の勤怠botではこの機能を利用してこのような入力ホームを作ってみました。
ユーザー→Slack→Lambdaでリクエストを受けたら、Slackライブラリにあるviews.openメソッドに、Block Kit Builderで作ったモーダルのJSONデータを渡すことでモーダルが開きます。
リッチメッセージ
SlackのAPIを使うと、メッセージにレイアウトを付けることができます。
モーダルとは違い、ユーザーの入力を受け付けることはできませんが、メッセージ内にボタンを配置することができ、押下されたボタンをトリガーに任意の処理を付け加えることもできます。
リッチメッセージもモーダル同様、Block Kit Builderで自由に作ることができます。
今回の勤怠botではこの機能を利用して、下部のような予定を通知するメッセージのレイアウトを作りました。
Lambda側の実装でSlackライブラリのchat.postMessageメソッドに、Block Kit Builderで作ったJSONデータを渡せばメッセージを送ることができます。
インタラクティブコンポーネント
インタラクティブコンポーネントとは、メッセージやモーダル内に配置することで、ユーザーとSlack側でよりインタラクティブな受け答えを実現するコンポーネントです。
インタラクティブコンポーネントにはボタン、日付指定、セレクトボックス、ラジオボタンなどがあり、各コンポーネントの入力等をトリガーに任意の処理を行うことができます。
今回の勤怠botではこの機能を利用して、リッチメッセージのキャプチャ下部にあるような、勤怠予定の入力フォームを開くボタン、予定一覧の確認ボタンを、各メッセージに付与しました。
最後に
Slack APIを利用して、最終的に下図のような勤怠botを作ることができました。
Slack APIには他にもたくさんの機能があり、アイデア次第でSlackがもっと便利になる可能性を秘めていると実感しました。