Microsoft Graph を使用してサードパーティのプラットフォーム メッセージを Teams にインポートする

Microsoft Graph を使用すると、ユーザーの既存のメッセージ履歴とデータを外部システムから Teams に移行できます。 ユーザーはシームレスな方法でコミュニケーションを続け、Teams 内のサード パーティのプラットフォーム メッセージング階層の再作成を有効にすることで中断することなく続行できます。

アクセス許可

Teams にメッセージをインポートするには、アプリに次のアクセス許可が必要です。

注:

Teamwork.Migrate.All は、大量の操作に必要なベースライン アクセス許可です。 個々の API には追加のアクセス許可が必要な場合があります。各 API のリンクされたドキュメントを参照してください。

前提条件

メッセージを移行するための前提条件として、次のアクセス許可が必要です。

会話の作成

タスク スコープ名
Chatの作成 Chat.Create
チームの作成 Team.CreateTeamwork.Migrate.All
チャネルを作成する Channel.CreateChannel.Create.GroupTeamwork.Migrate.All

会話メンバーを管理する

タスク スコープ名
メンバー Chat追加 Chat。管理。ChatChat。ReadWrite.AllChatMember.ReadWrite.All
メンバー Chat削除する Chat。管理。ChatChatMember.ReadWrite.All
チーム メンバーの追加 TeamMember.ReadWriteNonOwnerRole.AllTeamMember.ReadWrite.All
チーム メンバーの削除 TeamMember.ReadWriteNonOwnerRole.AllTeamMember.ReadWrite.All
チャネル メンバーの追加 ChannelMember.ReadWrite.Group,ChannelMember.ReadWrite.All
チャネル メンバーの削除 ChannelMember.ReadWrite.Group,ChannelMember.ReadWrite.All

移行要求

Teams にメッセージを移行するには、次のアクセス許可が必要です。

移行 API スコープ名 表示名 説明 管理者の同意が必要 対象となるエンティティ/API
  • StartChatMigration
  • StartChannelMigration
  • ImportChatMessage
  • ImportChannelMessage
  • CompleteChatMigration
  • CompleteChannelMigration
Teamwork.Migrate.All Microsoft Teams への移行の管理 アプリが Teams への移行用のリソースを作成および管理できるようにします。 アプリケーション専用 はい POST /team

サポートされているチャネルとチャットの種類

Teams では、外部メッセージを既存のチャネルまたはチャットに移行できます。 作成時に関係なく、Teams に既に存在するチャネルまたはチャットを使用します。 この方法では、Teams で既にアクティブになっているチャネルに既存のコンテキストを追加し、進行中の会話の継続性を維持できます。 既存のチャネルまたはチャットで移行モードを有効にするには、「 既存のチャネルの移行」を参照してください。

注:

フェデレーション コンテンツはインポートできません。 インポートされたすべてのコンテンツは、認証されたテナントから取得する必要があります。
スレッドで startMigration を呼び出すアプリケーションは、その移行セッションをエンドツーエンドで所有します。 同じアプリで importMessagecompleteMigrationを呼び出す必要があります。 所有しているアプリが移行を完了するまで、スレッドでこれらの API を呼び出すことができるアプリは他にありません。

migrationMode は、データ移行中に特定の操作を防ぐことによってデータの整合性を確保する特殊な状態です。

  • サポートされているすべてのチャネルとチャットの種類:
    • これにより、カスタム タイムスタンプを使用して履歴メッセージをインポートできます
    • 元の会話構造と階層が維持されます

インポートのコンテンツ スコープ

次の表に、既存のチャネルとチャットのコンテンツ スコープを示します。

スコープ内 対象外
チーム (全般) ビデオ
元のメッセージの作成時刻 チャネル間のクロス 投稿
メッセージの一部としてのインライン イメージ SharePoint で生成されたリンク
Microsoft 365、SharePoint Online (SPO) または OneDrive (OD) の既存のファイルへのリンク
リッチ テキストを含むメッセージ
メッセージ応答チェーン
高スループット処理
1:1 とグループ チャット メッセージ
Standard、プライベート、および共有チャネル メッセージ
最大 250 件の反応
@mentionsと絵文字
コード スニペット
見積もり
お知らせ
ステッカー

