Microsoft Graph を使用して、チームおよびチャネルのメンバーシップの変更に関する変更通知を受け取る

変更通知を使用すると、 チーム またはプライベート チャネルでメンバーシップの変更 (作成、更新、削除) をサブスクライブ できます。 チームまたはプライベート チャネルでメンバーが追加、削除、または更新されるたびに通知を受け取ることができます。 通知のリソース データを取得することもできます。したがって、API を呼び出してペイロードを取得する必要はありません。

チームまたはチャネル コンテキストでの conversationMember リソースのシナリオに関するこの記事に進みます。 または、 他の Microsoft Teams リソースの変更通知について説明します。

注:

今後 1 時間を超えるサブスクリプション の有効期限DateTime を要求する場合は、サブスクリプション要求に lifecycleNotificationUrl プロパティを含めることによってライフサイクル通知をサブスクライブする必要があります。 それ以外の場合、サブスクリプション要求は次のエラー メッセージで失敗します。 lifecycleNotificationUrl は、expirationDateTime 値が 1 時間を超える値に設定されている場合、このリソースでサブスクリプションを作成するために必要なプロパティです

特定のチームのメンバーシップにサブスクライブする

特定のチームのメンバーシップの変更に関する変更通知を取得するには、 /teams/{team-id}/membersにサブスクライブします。 このリソースは、通知へのリソース データの組み込みをサポートします。

アクセス許可

アクセス許可の種類 アクセス許可 (特権の小さいものから大きいものへ)
委任 (職場または学校のアカウント) TeamMember.Read.All, TeamMember.ReadWrite.All
委任 (個人用 Microsoft アカウント) サポートされていません。
アプリケーション TeamMember.Read.Group*、TeamMember.Read.All、TeamMember.ReadWrite.All

注: * でマークされた権限は、リソース固有の同意の一部としてサポートされます。

POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json

{
  "changeType": "created,deleted,updated",
  "notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
  "resource": "/teams/{team-id}/members",
  "includeResourceData": true,
  "encryptionCertificate": "{base64encodedCertificate}",
  "encryptionCertificateId": "{customId}",
  "expirationDateTime": "2019-09-19T11:00:00.0000000Z",
  "clientState": "{secretClientState}"
}

テナント全体のすべてのチームのメンバーシップの変更をサブスクライブする

テナント全体のすべてのチームでメンバーシップの変更に関する変更通知を取得するには、 をサブスクライブします /teams/getAllMembers。 このリソースは、通知へのリソース データの組み込みをサポートします。

アクセス許可

アクセス許可の種類 アクセス許可 (特権の小さいものから大きいものへ)
委任 (職場または学校のアカウント) サポートされていません。
委任 (個人用 Microsoft アカウント) サポートされていません。
アプリケーション TeamMember.Read.All, TeamMember.ReadWrite.All

POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json

{
  "changeType": "created,deleted,updated",
  "notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
  "resource": "/teams/getAllMembers",
  "includeResourceData": true,
  "encryptionCertificate": "{base64encodedCertificate}",
  "encryptionCertificateId": "{customId}",
  "expirationDateTime": "2022-08-10T11:00:00.0000000Z",
  "clientState": "{secretClientState}"
}

テナント全体のすべてのチャネルでメンバーシップの変更をサブスクライブする (プレビュー)

テナント全体のすべてのチャネルでメンバーシップの変更に関する変更通知を取得するには、 をサブスクライブします /teams/getAllChannels/getAllMembers。 このリソースは、通知へのリソース データの組み込みをサポートします。 現時点では、プライベート チャネルのみがサポートされています。 このサブスクリプションは、ベータ 版エンドポイントでのみ使用できます。

アクセス許可

アクセス許可の種類 アクセス許可 (特権の小さいものから大きいものへ)
委任 (職場または学校のアカウント) サポートされていません。
委任 (個人用 Microsoft アカウント) サポートされていません。
アプリケーション ChannelMember.Read.All、ChannelMember.ReadWrite.All

POST https://graph.microsoft.com/beta/subscriptions
Content-Type: application/json

{
  "changeType": "created,deleted,updated",
  "notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
  "resource": "/teams/getAllChannels/getAllMembers",
  "includeResourceData": true,
  "encryptionCertificate": "{base64encodedCertificate}",
  "encryptionCertificateId": "{customId}",
  "expirationDateTime": "2022-08-10T11:00:00.0000000Z",
  "clientState": "{secretClientState}"
}

特定のチームのすべてのプライベート チャネルと共有チャネルでメンバーシップの変更をサブスクライブする

特定のチーム内のすべてのプライベート チャネルと共有チャネルでメンバーシップの変更に関する変更通知を取得するには、 をサブスクライブします /teams/{team-id}/channels/getAllMembers。 このリソースは、通知へのリソース データの組み込みをサポートします。

: この API には、ライセンス要件と支払い要件があります。 model=Amodel=B クエリ パラメーターの両方をサポートしています。 モデルが指定されていない場合は、評価モードが使用されます。

アクセス許可

アクセス許可の種類 アクセス許可 (特権の小さいものから大きいものへ)
委任 (職場または学校のアカウント) ChannelMember.Read.All。
委任 (個人用 Microsoft アカウント) サポートされていません。
アプリケーション ChannelMember.Read.All

POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json

{
  "changeType": "created,deleted,updated",
  "notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
  "resource": "/teams/{team-id}/channels/getAllMembers",
  "includeResourceData": true,
  "encryptionCertificate": "{base64encodedCertificate}",
  "encryptionCertificateId": "{customId}",
  "expirationDateTime": "2019-09-19T11:00:00.0000000Z",
  "clientState": "{secretClientState}"
}

