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 より、スレッドの分が追加され、メッセージ数は大きくなるなど、完全に同じにはならない。