Làm thế nào tôi có thể lưu trữ hiệu quả các kênh Slack?


7

Slack cho phép lưu trữ các kênh. Chúng tôi hiện có khoảng 50 kênh không còn hoạt động với 0 người dùng.

Làm cách nào tôi có thể lưu trữ hiệu quả các kênh này mà không phải tham gia và lưu trữ từng kênh một?


Theo thẻ bạn đã chọn, câu hỏi này không có chủ đề ở đây. Tôi đã bình chọn để nó được chuyển sang Ứng dụng web .
CharlieRB

Câu trả lời:


4

Để thực sự "lưu trữ chậm" các kênh, tức là tương đương với việc chạy "/ lưu trữ" trong mỗi kênh, bạn sẽ cần một số phép thuật API.

Đầu tiên, hãy thiết lập mã thông báo API cho người dùng của bạn trong nhóm có liên quan trên https://api.slack.com/custom-integations/legacy-tokens , sau đó truy cập https://api.slack.com/methods/channels. liệt kê / kiểm tra để có được danh sách các kênh của bạn cùng với các id kênh.

Sau đó, sử dụng các id kênh này để chạy https://api.slack.com/methods/channels.archive/test cho các kênh bạn muốn lưu trữ.

Đây là một tập lệnh bash nhanh và bẩn (sử dụng jq ) Gần đây tôi đã chạy trên máy Mac của mình để lưu trữ hàng trăm kênh có chứa "sk-" trong tên kênh:

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

Nó đã hoàn thành công việc, lưu trữ khoảng 2-3 kênh mỗi giây.


@pnuts Chỉ một thời gian ngắn kể từ khi bạn liên kết với họ, nhưng tôi không tìm thấy cái nào liên quan đến bài đăng này?
Motin

Tôi muốn lưu trữ các cuộc hội thoại riêng tư, vì vậy tôi cần chuyển từ di sản channels.listsang mới hơn conversations.listvà sử dụng param &types=private_channel. Ditto đổi channels.archivethànhconversations.archive
Carl Walsh

1

Đi vào Cài đặt nhóm> Lưu trữ tin nhắn. Chọn tab "Xuất", sau đó "bắt đầu xuất". Theo thông tin trên trang này, điều này sẽ tạo ra một tệp bao gồm "một loạt các tệp JSON: một tệp mỗi kênh mỗi ngày với hoạt động, cộng với một tệp chứa thông tin về tất cả các thành viên trong nhóm của bạn."

Slack sẽ mất một thời gian để chuẩn bị xuất khẩu này, đặc biệt nếu bạn có nhiều lưu lượng tin nhắn và phương tiện truyền thông trong các kênh (nó cũng xuất hình ảnh). Sau một thời gian, nó sẽ gửi e-mail cho bạn để biết bản xuất đã sẵn sàng để tải xuống.


1
Âm thanh giống như câu hỏi là về một loại lưu trữ khác (như trong việc đưa kênh đi)?
dùng1686

Trong bối cảnh của Slack, đây là những gì tôi mong đợi một người có nghĩa là "lưu trữ". Lưu trữ chatlog hiện có trong kênh đó và đưa nó vào kho lạnh. Nếu bạn xóa kênh sau, tôi cho rằng đó là một hoạt động khác.

Để tham khảo, trên các kênh riêng lẻ, trang trợ giúp này ( get.slack.help/hc/en-us/articles/213185307-Deleting-a-channel ) hiển thị lưu trữ và xóa để tách biệt các hoạt động, không phải là một hoạt động "lưu và đóng" .

1

Đây là đoạn mã PHP nhanh mà tôi sử dụng để xóa tất cả các kênh sk

<?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

Đây là tập lệnh kotlin tôi đã viết gần đây để lưu trữ tất cả các kênh chưa có tin nhắn mới trong 3 tháng.

Lưu ý: Nếu bạn đạt giới hạn API trong nhật ký, hãy đợi 2 phút và chạy lại.

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")
}

Phụ thuộc cần thiết:

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

Nguồn dự án tại đây: https://github.com/novoda/spike/tree/master/slackdeath


0

Bạn có thể sử dụng spri.me (phích cắm không biết xấu hổ) cho việc này. Đăng nhập, chọn các kênh và "Lưu trữ".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.