リソース データを使用した通知

リソース データを含む通知の場合、ペイロードは次のようになります。 このペイロードは、チームのメンバーシップ変更用です。

{
    "value": [{
        "subscriptionId": "10493aa0-4d29-4df5-bc0c-ef742cc6cd7f",
        "changeType": "created",
        "clientState": "<<--SpecifiedClientState-->>",
        "subscriptionExpirationDateTime": "2021-02-02T10:30:34.9097561-08:00",
        "resource": "teams('ee0f5ae2-8bc6-4ae5-8466-7daeebbfa062')/members('ZWUwZjVhZTItOGJjNi00YWU1LTg0NjYtN2RhZWViYmZhMDYyIyM3Mzc2MWYwNi0yYWM5LTQ2OWMtOWYxMC0yNzlhOGNjMjY3Zjk=')",
        "resourceData": {
            "id": "ZWUwZjVhZTItOGJjNi00YWU1LTg0NjYtN2RhZWViYmZhMDYyIyM3Mzc2MWYwNi0yYWM5LTQ2OWMtOWYxMC0yNzlhOGNjMjY3Zjk=",
            "@odata.type": "#Microsoft.Graph.aadUserConversationMember",
            "@odata.id": "teams('ee0f5ae2-8bc6-4ae5-8466-7daeebbfa062')/members('ZWUwZjVhZTItOGJjNi00YWU1LTg0NjYtN2RhZWViYmZhMDYyIyM3Mzc2MWYwNi0yYWM5LTQ2OWMtOWYxMC0yNzlhOGNjMjY3Zjk=')"
        },
        "encryptedContent": {
            "data": "<<--EncryptedContent-->",
            "dataKey": "<<--EnryptedDataKeyUsedForEncryptingContent-->>",
            "encryptionCertificateId": "<<--IdOfTheCertificateUsedForEncryptingDataKey-->>",
            "encryptionCertificateThumbprint": "<<--ThumbprintOfTheCertificateUsedForEncryptingDataKey-->>"
        },
        "tenantId": "<<--TenantForWhichNotificationWasSent-->>"
    }],
    "validationTokens": ["<<--ValidationTokens-->>"]
}

チャネル メンバーシップ イベントのペイロードは、以前のペイロードと似ていますが、リソース プロパティはチーム メンバーではなくチャネル メンバーをポイントします。

トークンを検証してペイロードを復号化する方法の詳細については、「リソース データを含む変更通知を設定する」を参照してください。

復号化された通知のペイロードは次のようになります。 ペイロードは、 aaduserconversationmember スキーマに準拠しています。 ペイロードは、GET 操作によって返されるものと同様です。

{
  "id": "/ZWUwZjVhZTItOGJjNi00YWU1LTg0NjYtN2RhZWViYmZhMDYyIyM3Mzc2MWYwNi0yYWM5LTQ2OWMtOWYxMC0yNzlhOGNjMjY3Zjk=",
  "roles": [
    "owner"
  ],
  "displayName": "John Doe",
  "userId": "8b081ef6-4792-4def-b2c9-c363a1bf41d5",
  "email": null
}

リソース データを使用しない通知

リソース データを使用しない通知は、メッセージの内容を取得するために GET 呼び出しを行うのに十分な情報を提供します。 リソース データのない通知のサブスクリプションでは、暗号化証明書は必要ありません (Microsoft Graph は実際のリソース データを送信しないため)。

リソース データを含む通知の場合、ペイロードは次のようになります。 このペイロードは、チームのメンバーシップ変更用です。

{
  "subscriptionId": "9f9d1ed0-c9cc-42e7-8d80-a7fc4b0cda3c",
  "changeType": "created",
  "tenantId": "<<--TenantForWhichNotificationWasSent-->>",
  "clientState": "<<--SpecifiedClientState-->>",
  "subscriptionExpirationDateTime": "2021-02-02T11:26:41.0537895-08:00",
  "resource": "teams('ee0f5ae2-8bc6-4ae5-8466-7daeebbfa062')/members('ZWUwZjVhZTItOGJjNi00YWU1LTg0NjYtN2RhZWViYmZhMDYyIyM3Mzc2MWYwNi0yYWM5LTQ2OWMtOWYxMC0yNzlhOGNjMjY3Zjk=')",
  "resourceData": {
    "id": "ZWUwZjVhZTItOGJjNi00YWU1LTg0NjYtN2RhZWViYmZhMDYyIyM3Mzc2MWYwNi0yYWM5LTQ2OWMtOWYxMC0yNzlhOGNjMjY3Zjk",
    "@odata.type": "#Microsoft.Graph.aadUserConversationMember",
    "@odata.id": "teams('ee0f5ae2-8bc6-4ae5-8466-7daeebbfa062')/members('ZWUwZjVhZTItOGJjNi00YWU1LTg0NjYtN2RhZWViYmZhMDYyIyM3Mzc2MWYwNi0yYWM5LTQ2OWMtOWYxMC0yNzlhOGNjMjY3Zjk=')"
  }
}

チャネル メンバーシップ イベントのペイロードは、以前のペイロードと似ていますが、リソース プロパティはチーム メンバーではなくチャネル メンバーをポイントします。

resource および @odata.id プロパティを使用して、Microsoft Graph を呼び出し、メッセージのペイロードを取得できます。 GET 呼び出しは常にメッセージの現在の状態を返します。 通知が送信されてからメッセージが取得されてからメッセージが変更された場合、操作は更新されたメッセージを返します。