前提条件

メッセージ データを分析して準備する

  • サード パーティのデータを確認して、移行する対象を決定します。
  • 選択したデータをサード パーティのチャット システムから抽出します。
  • サード パーティのチャット構造を Teams 構造にマッピングします。
  • インポート データを移行に必要な形式に変換します。

教育機関向け Microsoft 365 テナントをセットアップする

  • インポート データに Microsoft 365 テナントが存在することを確認します。 Teams 用の Microsoft 365 テナントの設定の詳細については、「 Microsoft 365 テナントを準備する」を参照してください。
  • チーム メンバーがMicrosoft Entra IDされていることを確認します。 詳細については、「Microsoft Entra IDに新しいユーザーを追加する」を参照してください。

Teams に履歴メッセージをインポートする

次の手順を実行して、履歴メッセージを既存のチャネルまたはチャットにシームレスにインポートできます。

  1. 移行を開始する
  2. 移行の状態を確認する
  3. メッセージのインポート
  4. Complete migration
  5. 移行の完了を確認する

手順 1: 移行を開始する

サード パーティのプラットフォームから Teams へのユーザーのメッセージ履歴の移行を開始するには、既存のチャネルまたはチャットを使用します。

既存のチャネルとチャットでの移行を開始する

既存のチャネルまたはチャットでは、 startMigration API を使用して チャネル移行モードを有効 にするか 、チャット移行モードを有効にしますstartMigration は、移行状態を InProgress に設定し、メッセージのインポート プロセスを開始します。 詳細については、以下を参照してください:

既存のチャネル移行

既存のチャネルで移行モードを有効にするには、 startMigration API を使用します。

要求 (移行モードの既存のチャネル)
POST https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/startMigration
{
  "conversationCreationDateTime":"2024-01-01T00:00:00Z"
}

ヒント

Microsoft Graph では、 DateTimeOffset を使用して、正確なタイム ゾーンの UTC オフセットを使用して日付と時刻を表します。 conversationCreationDateTime値は、DateTimeOffsetの最小値より大きく、チャネルのcreatedDateTimeの現在の値よりも小さくする必要があります。

応答

要求が成功した場合、メソッドは空の HTTP 応答を返します。

HTTP/1.1 204 No Content
POST https://graph.microsoft.com/v1.0/teams/57fb72d0-d811-46f4-8947-305e6072eaa5/channels/19:4b6bed8d24574f6a9e436813cb2617d8@thread.tacv2/startMigration
{
  "conversationCreationDateTime":"2024-01-01T00:00:00Z"
}

既存のチャット移行

既存のチャットで移行モードを有効にするには、 startMigration API を使用します。

要求 (移行モードの既存のチャット)
POST https://graph.microsoft.com/v1.0/chats/{chat-id}/startMigration
{
  "conversationCreationDateTime":"2024-01-01T00:00:00Z"
}

ヒント

Microsoft Graph では、 DateTimeOffset を使用して、正確なタイム ゾーンの UTC オフセットを使用して日付と時刻を表します。 conversationCreationDateTimeは、DateTimeOffsetの最小値より大きく、チャットのcreatedDateTimeの現在の値よりも小さくする必要があります。

応答

要求が成功した場合、メソッドは空の HTTP 応答を返します。

HTTP/1.1 204 No Content
POST https://graph.microsoft.com/v1.0/teams/57fb72d0-d811-46f4-8947-305e6072eaa5/chats/19:4b6bed8d24574f6a9e436813cb2617d8@thread.tacv2/startMigration 

{ 
  "conversationCreationDateTime":"2024-01-01T00:00:00Z" 
} 

次の重要な点を考慮してください。

  • 移行するメッセージの最小タイムスタンプを定義します。 指定されたタイムスタンプは、チャネルまたはチャットの現在の createdDateTimeよりも古い必要があります。 このタイムスタンプは、チャネルの既存の createdDateTime を置き換えます。 createdDateTimeを過去のタイムスタンプに更新した場合、後のタイムスタンプに再度移動することはできません。
  • creationDateTime プロパティは、要求本文では省略可能です。 省略した場合、 startMigration API は現在の日付と時刻を最小タイムスタンプとして使用します。
  • startMigration API は、移行モードを指定されたチャネルまたはチャットのInProgressに設定することで、メッセージ移行プロセスを開始します。

