Импорт сообщений из сторонних платформ в Teams с помощью Microsoft Graph

С помощью microsoft Graph можно перенести существующую историю сообщений и данные пользователей из внешней системы в Teams канал. Включив воссоздание иерархии обмена сообщениями сторонних платформ внутри Teams, пользователи могут беспрепятственно продолжать общение и действовать без прерывания.

Примечание

В дальнейшем корпорация Майкрософт может потребовать у вас или ваших клиентов оплаты дополнительных сборов на основе количества импортированных данных.

Обзор импорта

На высоком уровне процесс импорта состоит из следующих:

  1. Создайте команду с помощью back-in-timestamp.
  2. Создайте канал со временем.
  3. Импорт внешних сообщений,датируемых временем.
  4. Завершите процесс миграции группы и канала.
  5. Добавление участников группы.

Предварительные требования

Анализ и подготовка данных сообщений

  • Просмотрите сторонние данные, чтобы определить, что будет перенесено.
  • Извлечение выбранных данных из системы сторонних чатов.
  • Составить карту структуры сторонних чатов с Teams структурой.
  • Преобразование данных импорта в формат, необходимый для миграции.

Настройка клиента Office 365

  • Убедитесь, что Office 365 клиент существует для данных импорта. Дополнительные сведения о настройке Office 365 аренды для Teams см. в Office 365 клиента.
  • Убедитесь, что члены группы находятся в Azure Active Directory (AAD). Дополнительные сведения см. в добавлении нового пользователя в AAD.

Шаг 1. Создание команды

Так как вы переносили существующие данные, сохранение исходных периодов времени отправки сообщений и предотвращение активности обмена сообщениями в процессе миграции являются ключом к воссозданию существующего потока сообщений пользователя в Teams. Это достигается следующим образом:

Создайте новую команду со временем, используя свойство ресурсов createdDateTime группы. Поместите новую команду в специальное состояние, которое ограничивает пользователей от большинства действий в группе до завершения migration mode процесса миграции. Включай атрибут экземпляра со значением в запросе POST, чтобы явно идентифицировать новую команду teamCreationMode migration как созданную для миграции.

Примечание

Поле будет заполнено только для экземпляров команды или канала, которые createdDateTime были перенесены.

Разрешение

ScopeName DisplayName Описание Тип Согласие администратора? Объекты/API, охваченные
Teamwork.Migrate.All Управление миграцией в Microsoft Teams Создание и управление ресурсами для миграции в Microsoft Teams. Только для приложений Да POST /teams

Запрос (создание группы в состоянии миграции)

POST https://graph.microsoft.com/v1.0/teams

Content-Type: application/json
{
  "@microsoft.graph.teamCreationMode": "migration",
  "template@odata.bind": "https://graph.microsoft.com/v1.0/teamsTemplates('standard')",
  "displayName": "My Sample Team",
  "description": "My Sample Team’s Description",
  "createdDateTime": "2020-03-14T11:22:17.043Z"
}

Отклик

HTTP/1.1 202 Accepted
Location: /teams/{team-id}/operations/{operation-id}
Content-Location: /teams/{team-id}

Сообщение об ошибке

400 Bad Request

Сообщение об ошибке можно получить в следующих сценариях:

  • Если createdDateTime настроено на будущее.
  • Если createdDateTime правильно указано, но атрибут teamCreationMode экземпляра отсутствует или задан для значения недействительным.

Шаг 2. Создание канала

Создание канала для импортируемых сообщений аналогично сценарию создания группы:

Создайте новый канал с использованием свойства ресурса канала с помощью функции timestamp в обратном createdDateTime времени. Поместите новый канал в специальное состояние, которое ограничивает пользователей от большинства действий чата в канале до завершения migration mode процесса миграции. Включай атрибут экземпляра со значением в запросе POST, чтобы явно идентифицировать новую команду channelCreationMode migration как созданную для миграции.

Разрешение

ScopeName DisplayName Описание Тип Согласие администратора? Объекты/API, охваченные
Teamwork.Migrate.All Управление миграцией в Microsoft Teams Создание и управление ресурсами для миграции в Microsoft Teams. Только для приложений Да POST /teams

Запрос (создание канала в состоянии миграции)

POST https://graph.microsoft.com/v1.0/teams/{team-id}/channels

