注意
この記事は Slack の在籍状況を DB 等に保存し、そこから勤務時間帯を分析するという企画です。
Slack では 1 つのアカウントで複数のワークスペースを管理することができるため、オンライン状態でも趣味のコミュニティにいた、なんてこともあります。
決して 「Slack がオンライン = 仕事している」ということではない ので、あくまで参考程度にお願いします。
目次
- Part I: データ取得編 (Slack API) <- 今回はここ!
- Part II: データ保存編 (AWS Lambda/CloudWatch)
- Part III: データ分析編 (AWS CloudWatch/スプレッドシート)
概要
今回は Slack の在籍状況を API を利用して取得するセクションとなります。
Slack には Slack API という API が提供されており、チャンネルにメッセージを投稿したり、bot のようなものを作成したりと、様々なことができます。
今回は API の中に「ユーザのオンラインステータスを取得する」メソッドがありますので、それを使うことにします。
前提条件
- curl コマンドが実行できるターミナル等がある
- Slack を利用している
手順
トークンを取得する
まずは Slack API にアクセスし、上部の Your apps
をクリックします。
ここで Slack にまだサインインしていない場合はサインインしてください。
Your Apps
の画面になったら、 Create an App
をクリックします。
モーダルが表示されたら From scratch
をクリックします。
アプリ名とアプリを作成するワークスペースを選択し、 Create App
をクリックします。
今回、「ユーザのオンラインステータスを取得する」ための権限設定を行いますので、 Permissions
をクリックします。
画面を下にスクロールして Scopes の項を見つけたら、 Bot Token Scopes の Add an OAuth Scope
をクリックし、出てきたダイアログで users:read
を選択します。
(今回使うメソッドは Bot Token Scopes でも User Token Scopes でもどちらでも構いません。 users:read
の権限があれば動きます。)
権限の追加が終わったら、画面上部に移動し、 OAuth Tokens for Your Workspace の中にある Install to Workspace
をクリックします。
インストールが終わると、以下のようにトークンが表示されていますので、 Copy
を押してメモ帳等に貼り付けておいてください。
調査したいユーザの ID を取得する
トークンの取得が終わったら、 Slack をアプリまたはブラウザで開き、調査したいユーザのプロフィールを開きます。
プロフィールは、会話中の名前をクリックするか、ユーザのダイレクトメッセージ画面に移動して画面上部の名前をクリックし、 View full profile
をクリックすると画面右側に表示されます。
プロフィールが表示されたら More
-> Copy member ID
の順にクリックし、メモ帳等に貼り付けておいてください。
API の動作テストをする
API のトークンとユーザ ID が取得できましたので、 API の動作確認を行います。
今回使用するメソッドは users.getPresence です。
ターミナルで以下のコマンドを実行し、動作確認します。
なお、 xoxb-1234-56789abcdefghijklmnop
の部分をトークンに、 W1234567890
の部分をユーザ ID に書き換えてください。
curl -X GET -H 'Authorization: Bearer xoxb-1234-56789abcdefghijklmnop' \
https://slack.com/api/users.getPresence?user=W1234567890
実行すると以下のような結果が返ってきます。
成功(オンラインの場合)
{"ok":true,"presence":"active"}
成功(オフラインの場合)
{"ok":true,"presence":"away"}
失敗した場合(例)
{"ok":false,"error":"internal_error"}
次回予告
今回はここまでです。
次回は API を定期実行して結果を保存する仕組みを構築します。
Part II: データ保存編 (AWS Lambda/CloudWatch)
余談
そういえば先週 Salesforce が Slack の買収を完了したらしいですね! (2021/07/21)
Salesforce のプレスリリースは こちら