「Slackチャンネルのメッセージを一気に削除したい」
「generalチャンネルのメッセージが新しい人に見られたくない」
この記事は、そんな方へ向けて書いています。
先取り結論
- generalチャンネル自体は削除できないし、プライベートにもできない
- チャンネルへの投稿をまとめて削除する機能はSlackには無い
- プログラミングができない人でも、GASへのコピペで削除システムを実行できる(5分で消せます)
- 他記事に無い「投稿への返信」 の削除も対応!
目次
Slackチャンネルの投稿を一気に削除する手順
generalチャンネルは削除できませんし、プライベートチャンネルに設定することもできません。
そこで、チャンネルへの投稿を一気に削除するスクリプトを公開します。
一つ一つ手順を追って説明していますし、コード部分はコピペで問題ありません。今回のコードは投稿への返信投稿の削除も対応しております。
簡単な流れは以下の通り。
- Slack内でアプリを作成
- アプリに権限を付与
- ワークスペースにアプリをインストール
- アプリのトークン、チャンネルIDを控える
- GASを開いてコードをコピペ
- GASの認証
6ステップぐらいありますが、実際は5分ほどで完了します。
Slack内でアプリを作成
まずはSlack(ブラウザ)にアクセスし、Slack apiの画面に行きましょう。
「Create New App」をクリック。
「From scratch」を選択します。
アプリ名を入力し、削除したいチャンネルのあるワークスペースを選択します。
※Workspaceが一つの場合は、そのWorkspaceを選択してOKです。
「Create App」をクリックしましょう。
アプリに権限を付与
続いて、作成したアプリに閲覧権限、削除権限を付与します。
左側メニューの「OAuth 6 Permissions」をクリックしましょう。
「Scopes」の欄で、User Token Scopesの「Add an OAuth Scope」をクリックしてください。
入力欄に「chat」や「channels」と打ち込むと、候補が出てきますので、その中から以下の2つの権限を追加してください。
- chat:write
- channels:history
ワークスペースにアプリをインストール
最後に、作成したアプリをワークスペースに追加します。
「Install App」をクリックしましょう。
さらに「Install to Workspace」をクリック。
今回はベストクラウドの運営会社である株式会社JEALARTのワークスペースに、アプリを追加してみます。
「許可する」をクリックしてください。
アプリのトークン、チャンネルIDを控える
上記の画面が出てくるので、User OAuth Tokenをコピーして、メモ帳に貼り付けておいてください。
また、メッセージ削除対象のチャンネルIDもコピーしておきます。
Slackアプリ上で、チャンネル名をクリックしてください。
管理画面の一番下にチャンネルIDが表示されています。
こちらもコピーしてメモ帳に貼り付けておいてください。
これで、事前準備は完了です。
今回はこちらのチャンネルを削除します。
GASを開いてコードをコピペ
GAS上にスクリプトを貼り付けます。
このような画面が出てくるので、ひとまず全てテキストを削除してください。
その上で、以下のコードを貼り付けてください。
function delete_slack_message() {
// user_token, channel_idを記載
const user_token = "xoxp-XXXXXXXXX";
const channel_id = "XXXXXXXXXXXX";
const headers = {
'Authorization': 'Bearer '+ user_token
};
const options = {
'headers': headers,
'followRedirects': false,
'muteHttpExceptions': false
};
// 対象チャンネルのメッセージ一覧を取得(100件)
const url = "https://slack.com/api/conversations.history?channel=" + channel_id;
const response = UrlFetchApp.fetch(url, options);
const data = JSON.parse(response.getContentText());
const messages = data.messages
for (let message of messages) {
// 返信を1つずつ削除
while(message.latest_reply){
let url = "https://slack.com/api/chat.delete?channel=" + channel_id + "&ts=" + message["latest_reply"];
UrlFetchApp.fetch(url, options);
Utilities.sleep(1000);
// latest_replayを削除後のメッセージを取得
url = "https://slack.com/api/conversations.history?channel=" + channel_id + "&latest=" + message["ts"] + "&inclusive=true&limit=1";
const response = UrlFetchApp.fetch(url, options);
const data = JSON.parse(response.getContentText());
message = data.messages[0]
}
const url = "https://slack.com/api/chat.delete?channel=" + channel_id + "&ts=" + message["ts"];
UrlFetchApp.fetch(url, options);
Utilities.sleep(1000);
}
}
そして、「"」で囲まれた部分は先程控えておいた文字列に書き換えます。
const user_token = "xoxp-XXXXXXXXX";
const channel_id = "XXXXXXXXXXXX";
その上で、実行ボタン(▼)をクリックしてください。
GASの認証
GoogleAppsScriptが実際に実行しますよ、という認証を行います。
「権限を確認」をクリックしてください。
さらに「このアプリはGoogleで確認されていません」と表示されるので、まずは「詳細」をクリック。
「安全ではないページに移動」をクリックします。
Googleの認証方式として、このようにビビらせて来ますが、基本的に自分の作成したスクリプトであれば問題ありません。
詳細は以下を確認してください。
-
GAS実行時に「このアプリはGoogleで確認されていません」と出る原因と対処法
「Google Apps Scriptを実行しようとしたら、危険サイトのような警告が出た」 「確認されていません、以降の進め方がわからない」 「アプリを承認していいのかどうかわからない」 この記事は、 ...
実行ログが表示されました。
上記のように、メッセージが削除されました!
おめでとうございます!
Slack投稿削除システムの注意点・ポイント
- messageは一度に100件取得制限有りのため、メッセージが残ったら再度実行する
- 大量のmessage削除前提なら、繰り返し処理入れてもいいかもしれない
- 定期的に消したいならGASのトリガで行うのもあり
- slack apiには頻度制限(rate limit)があるが、とりあえず1s待って問題無し
- 現状message数の上限100件があるため、起きることはないと思うが、GAS実行時間制限に引っかかる場合は再度実行する
公開したコードのポイントは、一度に削除できるメッセージは100件まで、ということです。
メッセージが残っていたら、再度実行することでさらにメッセージを削除できます。
Slackチャンネル削除システムのポイント
- 1度に100件まで削除できる
- トークンとチャンネルIDの書き換えを忘れずに!
- 自己責任でお願いします