2019/12 Slack API で勤怠botを作ってみました

瀬戸

勤怠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がもっと便利になる可能性を秘めていると実感しました。

こんな記事も読まれています