LoginSignup
3
2

More than 3 years have passed since last update.

APIを使用してSlackのやりとりを全てcsvに保存する

Posted at

やること

SlackのチャンネルやDMのメッセージを全て保存してcsvに書き出します

使うもの

Slack APIのconversations.historyを使用します

流れ

Slack APIにてアプリを作成し、Auth Tokenを取得します

1.Create New Appを選択

名前をいい感じに設定して、取得したいDMやチャンネルがあるSlackのWorkspaceを選択してください

2.Permissionの設定

次いてはPermissionの設定をします

conversations.historyはメッセージの取得のみなので上記の4つのスコープを許可してあげます
ちなみにToken Scopesの種類はBotUserがありますがAPIで使用する場合はUser Token Scopesを使用してください

Permissions > Scopesから仕様書に記載されているRequired scope4つを見つけて設定します

これを設定しないとAPIを叩いた時のレスポンスがmissing_scopeとなります

3.Tokenの取得

permissionの設定が終わったらTokenを取得します、既に取得してしまっているのでTokenが表示されているのですが
取得されていない場合Workspaceにappをinstallするみたいなボタンが出るのでそこを押します

この画像はBotUserのみのTokenが表示されていますが、UserTokenの方を使用してください

4. 実際にAPIを叩いてメッセージを取得する

あとは実際にAPIを叩いてメッセージを取得するだけです
Defaultで100件までしか一度に取得できないのでCursorというページネーションの引数を使用して
ちょっとづつ取得してあげます
image.png

何件まで一度に取得可能か検証してないですが、上限はありそうな記述ですね
image.png

変数を代入するだけでcsvに書き出してくれるrbファイルを作成したので
よければ使ってください

代入する変数は3つです

AUTH_KEY = ''
CHANNEL_ID = ''
USER = { }

AUTH_KEYは先ほど取得したTokenです
CHANNEL_IDはSlackが自動的に生成したチャンネルのIDになります
Slackを開いてチャンネルを右クリックしてCopy linkを選択してどこかにペーストします

image.png
すると https://YOUR_WORKSPACE.slack.com/archives/CHANNEL_IDのようになるのでIDを使用します

USERのhashはkeyにユーザーのID、valueにユーザーの名前を持ちます

UserIDの確認はusers.listというAPIを使用します
ここでは詳しくは紹介しません🙇‍♂️

def messages
  messages_body = JSON.parse(call_api.body, symbolize_names: true)
  @has_more = messages_body[:response_metadata] && messages_body[:response_metadata][:next_cursor]
  messages_arr = []
  messages_body[:messages].each do |message|
    time =  Time.at(message[:ts].to_i).strftime('%Y-%m-%d %H:%M:%S')
    user = USER[message[:user].to_sym]
    text = message[:text]
    messages_arr << [time, user, text]
  end
  export_to_csv(messages_arr)
  messages unless @has_more.nil?
end

中の処理としてはmessages_body[:response_metadata][:next_cursor]が空になるまで再帰的にリクエストしてcsvに書き出している感じです

これでチャンネルのメッセージを全てcsvへ書き出すことができます
自然言語解析やログとして保存したり調査したりできますね

機密情報の流出にはくれぐれも注意して使いましょう

3
2
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
3
2