Slack APIレガシートークン発行 できるTokenBot TokenUser TokenApp-level tokens検索で利用するAPIBearer Token実際にやってみるSlackアプリの作成まとめ参考
Slack API
レガシートークン
xoxp-
で始まるトークンについて過去発行できましたが、現在は発行できないようになっています。
発行 できるToken
Bot Token
xoxb-
で始まるトークン
ワークスペース、チャンネルにインストールが必要です。
スラッシュコマンド /invite $App_name
が必要なものです。
User Token
xoxp-
で始まるトークン
OAuth Scope
としてロールを事前に定義する必要があります。
定義後はワークスペースにインストールするだけでよいです。
App-level tokens
xapp-
で始まるトークン
Organization全体のすべての認証に関わるイベントを表示できるなど、前述したトークンと比べるとより幅広く権限があるので常用は避けたほうがよいかも
検索で利用するAPI
API | Scope | Content Type |
---|---|---|
users.list | users:read | application/x-www-form-urlencoded |
users:read.email | ||
conversations.list | channels:read | application/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を作成しました
特定のユーザのSlack IDを抽出する
slackToken="xoxp-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxxxxxxxxxxxxx"
slackTarget="xxx@xxx.xxx"
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を利用中のワークスペースでのみ利用可能なものになっていました。
それが分かっただけでも今回は収穫があったとは個人的には思います。