Slackチャネルを効率的にアーカイブするにはどうすればよいですか?


7

Slackではチャネルをアーカイブできます。現在、約50のチャネルがあり、0人のユーザーでアクティブではなくなりました。

これらのチャネルを1つずつ結合してアーカイブする必要なく、これらのチャネルを効率的にアーカイブするにはどうすればよいですか?


選択したタグによると、この質問はここではトピックから外れています。Webアプリケーションに移行するよう投票しました。
CharlieRB

回答:


4

実際にチャネルを「スラックアーカイブ」するには、つまり、各チャネル内で「/ archive」を実行するのと同じように、APIの魔法が必要になります。

まず、https://api.slack.com/custom-integrations/legacy-tokensの関連チームでユーザーのAPIトークンを設定してから、https://api.slack.com/methods/channelsにアクセスます。 list / testを使用して、チャネルIDとともにチャネルのjsonリストを取得します。

次に、これらのチャネルIDを使用して、アーカイブするチャネルに対してhttps://api.slack.com/methods/channels.archive/testを実行します。

これは、チャンネル名に「sk-」が含まれている何百ものチャンネルをアーカイブするために、最近Macで実行した(jqを使用する)高速でダーティなbashスクリプトです。

TOKEN="replace-this-with-your-user-api-token-in-the-relevant-team"
curl "https://slack.com/api/channels.list?token=$TOKEN&exclude_archived=true&pretty=1" > /tmp/channels.list
IDS=$(cat /tmp/channels.list | jq '.channels[] | select(.name | contains("sk-")) | .id' | sed -e 's/"//g')
for ID in $IDS; do
    URL="https://slack.com/api/channels.archive?token=$TOKEN&channel=$ID&pretty=1"
    echo $URL
    curl "$URL"
done

1秒あたり約2〜3チャネルをアーカイブして、仕事を完了しました。


@pnutsリンクしてから少しの間だけですが、この投稿に関連するものは見つかりませんでしたか?
Motin 2017年

私はプライベートな会話をアーカイブしたかったので、レガシーchannels.listから新しいものに切り替えconversations.listてparamを使用する必要がありました&types=private_channel。同上変更channels.archiveconversations.archive
カール・ウォルシュ

1

[チームの設定]> [メッセージアーカイブ]に移動します。[エクスポート]タブを選択し、[エクスポートを開始]を選択します。このページの情報に従って、「一連のJSONファイル:アクティビティを含むチャネルごとに1つ、およびチームのすべてのメンバーに関する情報を含むファイル」で構成されるファイルが作成されます。

特にチャンネルに大量のメッセージトラフィックとメディアがある場合は、Slackがこのエクスポートを準備するのに少し時間がかかります(画像もエクスポートされます)。しばらくすると、エクスポートをダウンロードする準備ができたことを知らせるメールが送信されます。


1
問題は、別の種類のアーカイブ(チャンネルを片付けるなど)に関するもののように聞こえますか?
user1686

Slackのコンテキストでは、これは私が人が「アーカイブ」によって意味することを期待するものです。既存のチャットログをそのチャネルに保存して、コールドストレージに配置します。後でチャンネルを削除すると、別の操作になると思います。

参考までに、個々のチャネルのこのヘルプページ(get.slack.help/hc/en-us/articles/213185307-Deleting-a-channel)は、単一の「保存して閉じる」操作ではなく、個別の操作としてアーカイブと削除を示しています。

1

これは、すべてのskチャネルをクリアするために使用する簡単なPHPスクリプトです

<?php 
$json_url = "https://slack.com/api/channels.list?token=YOURTOKEN&pretty=1";
$json = file_get_contents($json_url);


$data = json_decode($json);
$m=count($data->channels);
echo "total channels:".$m."<br>";

$k=0;

