この記事で出来るようになること
- slack上で3〜5クリックするだけで出勤・退勤などの状況報告
- スラッシュコマンド実行だけで、メンバーの勤怠状況をひと目で確認
経緯
皆様の会社では勤怠報告いかがされていますでしょうか?
自分の所属する部署では、以前の記事で紹介したslackのワークフローを用いた出勤/退勤etc報告をしています。
しかし、メンバーが増えた関係で「今現在の勤怠状況を一覧表示して確認」できる必要性が出ました。
(突発的な打ち合わせをする前に「他拠点の人たちが昼を済ませたか確認」などで有用です。)
以下に、この問題を解決するために実装した仕組みをご紹介します。
組み合わせる機能
- ワークフロービルダー
- スラッシュコマンド
- Bot(slack apps)
- GoogleAppsScript
この4種類を組み合わせます。処理の流れは下記の図のとおりです。
勤怠報告する側
キーとなる処理
- ワークフローで生成される投稿は、botに対してメンションをつけることが可能です。
例:@attendBot 出勤しました
- slackのbotの設定で「メンション付きの投稿を受けた場合に、そのイベントをトリガーとして特定のURLにpostする」と設定することが可能です。参考:公式ドキュメント
- つまりこの2つを組み合わせると、ワークフロー経由で「特定のURLに"事前に定めた内容をpostする"」ということが可能となります。
一覧出力する側
実装手順
GoogleAppsScriptのコード
こちらのgithubリンクをご確認ください。
- 報告側でbotからのpostを受ける
- 出力側でスラッシュコマンドを受ける
という処理をしているだけなので、詳細な説明は割愛させていただきます。
postMessageではなくpostEphemeralを使うことで「一覧出力したことを実行者以外に分からないようにする」配慮を入れています。
※もしGASでslackの通信を受けることに慣れていない方は、以前の解説記事をご覧ください。
slackのbotの設定
botでメンションつき投稿を受ける設定が必要なので、その手順を下記にまとめます。
1.Apps追加
slackAppsのページにアクセスし、
CreateNewAppを押します。
2.Appの名称設定
AppNameに適当な名前を入力し、CreateAppします。
3.権限設定
画面左列のBasic InfomationからPermissionsを選択します。
4.Scope追加
Add an OAuth Scopeを押して、app_mentions:read
とchat:write
を追加します。
これでbotが「メンション付き投稿の認識」「投稿」が出来るようになります。
5.GASスクリプトのURL取得
ここで一旦GASのスクリプトが通信を受けるURLを取得します。
この手順は以前の記事の1-5の手順をご確認ください。
https://script.google.com/macros/s/*****〜
というURLを取得しておきます。
6.Event設定
左列のEvent Subscriptionsから、Enabele EventsをOnにします。
また、Request URLには先程の5.で取得したGASのURLを入力します。
これでメンション付き投稿をトリガーとして、GASにpostされるようになります。
7.Slash Commands設定
7-1.コマンド追加
7-2.コマンドの各種設定
Command名、URL、説明を埋めてSaveします。
Request URLは5.で取得したGASのURLを入れてください。
8.OAuth設定
8-1.Workspaceへの追加
画面左列のOAuth&Permissionsから、Install App to Workspaceを押します。
8-2.追加
4.で追加したScopeが与えられていることを確認して、Allowを押します。
9.OAuth Token取得
画面左列のInstall Appから、トークンの値を取得します。
10.Verification Token取得
左列のBasic Informationから、Verification Tokenの値を取得します。
11.GASへのトークン登録
上記の9.及び10.で取得したトークンをGASスクリプトに登録します。
この手順に関しては以前の記事の手順3-1をご確認ください。
以上でslackAppの設定は終了です。
slackAppの導入
1.チャンネルへApp(botユーザー)を追加
勤怠報告を実施するチャンネルを開き、Detail(画面右上のアイコンから開く)から「Add apps」を押します。
2.bot追加
3.BotのID特定
users.listのapiページでTestMethodを実行し、botの名前でページ内検索(command+f)をして、botのIDを取得します。
ワークフローの設定
ワークフロー自体の導入は以前の記事の手順9をご確認ください。
ワークフローで投稿される内容の先頭にbotのIDを<>
で括って追記します。
上記の「3.BotのID特定」で特定したIDが U01ABCDEF23
だったとすると、
フォームの選択肢としては <@U01ABCDEF23> :sunny: 出勤
とすることで、
botにメンションがついた形式で表示されます。
最後に
以上ですべての設定が完了しました。
- ワークフローから勤怠報告
- スラッシュコマンドから勤怠一覧出力
というのがお手元で確認できると思います。
設定手順が長くなってしまったのですが、この「ワークフロー、bot、スラッシュコマンドの組み合わせ」では様々なことが自動化できると思いますので、活用して頂ければ幸いです。
ご精読ありがとうございました。