Hier ist ein schnelles und schmutziges Bash-Skript (das jq verwendet ), das ich kürzlich auf meinem Mac ausgeführt habe, um die Hunderte von Kanälen zu archivieren, die "sk-" im Kanalnamen enthielten:
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
Es hat die Arbeit erledigt und ungefähr 2-3 Kanäle pro Sekunde archiviert.
@pnuts Nur kurz jetzt, seit du mit ihnen verlinkt hast, aber ich habe keine gefunden, die mit diesem Beitrag zusammenhängen?
Motin
Ich wollte private Gespräche archivieren, also musste ich vom Legacy channels.listzum neueren wechseln conversations.listund den Parameter verwenden &types=private_channel. Das Gleiche gilt channels.archivefürconversations.archive
Carl Walsh
1
Gehen Sie zu Teameinstellungen> Nachrichtenarchiv. Wählen Sie die Registerkarte "Exportieren" und dann "Export starten". Gemäß den Informationen auf dieser Seite wird eine Datei erstellt, die aus "einer Reihe von JSON-Dateien besteht: eine pro Kanal und Tag mit Aktivität sowie eine Datei mit Informationen zu allen Mitgliedern Ihres Teams".
Es wird einige Zeit dauern, bis Slack diesen Export vorbereitet hat, insbesondere wenn Sie viel Nachrichtenverkehr und Medien in den Kanälen haben (es werden auch Bilder exportiert). Nach einiger Zeit werden Sie per E-Mail darüber informiert, dass der Export zum Download bereitsteht.
Klingt so, als ob es sich bei der Frage um eine andere Art der Archivierung handelt (wie beim Weglegen des Kanals)?
user1686
Im Kontext von Slack würde ich erwarten, dass eine Person dies mit "Archiv" meint. Speichern Sie das vorhandene Chatlog in diesem Kanal und speichern Sie es. Wenn Sie den Kanal später löschen, ist dies vermutlich eine andere Operation.
Hier ist ein Kotlin-Skript, das ich kürzlich geschrieben habe, um alle Kanäle zu archivieren, in denen seit 3 Monaten keine neue Nachricht mehr enthalten war.
Hinweis: Wenn Sie das API-Limit in den Protokollen erreicht haben, warten Sie 2 Minuten und führen Sie es erneut aus.
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")
}
Antworten:
Um die Kanäle tatsächlich "zu archivieren", dh das Äquivalent zum Ausführen von "/ archive" in jedem Kanal, benötigen Sie etwas API-Magie.
Richten Sie zunächst ein API-Token für Ihren Benutzer im entsprechenden Team unter https://api.slack.com/custom-integrations/legacy-tokens ein und gehen Sie dann zu https://api.slack.com/methods/channels. Liste / Test , um eine JSON-Liste Ihrer Kanäle zusammen mit den Kanal-IDs zu erhalten.
Verwenden Sie dann diese Kanal-IDs, um https://api.slack.com/methods/channels.archive/test für die Kanäle auszuführen, die Sie archivieren möchten.
Hier ist ein schnelles und schmutziges Bash-Skript (das jq verwendet ), das ich kürzlich auf meinem Mac ausgeführt habe, um die Hunderte von Kanälen zu archivieren, die "sk-" im Kanalnamen enthielten:
Es hat die Arbeit erledigt und ungefähr 2-3 Kanäle pro Sekunde archiviert.
quelle
channels.list
zum neueren wechselnconversations.list
und den Parameter verwenden&types=private_channel
. Das Gleiche giltchannels.archive
fürconversations.archive
Gehen Sie zu Teameinstellungen> Nachrichtenarchiv. Wählen Sie die Registerkarte "Exportieren" und dann "Export starten". Gemäß den Informationen auf dieser Seite wird eine Datei erstellt, die aus "einer Reihe von JSON-Dateien besteht: eine pro Kanal und Tag mit Aktivität sowie eine Datei mit Informationen zu allen Mitgliedern Ihres Teams".
Es wird einige Zeit dauern, bis Slack diesen Export vorbereitet hat, insbesondere wenn Sie viel Nachrichtenverkehr und Medien in den Kanälen haben (es werden auch Bilder exportiert). Nach einiger Zeit werden Sie per E-Mail darüber informiert, dass der Export zum Download bereitsteht.
quelle
Hier ist mein schnelles PHP-Skript, mit dem ich alle Sk-Kanäle lösche
quelle
Hier ist ein Kotlin-Skript, das ich kürzlich geschrieben habe, um alle Kanäle zu archivieren, in denen seit 3 Monaten keine neue Nachricht mehr enthalten war.
Hinweis: Wenn Sie das API-Limit in den Protokollen erreicht haben, warten Sie 2 Minuten und führen Sie es erneut aus.
Erforderliche Abhängigkeiten:
Quellprojekt hier: https://github.com/novoda/spikes/tree/master/slackdeath
quelle
Sie können hierfür spri.me (schamloser Stecker) verwenden. Anmelden, Kanäle auswählen und "Archivieren".
quelle