for($i=0; $i<$m; $i++) {

//echo $data->channels[$i]->name."<br>";
$cn=$data->channels[$i]->name;
$cn2=$data->channels[$i]->is_archived;

if (strpos($cn, 'sk-') !== false and $cn2==0) {
   echo $data->channels[$i]->name."(".$cn2.") (id=";
   $cid=$data->channels[$i]->id;
   echo $cid.');<br>';

$json_url2 = "https://slack.com/api/channels.archive?token=YOURTOKEN&channel=".$cid."&pretty=1";
$json2 = file_get_contents($json_url2);
++$k;
}

}
echo "total sk channels archived:".$k."<br>";

?>

1

3か月間に新しいメッセージが届かなかったすべてのチャンネルをアーカイブするために最近書いたkotlinスクリプトを次に示します。

注:ログのAPI制限に達した場合は、2分間待ってから再度実行してください。

import com.squareup.moshi.Moshi
import khttp.get
import java.time.ZonedDateTime

data class JsonChannelsList(
        val channels: List<JsonChannel>
)

data class JsonChannel(
        val id: String,
        val name_normalized: String,
        val is_archived: Boolean,
        val is_private: Boolean
)

data class JsonMessages(
        val messages: List<JsonMessage>
)

data class JsonMessage(
        val username: String,
        val text: String,
        val ts: String
)

data class ArchiveableChannel(
        val id: String,
        val name: String
)

/**
 * Arg 0 is your slack api token with user access (to be able to read channels)
 */
fun main(args: Array<String>) {
    val moshi = Moshi.Builder().build()
    val jsonChannelsAdapter = moshi.adapter(JsonChannelsList::class.java)
    val jsonMessagesAdapter = moshi.adapter(JsonMessages::class.java)

    val slackToken = args[0]

    val list = get("https://slack.com/api/channels.list?token=$slackToken&exclude_archived=true&pretty=1")

    val jsonChannelsList: JsonChannelsList = jsonChannelsAdapter.fromJson(list.jsonObject.toString()) as JsonChannelsList;
    println("${list.statusCode} - ${list.jsonObject}")
    val channels = jsonChannelsList.channels
    val archivable = arrayListOf<ArchiveableChannel>()

    println("Finding Archiveable Channels")
    for (c in channels) {
        println("Channel ${c.name_normalized} ")
        if (c.is_private) {
            println("private, skipped.")
            continue
        }
        if (c.is_archived) {
            println("archived already.")
            continue
        }
        val channelId = c.id;
        val THREE_MONTHS_AGO = ZonedDateTime.now().minusMonths(3).toEpochSecond()
        val msgs = get("https://slack.com/api/channels.history?token=$slackToken&channel=$channelId&oldest=$THREE_MONTHS_AGO&count=1")
//        print("messages ")
//        println(msgs.jsonObject)

        val jsonMessages: JsonMessages = jsonMessagesAdapter.fromJson(msgs.jsonObject.toString()) as JsonMessages
        if (jsonMessages.messages.isEmpty()) {
            archivable.add(ArchiveableChannel(c.id, c.name_normalized))
        }
    }

    println("Archive Channels")
    for (archiveChannel in archivable) {
        println(archiveChannel)
        val archivedResult = get("https://slack.com/api/channels.archive?token=$slackToken&channel=${archiveChannel.id}&pretty=1")
        print("${archivedResult.statusCode} ")
        print("${archiveChannel.name} ")
        print("${archivedResult.jsonObject}.")
    }
    println("done.")
    println("Archived ${archivable.size} channels.")
    println("Archived $archivable")
}

必要な依存関係:

compile "org.jetbrains.kotlin:kotlin-stdlib:1.0.3"
compile 'khttp:khttp:0.1.0'
compile("com.squareup.moshi:moshi-kotlin:1.8.0")

ここにソースプロジェクト:https : //github.com/novoda/spikes/tree/master/slackdeath


0

これにはspri.me(恥知らずなプラグイン)を使用できます。ログインして、チャンネルと「アーカイブ」を選択します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.