Content-Type: application/json
{
  "@microsoft.graph.channelCreationMode": "migration",
  "displayName": "Architecture Discussion",
  "description": "This channel is where we debate all future architecture plans",
  "membershipType": "standard",
  "createdDateTime": "2020-03-14T11:22:17.047Z"
}

Отклик

HTTP/1.1 202 Accepted

{
   "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#teams('team-id')/channels/$entity",
   "id":"id-value",
   "createdDateTime":null,
   "displayName":"Architecture Discussion",
   "description":"This channel is where we debate all future architecture plans",
   "isFavoriteByDefault":null,
   "email":null,
   "webUrl":null,
   "membershipType":null,
   "moderationSettings":null
}

Сообщение об ошибке

400 Bad Request

Сообщение об ошибке можно получить в следующих сценариях:

  • Если createdDateTime настроено на будущее.
  • Если createdDateTime правильно указано, но channelCreationMode атрибут экземпляра отсутствует или задан недействительным значением.

Шаг 3. Импорт сообщений

После создания группы и канала можно приступить к отправке сообщений в обратном времени с помощью ключей и ключей в createdDateTime from тексте запроса.

Примечание

  • Сообщения, импортируемые с более createdDateTime ранним потоком createdDateTime сообщений, не поддерживаются.
  • createdDateTime должны быть уникальными для сообщений в одном потоке.
  • createdDateTime поддерживает периоды времени с точностью миллисекунд. Например, если входящий запрос сообщения имеет значение set createdDateTime as 2020-09-16T05:50:31.0025302Z, то оно будет преобразовано в 2020-09-16T05:50:31.002Z, когда сообщение будет ingested.

Запрос (сообщение POST, которое является текстовым)

POST https://graph.microsoft.com/v1.0/teams/team-id/channels/channel-id/messages

{
   "createdDateTime":"2019-02-04T19:58:15.511Z",
   "from":{
      "user":{
         "id":"id-value",
         "displayName":"Joh Doe",
         "userIdentityType":"aadUser"
      }
   },
   "body":{
      "contentType":"html",
      "content":"Hello World"
   }
}

Отклик

HTTP/1.1 200 OK

{
   "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#teams('team-id')/channels('channel-id')/messages/$entity",
   "id":"id-value",
   "replyToId":null,
   "etag":"id-value",
   "messageType":"message",
   "createdDateTime":"2019-02-04T19:58:15.58Z",
   "lastModifiedDateTime":null,
   "deleted":false,
   "subject":null,
   "summary":null,
   "importance":"normal",
   "locale":"en-us",
   "policyViolation":null,
   "from":{
      "application":null,
      "device":null,
      "conversation":null,
      "user":{
         "id":"id-value",
         "displayName":"Joh Doe",
         "userIdentityType":"aadUser"
      }
   },
   "body":{
      "contentType":"html",
      "content":"Hello World"
   },
   "attachments":[
   ],
   "mentions":[
   ],
   "reactions":[
   ]
}

Сообщение об ошибке

400 Bad Request

Запрос (СООБЩЕНИЕ сообщения с inline image)

Примечание

  • В этом сценарии нет специальных областей разрешений, так как запрос является частью chatMessage .
  • Области применения chatMessage здесь.
POST https://graph.microsoft.com/v1.0/teams/team-id/channels/channel-id/messages

{
  "body": {
        "contentType": "html",
        "content": "<div><div>\n<div><span><img height=\"250\" src=\"../hostedContents/1/$value\" width=\"176.2295081967213\" style=\"vertical-align:bottom; width:176px; height:250px\"></span>\n\n</div>\n\n\n</div>\n</div>"
    },
    "hostedContents":[
        {
            "@microsoft.graph.temporaryId": "1",
            "contentBytes": "iVBORw0KGgoAAAANSUhEUgAAANcAAAExCAYAAADvFzeeAAAXjklEQVR4Ae2d/XNU1RnH+9e0FFrA0RCIyaS8hRA0HV5KbS1gHRgVpjMClY4GHJ3yYm1HCmXaWttaaZUZtIIFKYi8lFAkvOQ9u5vN225IARVBbX9/Os9NbrLZbMjmhCfJPX5+2Lmb3T25y3O+n/M599x7w9f+++UXwoMakIF7n4GvUdR7X1RqSk01A8CFuZm5GGUAuIwKi72wF3ABF+YyygBwGRUWc2Eu4AIuzGWUAeAyKizmwlzABVyYyygDwGVUWMyFuYALuDCXUQaAy6iwmAtzARdwfWXMdeuzT+TGxz3Sfb1LunrapL07IW3pePDQ5/qavqef0c+OdYAELuAac4jGGkLL9rdvfyo9N9ODQAqBGmmrwGlb/R0u3xG4gMspOC5hG882CoRaaCSA8n1ff9doIQMu4PIOrus3u+8ZVNnw6e/Od5AALuDKOyz5hmqiPnfnzi1J9bSbgRWCpvvQfY307wQu4BoxJCOFaDK8rwsQmQsUIQhWW93XSIsewAVckYdLQ24F0Ui/926AARdwRRounZ6Np7GyYdN9DzdFBC7gijRc43GMlQ1U9s/6HXJNjYELuHI<<-----Removed----->>>>",
            "contentType": "image/png"
        }
    ]
}

