LoginSignup
8
8

More than 3 years have passed since last update.

Slack APIのchannels.historyが使えなくなる対策

Last updated at Posted at 2020-05-11

Slack API / channels.history から conversations.history への移行メモ

Slack APIのドキュメントを見ていたら、channels.historyは、2020/6以降のアプリでは使用できない、2020/11以降は全面廃止とのことなので、記載されている通りに conversations.history に移行してみた。

完全に同じというわけではなくて、違いがあるので、気づいたところのメモ

https://api.slack.com/methods/channels.history
https://api.slack.com/methods/conversations.history

パラメータ

unreads が無くなった。これは未読メッセージの数を返すことがなくなったということ。unread_count, unread_count_display は全般的に廃止されたっぽい。Slackは既読をあえて明示しないポリシーなので、APIからも削除したのかも。

Response

大きな違いは、conversations.history は、スレッドメッセージを返さなくなったこと。

channels.history からの移行戦略

channels.history はスレッドメッセージを含んだ形で全メッセージを返していた。一方、conversations.history はスレッドメッセージを含まず、それを取得するための別API conversations.replies を使う必要がある。

conversations.replies は、token, channel に加えて ts が必須パラメータとなる。ts は親メッセージの ts である。

(余談:ts は、ドキュメントでは"Unique Identifier"と説明されているが、おそらく Time Stampだったんだろう。でもTime Stampだと同じ時間に投稿した場合は?みたいな疑問が出てくるので、"Unique Identifier"に読み替えたと思う。数値からして Time Stampだが、Unique にするために同じchannel内で同じTime Stampは発生しないように調整していると思われる。
検証したわけではないが、channel+token+tsの3つでの組み合わせがuniqueになるように設計されているのだろう。)

conversations.history の messagesのうち、スレッドを持つものは、

  • "thread_ts" : スレッドとしてのts。 (tsと同じ値であった)
  • "latest_reply" : 一番新しいリプライのts
  • "reply_users" : リプライを書き込んでいるユーザの一覧(配列)
  • "reply_users_count" : リプライを書き込んでいるユーザの数

が返る。

よって、(message.thread_ts!==undefined) の時に、{"ts":thread_ts}で conversations.replies を呼び出せば良い

channels.historyと同様の結果を得る

もし、channels.history と同様に、スレッドメッセージまで一緒くたになっているリストが欲しいのなら、

  • conversations.history でメッセージ配列を取得
  • 取得したメッセージから thread_ts を持つものをすべて抜き出し、それぞれ、conversations.replies を呼び出し、結果をマージしてゆく
  • マージが終了したメッセージ配列を ts をキーにソートする

で、ほぼ同じ結果が得られる。
ただし、conversations.history にわたす limit より、スレッドの分が追加され、メッセージ数は大きくなるなど、完全に同じにはならない。

8
8
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
8
8