👌
slackのバックアップ
何の記事か?
slackの諸々バックアップ方法についてです。
チャンネルメッセージ
良い感じですが、自分の環境だと一部バックアップ取れないチャンネルがありました。
自分はこれを採用しました。(サンプルコードを一部改変させる必要あり)
改変後コード
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}"
ファイル
良い感じ
Discussion