Abrufen von Änderungsbenachrichtigungen über Veränderungen der Mitgliedschaft in Teams und Kanälen mithilfe von Microsoft Graph

Mit Änderungsbenachrichtigungen können Sie Mitgliedschaftsänderungen (Erstellen, Aktualisieren und Löschen) in einem Team oder privaten Kanal abonnieren. Sie können informiert werden, wenn ein Mitglied in einem Team oder privaten Kanal hinzugefügt, entfernt oder aktualisiert wird. Sie können auch die Ressourcendaten in der Benachrichtigungen erhalten und müssen so nicht die API aufrufen, um die Nutzlast abzurufen.

Fahren Sie mit diesem Artikel zu Szenarien für die conversationMember-Ressource im Team - oder Kanalkontext fort. Oder informieren Sie sich über Änderungsbenachrichtigungen für andere Microsoft Teams-Ressourcen.

Hinweis

Wenn Sie ein abonnement expirationDateTime anfordern, das mehr als eine Stunde in der Zukunft liegt, müssen Sie Lebenszyklusbenachrichtigungen abonnieren, indem Sie eine lifecycleNotificationUrl-Eigenschaft in Ihre Abonnementanforderung einschließen. Andernfalls schlägt Ihre Abonnementanforderung mit der folgenden Fehlermeldung fehl: lifecycleNotificationUrl ist eine erforderliche Eigenschaft für die Abonnementerstellung für diese Ressource, wenn der wert expirationDateTime auf größer als 1 Stunde festgelegt ist.

Abonnieren von Änderungen in der Mitgliedschaft eines bestimmten Teams

Um Änderungsbenachrichtigungen über Veränderungen der Mitgliedschaft in einem bestimmten Team zu erhalten, abonnieren Sie /teams/{team-id}/members. Diese Ressource unterstützt das Einbeziehen von Ressourcendaten in die Benachrichtigung.

Berechtigungen

Berechtigungstyp Berechtigungen (von der Berechtigung mit den wenigsten Rechten zu der mit den meisten Rechten)
Delegiert (Geschäfts-, Schul- oder Unikonto) TeamMember.Read.All, TeamMember.ReadWrite.All
Delegiert (persönliches Microsoft-Konto) Nicht unterstützt
Anwendung TeamMember.Read.Group*, TeamMember.Read.All, TeamMember.ReadWrite.All

Hinweis: Mit * markierte Berechtigungen werden als Teil der ressourcenspezifischen Zustimmung unterstützt.

Beispiel

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}"
}

Abonnieren von Mitgliedschaftsänderungen in allen Teams im gesamten Mandanten

Um Änderungsbenachrichtigungen für Mitgliedschaftsänderungen in allen Teams im gesamten Mandanten zu erhalten, abonnieren Sie /teams/getAllMembers. Diese Ressource unterstützt das Einbeziehen von Ressourcendaten in die Benachrichtigung.

Berechtigungen

Berechtigungstyp Berechtigungen (von der Berechtigung mit den wenigsten Rechten zu der mit den meisten Rechten)
Delegiert (Geschäfts-, Schul- oder Unikonto) Nicht unterstützt
Delegiert (persönliches Microsoft-Konto) Nicht unterstützt
Anwendung TeamMember.Read.All, TeamMember.ReadWrite.All

Beispiel

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}"
}

Abonnieren von Mitgliedschaftsänderungen in allen Kanälen des Mandanten (Vorschau)

Um Änderungsbenachrichtigungen für Mitgliedschaftsänderungen in allen Kanälen im gesamten Mandanten zu erhalten, abonnieren Sie /teams/getAllChannels/getAllMembers. Diese Ressource unterstützt das Einbeziehen von Ressourcendaten in die Benachrichtigung. Derzeit werden nur private Kanäle unterstützt. Dieses Abonnement ist nur im Beta-Endpunkt verfügbar.

Berechtigungen

