Slack API で特定チャンネルの一定期間以上前のメッセージを削除する
2019-05-09Slack のフリープランでは閲覧・検索できるメッセージの上限数が 10,000 件となっており、それを超えると 10,000 件以上前のメッセージは閲覧・検索することができません。
なので、 RSS の通知先チャンネルなど古いメッセージは削除してしまってもよい場合に、 Slack の API を使って該当するメッセージを一括で削除するのが目的です。
やりたいこと
- 特定のチャンネルで、ポストされてから一週間以上経過するメッセージを削除する
- AWS Lambda で定期的に削除処理を実行する
- Runtime は Python 3系
処理の流れ
- Slack API で、チャンネルを指定してメッセージを取得する
- メッセージのタイムスタンプを見て、一週間以上経過しているメッセージを Slack API で削除する
以上です。
Slack の API を利用するためには、 token が必要なので、
Legacy tokens
から生成・取得します。xoxp-1111...
みたいやなつです。
使用するのは、チャンネル内のメッセージを取得する channels.history
と、メッセージを削除する chat.delete
です。
それぞれの API は必須パラメータも少なく、使い方はとてもシンプルです。
channels.history の必須パラメータ
token
: Slack API の token です。channel
: メッセージを取得したいチャンネルの チャンネル ID です。チャンネル名ではありません。
chat.delete method
token
: Slack API の token ですchannel
: 削除したいメッセージがポストされているチャンネルの チャンネル ID です。チャンネル名ではありません。ts
: 削除したいメッセージのタイムスタンプです。channels.history
の取得結果に含まれているのでそのまま使います。
チャンネル ID の調べ方
各 API で使用するチャンネル ID は、デスクトップ版の Slack アプリから確認します。
左のチャンネルリストから チャンネル ID を調べたいチャンネル名を右クリックして、 copy link
を選択します。(日本語化していると日本語になってます)
コピーされたリンクは下記のようになっているので、最後のパス部分にあたる英数字がチャンネル ID になります。
https://example.slack.com/messages/AAA123CCC
ソース
ソースは下記の通りで、 Gist に置いてます。
スクリプト内では削除対象を一週間以上前としていますが、 TERM
の値を変更すれば任意の期間を指定できます。
AWS Lambda で実行する
Gist の readme にも書いてますが、 Lambda で実行する場合は イベントとして次のような JSON を渡します。
{
"target_ch_ids": [
"CHANNEL_1",
"CHANNEL_2",
"CHANNEL_3"
]
}
CloudWatch Event で定期実行する場合も、入力の設定で上のような JSON テキストを指定します。
comments powered by Disqus