パブリックチャンネルにあるSlackのログをGoogle Apps Script (GAS)を用いてGoogle Driveに保存するためのプログラムです.プライベートチャンネル対応の場合にはトークンの権限などを操作することで可能です.
If you prefer English, see README_en.md, please.
このプログラムはSlack APIのconversations.historyを利用します.channels.historyは利用しません.channels.history
については
"channels.history" method is deprecated. It will stop functioning in February 2021 and will not work with newly created apps after June 10th, 2020).
というように,つまりchannels.history
は使えなくなる旨のアナウンスされています.Slack側としてはchannels.history
(パブリックチャンネル),groups.history
(プライベートチャンネル),im.history
(DM),mpim.history
(複数人のDM)の扱いをconversations.history
に統合したいようです.その一方で,channels.history
などでは取得できていたスレッド内の投稿がconversations.history
ではできなくなってしました.スレッド内の投稿はスレッド元の投稿のチャンネルとタイムスタンプで一意に特定できるようであり,取得のためにはチャンネルとタイムスタンプを用いてconversations.replies
というAPIを呼び出す必要があります.
NOTE:
スレッド内の投稿を取得するため,このプログラムではconversations.repliesを利用します.このAPIはそれぞれのスレッドごとに1回呼び出す必要があります.さらに,conversations.replies
はRate limitingがTier 3
,つまり1分間に50回程度しか呼び出すことができず超過した場合にはAPIを呼び出してもエラーが返ってきます.この制限を守るため,Google Apps Scriptの実行時間の制限(G Suite Business / Enterprise / Education以外の場合には6分程度, https://developers.google.com/apps-script/guides/services/quotas)を超える可能性があります.
実行時間の超過を防ぐため,1回の実行では1つのチャンネル内の投稿のみ取得します.全チャンネルのスレッドの投稿を取得するためには,チャンネル数と同じ回数実行する必要があります.
NOTE 各WorkSpaceでSlack Appを1つ作成する必要があります。(無料プランを利用してる方が閲覧しているかと存じますが) 無料プランを利用している場合,10件のアプリしか導入できないことに留意してください.
- https://api.slack.com/appsにアクセスします.
- "Create a Slack App"をクリックし,フォームに記入します.
- "OAuth & Permissions"に移動し,"Scopes"内にある"User Token Scopes"を見つけ,"Add an OAuth Scope"をクリックして以下の4つのOAuth Scopesを追加します.
- channels:history
- channels:read
- files:read
- users:read
- "Install App to Workspace"をクリックしてワークスペースにインストールし,"OAuth Access Token"を控えておきます.
- Google DriveなどからGoogle Apps Scriptのプロジェクトを作成します.
- プロジェクトのフォルダIDを確認します.プロジェクトのGoogle DriveのURLが"https://drive.google.com/drive/folders/hogehoge"ならば,folder ID は "hogehoge"です.
- slack_log_gas.gsをコピー&ペースト等を用いて作成します.
- slack_log_gas.gsの1, 2行目の
FOLDER_NAME
とSpreadSheetName
を自身の設定したいログのフォルダ名とスプレッドシート名に変更してください. - ファイル->プロジェクトのプロパティから「スクリプトのプロパティタブ」に移動し,以下の3つのプロパティを追加します.
Key Value slack_api_token Slackで控えたOAuth Access Token folder_id hogehoge last_channel_no -1 - GUIを用いた設定がうまくできない場合にはset_properties.gsを用いてみてください.その際,値を自身のものに置き換えてください.
Run
関数を実行するか,トリガーの設定をします.全チャンネルの全スレッドを取得したい場合にはチャンネルの数と同じ回数の実行が必要です.- "Authorization required"のポップアップが出てきた場合には言われた通り権限を設定してください.
- 残念ながら,すべてのファイルが保存されるわけではありません(解決されていません)
- スレッド内の投稿についてはチャンネルごとに前回のログ取得時の最新のログから1か月前より後にチャンネルに投稿された(つまりスレッド内の投稿でない)メッセージ内のスレッドを追加します.チャンネルへの投稿が1か月より前かつスレッドへの投稿が1か月以内のものは取得されません.