手順 2: 移行の状態を確認する

Get channelまたはGet chatを呼び出して、migrationMode状態がInProgressに設定されていることを確認します。 詳細については、以下を参照してください:

また、この会話の移行が進行中であることを示すバナーを使用して、ターゲット チャットまたはチャネルが Teams で migrationMode 状態であることを確認することもできます 。この間、メッセージの順序が間に合う可能性があります
このバナーは、ターゲット チャットまたはチャネルの移行が完了するまで、Teams UI に表示されたままです。

手順 3: メッセージをインポートする

createdDateTimeキーとfromキーを要求本文に含めることで、バックインタイム メッセージをインポートできるようになりました。

注:

  • メッセージをインポートするときは、メッセージの createdDateTime が宛先チャットまたはチャネルの createdDateTime よりも後であることを確認します。
  • createdDateTime は、同じスレッド内のメッセージ間で一意である必要があります。
  • createdDateTime は、ミリ秒単位の精度のタイム スタンプをサポートします。 たとえば、受信要求メッセージが createdDateTime2020-09-16T05:50:31.0025302Z に設定されている場合、API はメッセージを取り込むときに 2020-09-16T05:50:31.002Z に 変換します。

要求 (テキスト専用の 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":"John 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":[
   ]
}

エラー メッセージ

createdDateTime プロパティを将来の日付と時刻に設定すると、次のエラー メッセージが表示されます。

400 Bad Request

要求 (インライン イメージを含む POST メッセージ)

注:

  • リクエストは 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":"John 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 API を使用して 移行状態を完了としてマークします。 移行の完了は、チャットまたはチャネルのすべてのユーザーに同じメッセージが確実に表示されるようにするために必要です。 移行を完了しないと、Microsoft Teams クライアント上のチャットまたはチャネルのビューが一貫性を失う可能性があります。

要求 (既存のチャネルの移行を完了する)

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/chats/{chat-id}/completeMigration

応答

HTTP/1.1 204 NoContent

省略可能: 移行後にグループ チャット メンバーの履歴を更新する

グループ チャットでメッセージの移行を完了すると、必要に応じて、Microsoft Graph の visibleHistoryStartDateTime プロパティを使用してメンバーの共有履歴を更新できます。 このプロパティは、チャット メンバーが会話でメッセージを表示できる最も早い時刻を設定します。 インポートされたメッセージがプロパティの値より古い場合、プロパティを更新しない限り表示されません。

visibleHistoryStartDateTime プロパティを更新するには:

  1. チャットからメンバーを削除します。
  2. インポートされたメッセージを含む新しいvisibleHistoryStartDateTimeでメンバーを再度追加します。

元のチャットが午後 10 時に作成され、午前 1 時に更新され、メッセージが午前 9 時にインポートされ、メンバー A の共有履歴が午前 10 時に開始されるシナリオを考えてみましょう。 メンバー A がインポートされた 9 AM メッセージを確実に表示するには、次の手順を実行します。

  1. チャットからメンバー A を削除します。
  2. visibleHistoryStartDateTime プロパティが午前 9 時より前に設定されているメンバー A を追加します。

手順 5: 移行の完了を確認する

[チャネルの取得] または [チャットの取得] を呼び出して、migrationModeCompletedとしてマークされていることを確認します。

ヒントとその他の情報

  • 既存のチャネルまたはチャットで completeMigration を呼び出した後、 startMigration API を使用してメッセージのインポートを続行できます。
  • 調整: チャネルあたり 5 つの RPS でメッセージがインポートされます。

  • 移行結果を修正する必要がある場合は、Teams を削除し、Teams とチャネルを作成する手順を繰り返し、メッセージを再移行する必要があります。

注:

インライン イメージは、インポート メッセージ API スキーマでサポートされる唯一の種類のメディアです。

コード サンプル

サンプルの名前 説明 Node.js C# Python
グラフ チャットの移行 このサンプル アプリは、外部プラットフォームから Teams に履歴メッセージを移行するために使用できます。 表示 表示 該当なし

関連項目