LoginSignup
6
0

More than 1 year has passed since last update.

気になるあの上司は何時まで仕事をしているの?調査しよう。 Part I: データ取得編 (Slack API)

Last updated at Posted at 2021-07-28

注意

この記事は Slack の在籍状況を DB 等に保存し、そこから勤務時間帯を分析するという企画です。
Slack では 1 つのアカウントで複数のワークスペースを管理することができるため、オンライン状態でも趣味のコミュニティにいた、なんてこともあります。
決して 「Slack がオンライン = 仕事している」ということではない ので、あくまで参考程度にお願いします。

目次

概要

今回は Slack の在籍状況を API を利用して取得するセクションとなります。

Slack には Slack API という API が提供されており、チャンネルにメッセージを投稿したり、bot のようなものを作成したりと、様々なことができます。
今回は API の中に「ユーザのオンラインステータスを取得する」メソッドがありますので、それを使うことにします。

前提条件

  • curl コマンドが実行できるターミナル等がある
  • Slack を利用している

手順

トークンを取得する

まずは Slack API にアクセスし、上部の Your apps をクリックします。

slack_api_top.png

ここで Slack にまだサインインしていない場合はサインインしてください。

Your Apps の画面になったら、 Create an App をクリックします。

create_an_app.png

モーダルが表示されたら From scratch をクリックします。

from_scratch.png

アプリ名とアプリを作成するワークスペースを選択し、 Create App をクリックします。

name_app_choose_workspace.png

今回、「ユーザのオンラインステータスを取得する」ための権限設定を行いますので、 Permissions をクリックします。

permissions.png

画面を下にスクロールして Scopes の項を見つけたら、 Bot Token Scopes の Add an OAuth Scope をクリックし、出てきたダイアログで users:read を選択します。

(今回使うメソッドは Bot Token Scopes でも User Token Scopes でもどちらでも構いません。 users:read の権限があれば動きます。)

users_read.png

権限の追加が終わったら、画面上部に移動し、 OAuth Tokens for Your Workspace の中にある Install to Workspace をクリックします。

install_to_workspace.png

インストールが終わると、以下のようにトークンが表示されていますので、 Copy を押してメモ帳等に貼り付けておいてください。

copy_token.png

調査したいユーザの ID を取得する

トークンの取得が終わったら、 Slack をアプリまたはブラウザで開き、調査したいユーザのプロフィールを開きます。

プロフィールは、会話中の名前をクリックするか、ユーザのダイレクトメッセージ画面に移動して画面上部の名前をクリックし、 View full profile をクリックすると画面右側に表示されます。

プロフィールが表示されたら More -> Copy member ID の順にクリックし、メモ帳等に貼り付けておいてください。

copy_user_id.png

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 のプレスリリースは こちら

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0