☁️くもをもくもくまなぶ

クラウドコンピューティングサービスの学んだことを中心につらつらと書いています

Slack APIでユーザが所属するグループの探索

Slack API

レガシートークン

xoxp- で始まるトークンについて過去発行できましたが、現在は発行できないようになっています。

Image in a image block

発行 できるToken

Bot Token

xoxb- で始まるトークン

ワークスペース、チャンネルにインストールが必要です。

スラッシュコマンド /invite $App_name が必要なものです。

User Token

xoxp- で始まるトークン

OAuth Scope としてロールを事前に定義する必要があります。

定義後はワークスペースにインストールするだけでよいです。

App-level tokens

xapp- で始まるトークン

Organization全体のすべての認証に関わるイベントを表示できるなど、前述したトークンと比べるとより幅広く権限があるので常用は避けたほうがよいかも

検索で利用するAPI

APIScopeContent Type
users.listusers:readapplication/x-www-form-urlencoded
users:read.email
conversations.listchannels:readapplication/x-www-form-urlencoded
groups:read
im:read
mpim:read
usergroups:read

Bearer Token

OAuthで一般的な認証方式として、Bearer TokenがRFC6750で定義されています。

実際にやってみる

前述したトークンの種類からUser Tokenで実施していこうと思います。

Slackアプリの作成

search-channels-start-with-user という名前のAppを作成しました

Image in a image block

Image in a image block

Image in a image block

Image in a image block

Image in a image block

Image in a image block

特定のユーザのSlack IDを抽出する

slackToken="xoxp-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxxxxxxxxxxxxx"
slackTarget="[email protected]"

slackId=$(
curl -s \
    -H 'Authorization: Bearer '${slackToken} \
    -H 'Content-type: application/x-www-form-urlencoded' \
    https://slack.com/api/users.list | \
    jq -r '.members[] | select(.profile.email == "'${slackTarget}'") | .id'
) && echo $slackId

対象のチャネルに参加しているアカウント数を確認

slackToken="xoxp-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxxxxxxxxxxxxx"
slackTargetChannelId="xxxxxxxx"

slackChannelMemCount=$(
curl -s \
  -H 'Authorization: Bearer '${slackToken} \
  -H 'Content-type: application/x-www-form-urlencoded' \
  -d 'channel='${slackTargetChannelId} \
  -d 'include_num_members=true' \
  https://slack.com/api/conversations.info | \
  jq  -r '.channel.num_members'
) && echo $slackChannelMemCount

まとめ

Slack APIをDocsの基本から参照して、これまで雰囲気で利用していたものが整理できてよかったです。

一方で過去にいろいろな方のブログに上がっているAPIが今ではDeprecated(非推奨)となっていて、

実行してみたいなと思ったAPIの多くが admin.xxx というEnterprise Gridを利用中のワークスペースでのみ利用可能なものになっていました。

それが分かっただけでも今回は収穫があったとは個人的には思います。

参考