LoginSignup
9
6

More than 3 years have passed since last update.

conversations.list でプライベートチャンネルの一覧を取得するとき、プライベートチャンネルの作られ方でレスポンスの中身が変わる

Last updated at Posted at 2019-12-04

実際に自分で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.

9
6
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
9
6