Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается процесс перехода на Microsoft Teams из Slack.
При планировании перехода вашей организации на Teams из Slack важно выбрать, будет ли сохраняться какая-то информация, и если да, то какая. Сначала мы опишем типы данных, которые можно перенести, а затем поэтапно расскажем, как оценить ваши потребности, спланировать переход и выполнить его.
На следующей схеме показана архитектура Slack на высоком уровне:
Спланируйте перенос данных из Slack
Что можно перенести, а что нельзя
Объем доступных для переноса данных зависит от вашего плана обслуживания Slack. Например, некоторые планы обслуживания Slack позволяют экспортировать только историю и файлы общедоступных каналов, а другие требуют запроса DocuSign для включения в экспорт закрытых каналов и прямых сообщений.
Чтобы определить ваш уровень обслуживания рабочей области Slack, войдите в Slack и прочитайте тип плана на странице Об этой рабочей области.
Дополнительные сведения о возможностях экспорта Slack можно найти на веб-сайте Slack: https://get.slack.help/hc/articles/204897248-Guide-to-Slack-import-and-export-tools
На следующей схеме вы получите общий обзор ландшафта миграции Slack, который мы рассмотрим в этой статье:
Закончив чтение этого раздела, вы будете знать:
- уровень обслуживания ваших рабочих областей Slack;
- что можно и нельзя экспортировать;
- общие подходы к экспорту;
как получить доступ к рабочим областям Slack.
Прежде чем составлять план переноса данных для вашей организации, необходимо собрать сведения о ваших рабочих областях Slack. Поняв, как используются рабочие области Slack, вы сможете лучше определить объем переносимых данных. Например, сколько рабочих областей перемещается? Используются ли они определенным отделом, несколькими отделами или всей организацией?
Если вы являетесь членом рабочей области Slack, которую вы хотите перенести, вы можете самостоятельно проанализировать использование, перейдя в <slack workspace.slack.com/stats>. Просмотрите вкладки Каналы и Участники, чтобы найти шаблоны использования. Определите, какие рабочие области следует перенести (а какие оставить на прежнем месте).
Примечание.
Если у вас нет доступа к странице статистики, вы не являетесь администратором или владельцем.
Экспорт каналов
В Slack пользователи присоединяются к каналу, который является частью рабочей области Slack, тогда как в Teams пользователи присоединяются к команде, которая является коллекцией каналов. Мы рекомендуем исходя из аналитики Slack определить, насколько активно ведется работа в каждом из каналов, и на основании этого выбрать каналы для переноса. Вы будете использовать полученный список, чтобы выяснить, как группировать каналы Slack в команды в Teams и кто должен быть членами каждой команды.
Если у вас есть платный план обслуживания Slack (кроме бесплатного), вы можете использовать аналитику Slack (<ваша рабочая область> Slack.slack.com/admin/stats#channels), чтобы узнать, насколько активен канал, когда он использовался в последний раз и сколько людей являются участниками. Это позволит вам решить, нужно ли переносить канал. По умолчанию можно экспортировать содержимое общедоступных каналов (сообщения и файлы). В зависимости от вашего плана обслуживания Slack и от того, запрашивали ли вы в Slack закрытые каналы и прямые сообщения, их также можно экспортировать.
Дополнительные сведения о возможностях экспорта Slack можно найти на веб-сайте Slack: https://get.slack.help/hc/articles/204897248-Guide-to-Slack-import-and-export-tools
Важно!
Ознакомьтесь с требованиями конфиденциальности и другими нормами вашей организации в отношении данных каналов. В вашей организации могут быть установлены обязательные правила обращения с этими данными, их хранения и обработки, в дополнение к правилам жизненного цикла для данных, идентифицирующих конечного пользователя (EUII).
Экспорт прямых сообщений
Прямые сообщения — то же самое, что и чат в Teams, который представляет собой не связанные с каналами беседы один на один или одного пользователя со многими. Возможность экспорта зависит от вашего плана обслуживания Slack, а также от того, запрашивали ли вы включение прямых сообщений в экспорт Slack. В настоящий момент Teams не поддерживает импорт прямых сообщений. Обратитесь к партнеру Майкрософт, чтобы узнать о сторонних решениях, которые помогают переносить содержимое прямых сообщений в Teams.
Поищите инструменты для экспорта прямых сообщений, например Export, в магазине приложений Slack.
Приложения и настраиваемые интеграции
Приложения в Slack подобны приложениям в Teams. Если у вас есть список приложений и их конфигураций в рабочей области, вы можете поискать их в магазине приложений Teams и узнать, доступны ли они для Teams*.
Перейдите в <slack workspace.slack.com/apps/manage>, чтобы получить список приложений и пользовательских интеграций. На этой странице также показано количество конфигураций, в которых используется каждое приложение. Настраиваемые интеграции различаются по возможностям переноса. Если это веб-перехватчик, обычно его можно отправить в соединитель Microsoft 365 или Office 365 для перевода рабочего процесса в Teams. Для ботов и других приложений возможность переноса в Teams оценивается в индивидуальном порядке.
* Если администратор ограничил использование приложений, вы не будете искать полный список доступных приложений.
Пользователи
Схемы удостоверений, используемые в Slack, не всегда могут быть прямо воспроизведены в Microsoft 365 или Office 365. Например, адреса электронной почты пользователей Slack могут на соответствовать рабочим или учебным учетным записям Microsoft 365 или Office 365. Прежде чем планировать развертывание Team, необходимо составить карту соответствий пользователей и идентификаторов.
Если вы используете платный план обслуживания Slack, вы можете перейти к <рабочей области> Slack.slack.com/admin/stats#members , чтобы получить сведения о участниках, например адрес электронной почты и тип учетной записи для каждого пользователя (например, один или несколько каналов гостевой).
Ниже приведен скрипт, который можно использовать для сравнения адресов электронной почты из экспорта Slack с Microsoft Entra ID для устранения неоднозначности имен. Кроме того, в нем сообщается, можно ли перенести пользователя в Teams. Если вам нужна помощь по использованию PowerShell, прочтите статью Начало работы с Azure PowerShell.
Connect-MgGraph
Function Get-TimeStamp {
return "[{0:MM/dd/yy} {0:HH:mm:ss}]" -f (Get-Date)
}
class User {
[ValidateNotNullOrEmpty()] $ID
[ValidateNotNullOrEmpty()] $FullName
[string] $Email
[string] $UPN
[ValidateNotNullOrEmpty()][bool] $ExistsAzureAD
[ValidateNotNullOrEmpty()][bool] $TeamsEnabled
}
$output = New-Object -type System.Collections.ObjectModel.Collection["User"]
$users = Get-Content -Raw -Path .\slackHistory\users.json | ConvertFrom-Json
Write-Host -ForegroundColor Green "$(Get-Timestamp) User Count: " $users.Count
$i=1
Write-Host "$(Get-Timestamp) Attempting direct email match.. `n"
foreach ($slackUser in $users) {
$user = New-Object User
$user.id = $slackUser.id
$user.FullName = $slackUser.name
try {
if ($null -ne $slackUser.profile.email) {
$user.email = $slackUser.profile.email
$emailSplit = $slackUser.profile.email.Split('@')
$mailNickName = $emailSplit[0]
$result = Get-MgUser -Filter "MailNickName eq '$($mailNickName)' or UserPrincipalName eq '$($slackUser.profile.email)' or proxyAddresses/any(c:c eq 'smtp:$($slackUser.profile.email)')"
if ($null -ne $result) {
$user.ExistsAzureAD = $true
$user.UPN = $result.UserPrincipalName
$assignedPlans = $result.assignedPlans
foreach ($plan in $assignedPlans) {
if ($plan.ServicePlanId -eq "57ff2da0-773e-42df-b2af-ffb7a2317929") {
if ($plan.CapabilityStatus -eq "Enabled") {
$user.TeamsEnabled = $true
}
else {
$user.TeamsEnabled = $false
}
}
}
Write-Host -ForegroundColor Green "$(Get-Timestamp) Current User $($i) - AzureAD object found:" $result.MailNickName
Write-Host -ForegroundColor Green "$(Get-Timestamp) Current User $($i) - Teams Enabled:" $user.TeamsEnabled
}
else {
$user.ExistsAzureAD = $false
Write-Host -ForegroundColor Yellow "$(Get-Timestamp) Current User $($i) - AzureAD object not found: " $slackUser.profile.email
}
}
$i++
}
catch
{
$user.ExistsAzureAD = $false
Write-Host -ForegroundColor Yellow "$(Get-Timestamp) Current User $($i) - AzureAD object not found: $($i)" $user.profile.email
$i++
}
$output.Add($user)
}
$output | Export-Csv -Path .\SlackToAzureADIdentityMapping.csv -NoTypeInformation
Write-Host "`n $(Get-Timestamp) Generated SlackToAzureADIdentityMapping.csv. Exiting..."
По окончании этого раздела у вас будет:
- список каналов в рабочей области со статистикой использования;
- список приложений Slack с конфигурациями в каждом канале;
- определен тип экспортируемой истории сообщений Slack (если это предполагается делать);
- список пользователей, учетные записи Slack которых сопоставлены с рабочими или учебными учетными записями Майкрософт, и их лицензий на Teams.
Планирование развертывания Teams
Вы экспортировали необходимые данные из Slack (и отбросили все, что не нужно). Теперь пора спланировать развертывание Teams и импорт ваших данных Slack. Это отличная возможность на базе использования определить, какие элементы хорошо подходят для группы, и включить их в план развертывания Teams. В конце этого раздела у вас будет план действий для ваших пользователей, каналов и приложений Teams.
На следующей схеме в обобщенном виде показаны проблемы, которые будут решены при развертывании Teams.
Структура групп и каналов
Рабочая область Slack может представлять одну группу, несколько групп или всю организацию. Определяя структуру, важно понимать размеры рабочих областей. Наиболее близкое отношение к группе Teams в Slack имеет рабочая область, которая содержит набор каналов. На приведенной ниже схеме показаны три различных сопоставления Slack-Teams и рекомендации по выбору подходящего для каждой рабочей области.
Соответствие между Slack и Teams | Описание |
---|---|
1 Рабочая область ➡️ Slack 1 команда | Для небольших рабочих областей Slack, которым требуется менее 200 каналов Добавьте буфер как резерв роста и для планирования закрытых каналов |
1 Рабочая область Slack несколько ➡️ команд | Используйте данные анализа рабочей области Slack для создания логических объединений каналов, которые станут основой групп |
2+ Рабочие области Slack несколько ➡️ команд | Используйте данные анализа рабочей области Slack для создания логических объединений групп и каналов, которые станут основой групп |
В решениях сторонних разработчиков есть статистика использования, с помощью которой можно оценить, насколько активен канал и сколько в нем публикаций. Как правило, часто используемые каналы целесообразно включать в планирование групп.
Кончик
Выбирая каналы, которые будут воссозданы в Teams, сохраняйте только то, что нужно для вашего подхода. Подробнее об этом можно прочитать в статье Обзор групп и каналов.
Планирование групп
Используя перечень каналов, составленный в предыдущем разделе "Планирование", совместно с владельцами и администраторами Slack выясните, какие каналы следует сделать группами, а какие — каналами в группе. Используйте Excel или Power BI, чтобы помочь в этом анализе. Они могут предоставить дополнительные аналитические сведения, чтобы помочь в обсуждении каналов, которые следует сохранить.
Кончик
В настоящий момент каждая группа в Teams может иметь не более 200 каналов. Если ваш список каналов приближается к этому пределу, попробуйте разделить его на две отдельные группы.
История каналов
Для переноса истории каналов можно использовать как бесплатные инструменты из GitHub, так и платные решения, в зависимости от требований вашей организации по сохранению истории общедоступных и закрытых каналов. Кроме того, перенос каналов можно реализовать в виде сценария в Teams.
Когда в Teams будет сформирована структура новых групп и каналов, можно будет скопировать экспортированные файлы в соответствующие библиотеки документов в каналах Teams.
Для автоматизации импорта контента можно использовать несколько подходов. Существуют бесплатные решения на GitHub (ChannelSurf или Slack Export Viewer) и партнерские решения. Выберите решение в соответствии с потребностями вашей организации.
Файлы каналов
Большинство решений экспортируют файлы. Однако эти файлы обычно представлены в виде ссылок в истории канала, и для их программного извлечения требуется ключ API.
Если файлы хранятся в Slack, после формирования групп и каналов в Teams можно программным путем скопировать их из Slack в целевой канал Teams.
Следующий сценарий извлекает файлы из Slack. Он ищет указанные данные экспорта Slack на вашем компьютере, создает папку в каждом целевом канале и загружает все файлы в эту папку. Существуют также решения сторонних разработчиков, которые могут извлекать данные. Если вам нужна помощь по использованию PowerShell, прочтите статью Начало работы с Azure PowerShell.
$ExportPath = ".\slackHistory"
$ExportContents = Get-ChildItem -path $ExportPath -Recurse
Function Get-TimeStamp {
return "[{0:MM/dd/yy} {0:HH:mm:ss}]" -f (Get-Date)
}
class File {
[string] $Name
[string] $Title
[string] $Channel
[string] $DownloadURL
[string] $MimeType
[double] $Size
[string] $ParentPath
[string] $Time
}
$channelList = Get-Content -Raw -Path .\slackHistory\channels.json | ConvertFrom-Json
$Files = New-Object -TypeName System.Collections.ObjectModel.Collection["File"]
Write-Host -ForegroundColor Green "$(Get-TimeStamp) Starting Step 1 (processing channel export for files) of 2. Total Channel Count: $($channelList.Count)"
#Iterate through each Channel listed in the Archive
foreach ($channel in $channelList) {
#Iterate through Channel folders from the Export
foreach ($folder in $ExportContents)
{
#If Channel Name matches..
if ($channel.name -eq $folder){
$channelJsons = Get-ChildItem -Path $folder.FullName -File
Write-Host -ForegroundColor White "$(Get-TimeStamp) Info: Starting to process $($channelJsons.Count) days of content for #$($channel.name)."
#Start processing the daily JSON for files
foreach ($json in $channelJsons){
$currentJson = Get-Content -Raw -Path $json.FullName | ConvertFrom-Json
#Write-Host -ForegroundColor Yellow "$(Get-TimeStamp) Info: Processing $($json.Name) in #$($channel.name).."
#Iterate through every action
foreach ($entry in $currentJson){
#If the action contained file(s)..
if($null -ne $entry.files){
#Iterate through each file and add it to the List of Files to download
foreach ($item in $entry.Files) {
$file = New-Object -TypeName File
if ($null -ne $item.url_private_download){
$file.Name = $item.name
$file.Title = $item.Title
$file.Channel = $channel.name
$file.DownloadURL = $item.url_private_download
$file.MimeType = $item.mimetype
$file.Size = $item.size
$file.ParentPath = $folder.FullName
$file.Time = $item.created
$files.Add($file)
}
}
}
}
}
}
}
}
Write-Host -ForegroundColor Green "$(Get-TimeStamp) Step 1 of 2 complete. `n"
Write-Host -ForegroundColor Green "$(Get-TimeStamp) Starting step 2 (creating folders and downloading files) of 2."
#Determine which Files folders need to be created
$FoldersToMake = New-Object System.Collections.ObjectModel.Collection["string"]
foreach ($file in $files){
if ($FoldersToMake -notcontains $file.Channel){
$FoldersToMake.Add($file.Channel)
}
}
#Create Folders
foreach ($folder in $FoldersToMake){
#$fullFolderPath = $file.ParentPath + "\Files"
$fullFolderPath = $ExportPath +"\$($folder)"
$fullFilesPath = $ExportPath +"\$($folder)\Files"
if (-not (Test-Path $fullFilesPath)){
New-Item -Path $fullFolderPath -Name "Files" -ItemType "directory"
}
}
#Downloading Files
foreach ($file in $files)
{
Write-Host -ForegroundColor Yellow "$(Get-TimeStamp) Downloading $($file.Name)."
$fullFilePath = $file.ParentPath + "\Files\" + $file.Name
if (-not (Test-Path $fullFilePath)){
try{
$request = (New-Object System.Net.WebClient).DownloadFile($file.DownloadURL, $fullFilePath)
}
catch [System.Net.WebException]{
Write-Host -ForegroundColor Red "$(Get-TimeStamp) Error: Unable to download $($file.Name) to $($fullFilePath)"
}
}
else {
try{
$extensionPosition = $file.name.LastIndexOf('.')
$splitFileName = $file.name.Substring(0,$extensionPosition)
$splitFileExtention = $file.name.Substring($extensionPosition)
$newFileName = $splitFileName + $file.Time + $splitFileExtention
$fullFilePath = $file.ParentPath + "\Files\" + $newFileName
$request = (New-Object System.Net.WebClient).DownloadFile($file.DownloadURL, $fullFilePath)
}
catch [System.Net.WebException]{
Write-Host -ForegroundColor Red "$(Get-TimeStamp) Error: Unable to download $($file.Name) to $($fullFilePath)"
}
}
}
Write-Host -ForegroundColor Green "$(Get-TimeStamp) Step 2 of 2 complete. `n"
Write-Host -ForegroundColor Green "$(Get-TimeStamp) Exiting.."
Приложения и настраиваемые интеграции
Просмотрите список приложений и пользовательских интеграций Slack (с конфигурациями) и решите, какие из них необходимо перенести в Teams. В магазине приложений Teams узнайте, доступно ли приложение. Если нет, скорее всего, есть альтернативные варианты.
Чтобы выяснить, какие приложения следует добавить в Teams, важно понять, как используется каждое приложение. Задайте себе вопрос "какую функциональность для этого канала обеспечивает приложение?", и вы поймете, какой результат дает это приложение.
Во многих случаях приложения, как правило, получают вызванные событиями данные из внешней службы (например, системы мониторинга) и отправляют сообщение в Slack. Такого же результата можно добиться, используя соединитель Microsoft 365, который может отправлять сообщения в Teams, реагируя на события.
Ниже приведены примеры решений Slack, в которых соединитель Microsoft 365 использовался в Teams для интеграции.
- Ansible
- Оповещения можно отправлять в Teams через веб-перехватчик Ansible
- New Relic
- Ознакомьтесь с этим пользовательским решением для отправки оповещений New Relic в Teams
- Nagios
- Оповещения можно интегрировать с помощью соединителей. https://github.com/isaac-galvan/nagios-teams-notify
- Zendesk
- Приложение имеется в магазине приложений Teams
- Jenkins
- Оповещения можно отправлять в Teams, используя соединитель Jenkins для Office 365
План информирования и подготовки пользователей
Успех развертывания любого программного обеспечения зависит от того, насколько пользователи подготовлены к изменению. Пользователи Slack в вашей организации легко смогут понять, как работает Teams, однако чтобы переход прошел без затруднений, им требуется обучение. Полный набор ресурсов по внедрению Teams можно найти в Центре внедрения Teams.
Например, в обоих продуктах имеются каналы, но используются они по-разному. Например, в Slack канал часто играет роль чата в Teams для кратковременных деловых сообщений. Другие существенные различия лежат в области бесед с ветками и без веток сообщений и точной настройки уведомлений.
Приглашаем ознакомиться с нашей богатой библиотекой учебных видеокурсов для конечных пользователей Teams.
Переход на Teams
Теперь, когда план перехода готов, можно приступать к созданию групп и каналов в Teams.
Создав группы и каналы, начинайте копирование файлов из каналов Slack в Teams и настройку приложений. Если вы используете решение для переноса истории, сейчас также можно настроить его. После этого вы будете готовы к лицензированию пользователей (если у них еще нет лицензий) и включению их в соответствующие группы. Чтобы уменьшить потребность в дополнительных операциях экспорта и копированиях файлов, рассмотрите возможность удаления доступа Slack на согласованную дату, которая совпадает с добавлением каждого пользователя в команду. Это удаление доступа позволяет избежать необходимости повторного экспорта и импорта разностных изменений в файлах и журнале.
Этапы развертывания Teams в вашей организации приведены на следующей схеме. Дополнительные сведения см. в статье Способ развертывания Teams.