👌

slackのバックアップ

2022/07/21に公開

何の記事か?

slackの諸々バックアップ方法についてです。

チャンネルメッセージ

良い感じですが、自分の環境だと一部バックアップ取れないチャンネルがありました。
https://www.takameron.info/post/slack_dump/

自分はこれを採用しました。(サンプルコードを一部改変させる必要あり)
https://zenn.dev/nariakiiwatani/articles/8ed4a7bb0d5d0b

改変後コード

var OAuthAccessToken = "${OAuthAccessToken}"; 
var channelID = "${ChannelID}";
var options = {
  headers: { 'Authorization': 'Bearer '+ OAuthAccessToken }
}

function main() {
  var fetchUrl = 'https://slack.com/api/conversations.history?channel=' + channelID + '&limit=1000';
  var res = UrlFetchApp.fetch(fetchUrl, options);
  res = JSON.parse(res);

  var messages = [];
  do {
    var newMessages = [];
    res.messages.forEach(function (v) {
      if('thread_ts' in v) {
        var fetchUrl = 'https://slack.com/api/conversations.replies?channel=' + channelID + '&ts=' + v.thread_ts;
        var reply = UrlFetchApp.fetch(fetchUrl, options);
        reply = JSON.parse(reply);
        newMessages = newMessages.concat(reply.messages.reverse());
      }
      else {
        newMessages.push(v);
      }
    });
    newMessages = newMessages.map(function (v) {
      return [
        v.client_msg_id,
        v.type,
        v.text,
        v.user,
        v.ts,
        v.reply_count || 0,
        v.reply_users_count || 0,
      ];
    });
    messages = messages.concat(newMessages);
  } while (res.has_more);

  SpreadsheetApp
    .getActiveSheet()
    .getRange('A2:G' + (messages.length+1))
    .setValues(messages.reverse());

  var title =
    [
      [
      'client_msg_id',
      'type',
      'text',
      'user',
      'ts',
      'reply_count',
      'reply_users_count'
      ]
    ]
  SpreadsheetApp
    .getActiveSheet()
    .getRange('A1:G1')
    .setValues(title);
}

おまけ

  • チャンネルのIDを一括で取得する
curl 'https://slack.com/api/conversations.list?limit=1000&types=public_channel,private_channel,mpim,im&pretty=1' \
-H 'Authorization: Bearer ${OAuth Token}'  | jq ".channels[] | { name: .name, id: .id}"

ファイル

良い感じ
https://dounokouno.com/2020/02/08/slack-workspace-uploaded-files-download-all-ruby-script/

Discussion