実際に自分でAPIを叩いてよくわからず、ヘルプに問い合わせて確認、理解した内容のメモです。
2019年12月ごろ。
TL;DR
- conversations.list を使ってプライベートチャンネルを取得するとき、チャンネルの作られ方によってレスポンスボディの中身が変わる
- プライベートチャンネルのみを取得したいのであれば、取得した json を集計するより、最初からリクエストのオプションを指定したほうがよい
- groups.list は非推奨なので使わない
conversations.list について
Slackでは、WebAPIを使って様々なデータを取得できます。
所属するチャンネルの一覧を取得したい場合は、 conversations.list を使えます。
このAPIは、所属するワークスペースのチャンネル(=conversations)、DM(=im)、および複数人でのグループ会話(=mpin) に関する情報が取得できます。
Slackでの【プライベートチャンネル】のでき方について
Slackでは、二通りの方法でプライベートチャンネルが作成できます
- 最初からプライベートチャンネルで作成する
- パブリックチャンネルで作成し、途中でプライベートチャンネルへ変更する
最初からプライベートチャンネルで作成した場合
conversations.list
でのレスポンスボディの中で、
"is_channel": false,
"is_group": true,
となります。
もともと is_channel
はパブリックチャンネルであることを意味するbooleanで、 is_group
がその対になるプライベートチャンネルを意味するbooleanです。
最初にパブリックで作成したあとにプライベート化した場合
このケースの場合、 conversations.list
のレスポンスとしては
"is_channel": true,
"is_private": true,
として扱われます。
最初にパブリックで作成したタイミングで、 is_channel
が true となり、その後プライベート化すると、 is_group
が true になるのではなく、 is_private
が true になる、という挙動をします。
上記により、プライベートチャンネルの作成の仕方によって、同じプライベートチャンネルであってもレスポンスボディに含まれる属性に差がでます。
【パブリックチャンネル】だけを取得するなら、クエリストリングで指定を
HTTPリクエストのクエリストリングで types
オプションが使用でき、指定しなかった場合はデフォルトで public_channel
として扱われます。パブリックチャンネル/プライベートチャンネル両方を取得したい場合は、 &types=public_channel,private_channel
と、カンマ区切りで指定します。
あとで json を集計するより、こちらのほうが楽でしょう。
ただし、「全チャンネルを取得して、パブリック/プライベートに仕分けたい」場合は、この方法だと同じAPIを2回叩く必要があるので、ちょっとだけ面倒です。
非推奨APIについて
チャンネル情報の取得のためのAPIとして、パブリックチャンネル情報のための channels.list と、プライベートチャンネルのための groups.list というAPIがあります。
この二つは既に非推奨となっており、 groups.list
のほうは正確にデータを取れない場合があるというバグもあるので、使わないようにしましょう。
Don't use this method. Use conversations.list instead.