Отклик

HTTP/1.1 200 OK

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#teams('team-id')/channels('channel-id')/messages/$entity",
    "id": "id-value",
    "replyToId": null,
    "etag": "id-value",
    "messageType": "message",
    "createdDateTime": "2019-02-04T19:58:15.511Z",
    "lastModifiedDateTime": null,
    "deleted": false,
    "subject": null,
    "summary": null,
    "importance": "normal",
    "locale": "en-us",
    "policyViolation": null,
    "from": {
        "application": null,
        "device": null,
        "conversation": null,
        "user": {
            "id": "id-value",
            "displayName": "Joh Doe",
            "userIdentityType": "aadUser"
        }
    },
      "body": {
        "contentType": "html",
        "content": "<div><div>\n<div><span><img height=\"250\" src=\"https://graph.microsoft.com/teams/teamId/channels/channelId/messages/id-value/hostedContents/hostedContentId/$value\" width=\"176.2295081967213\" style=\"vertical-align:bottom; width:176px; height:250px\"></span>\n\n</div>\n\n\n</div>\n</div>"
    },
    "attachments": [],
    "mentions": [],
    "reactions": []
}

Шаг 4. Полный режим миграции

После завершения процесса миграции сообщений команда и канал вывели из режима миграции с помощью completeMigration метода. Этот шаг открывает ресурсы команды и канала для общего использования членами группы. Действие привязано к team экземпляру. Перед завершением работы группы все каналы должны быть завершены из режима миграции.

Запрос (режим переноса конечных каналов)

POST https://graph.microsoft.com/v1.0/teams/team-id/channels/channel-id/completeMigration

Отклик

HTTP/1.1 204 NoContent

Запрос (режим миграции конечных команд)

POST https://graph.microsoft.com/v1.0/teams/team-id/completeMigration

Отклик

HTTP/1.1 204 NoContent

Действие, которое team вызвано или channel которое не в migrationMode .

Шаг 5. Добавление членов группы

Вы можете добавить участника в команду с помощью пользовательского Teams или Microsoft Graph API участника:

Запрос (добавление участника)

POST https://graph.microsoft.com/beta/teams/{team-id}/members
Content-type: application/json
Content-length: 30
{
"@odata.type": "#microsoft.graph.aadUserConversationMember",
"roles": [],
"user@odata.bind": "https://graph.microsoft.com/beta/users/{user-id}"
}

Отклик

HTTP/1.1 204 No Content

Советы и дополнительные сведения

  • После запроса нельзя импортировать дополнительные сообщения completeMigration в команду.

  • Вы можете добавить членов группы в новую команду только после успешного ответа на completeMigration запрос.

  • Регулирование. Импорт сообщений по пять RPS на канал.

  • Если требуется внести исправление в результаты миграции, необходимо удалить команду и повторить действия по созданию группы и каналу и повторной миграции сообщений.

Примечание

В настоящее время inline images are the only type of media supported by the import message API schpi.

Область импорта контента

В следующей таблице содержится область контента:

В области В настоящее время вне области
Сообщения группы и канала 1:1 и групповые сообщения чата
Созданное время исходного сообщения Закрытые каналы
Inline images as part of the message При упоминаний
Ссылки на существующие файлы в SPO или OneDrive Реакции
Сообщения с богатым текстом Видео
Цепочка ответов на сообщения Объявления
Обработка высокой пропускной способности Фрагменты кода
Наклейки
Emojis
Цитаты
Перекрестные сообщения между каналами

См. также

Интеграция Graph и Teams Майкрософт