Berechtigungstyp Berechtigungen (von der Berechtigung mit den wenigsten Rechten zu der mit den meisten Rechten)
Delegiert (Geschäfts-, Schul- oder Unikonto) Nicht unterstützt
Delegiert (persönliches Microsoft-Konto) Nicht unterstützt
Anwendung ChannelMember.Read.All, ChannelMember.ReadWrite.All

Beispiel

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}"
}

Abonnieren von Mitgliedschaftsänderungen in allen privaten und freigegebenen Kanälen eines bestimmten Teams

Um Änderungsbenachrichtigungen für Mitgliedschaftsänderungen in allen privaten und freigegebenen Kanälen in einem bestimmten Team zu /teams/{team-id}/channels/getAllMemberserhalten, abonnieren Sie . Diese Ressource unterstützt das Einbeziehen von Ressourcendaten in die Benachrichtigung.

Hinweis: Diese API hat Lizenzierungs- und Zahlungsanforderungen. Sie unterstützt sowohl model=A- als auch model=B Abfrageparameter. Wenn kein Modell angegeben ist, wird der Auswertungsmodus verwendet.

Berechtigungen

Berechtigungstyp Berechtigungen (von der Berechtigung mit den wenigsten Rechten zu der mit den meisten Rechten)
Delegiert (Geschäfts-, Schul- oder Unikonto) ChannelMember.Read.All.
Delegiert (persönliches Microsoft-Konto) Nicht unterstützt
Application ChannelMember.Read.All

Beispiel

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}"
}

Benachrichtigungen mit Ressourcendaten

Bei Benachrichtigungen mit Ressourcendaten sieht die Nutzlast wie folgt aus. Dies Nutzlast bezieht sich auf eine Veränderung der Mitgliedschaft in einem Team.

{
    "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-->>"]
}

Die Nutzlast für die Kanalmitgliedschaftsereignisse ähnelt der vorherigen Nutzlast, mit der Ausnahme, dass die Eigenschaft Ressource auf ein Kanalmitglied anstelle eines Teammitglieds verweist.

Einzelheiten zum Validieren von Tokens und Entschlüsseln der Nutzlast finden Sie unter Änderungsbenachrichtigungen einrichten, die Ressourcendaten enthalten.

Die entschlüsselte Benachrichtigungsnutzlast sieht wie folgt aus. Die Nutzlast stimmt mit dem aaduserconversationmember-Schema überein. Die Nutzlast ist der von GET-Vorgängen zurückgegebenen Nutzlast ähnlich.

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

Benachrichtigungen ohne Ressourcendaten

Benachrichtigungen ohne Ressourcendaten enthalten genügend Informationen, um GET-Aufrufe zu tätigen, um Nachrichteninhalte zu erhalten. Abonnements für Benachrichtigungen ohne Ressourcendaten erfordern kein Verschlüsselungszertifikat (da Microsoft Graph die tatsächlichen Ressourcendaten nicht sendet).

Bei Benachrichtigungen ohne Ressourcendaten sieht die Nutzlast wie folgt aus. Dies Nutzlast bezieht sich auf eine Veränderung der Mitgliedschaft in einem Team.

{
  "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=')"
  }
}

Die Nutzlast für die Kanalmitgliedschaftsereignisse ähnelt der vorherigen Nutzlast, mit der Ausnahme, dass die Eigenschaft Ressource auf ein Kanalmitglied anstelle eines Teammitglieds verweist.

Die Eigenschaften ressource und @odata.id können verwendet werden, um Aufrufe an Microsoft Graph zu tätigen, um die Nutzlast für die Nachricht zu erhalten. GET-Aufrufe geben immer den aktuellen Status der Nachricht zurück. Wenn die Nachricht zwischen dem Senden der Benachrichtigung und dem Abrufen der Nachricht geändert wird, gibt der Vorgang die aktualisierte Nachricht zurück.