Abrufen von Änderungsbenachrichtigungen für Nachrichten in Teams-Kanälen und -Chats mithilfe von Microsoft Graph
Änderungsbenachrichtigungen ermöglichen es Ihnen, Änderungen (Erstellen, Aktualisieren und Löschen) an Nachrichten in einem Kanal oder Chat zu abonnieren. Änderungsbenachrichtigungen bieten ein Modell mit geringer Wartezeit, da Sie ein Abonnement verwalten können. Sie können auch die Ressourcendaten mithilfe der Benachrichtigungen erhalten und müssen so nicht die API aufrufen, um die Nutzlast abzurufen.
Abonnieren von Änderungen auf der Mandantenebene
Um alle Änderungen nachzuverfolgen, die mit Nachrichten in einem Mandanten verbunden sind, können Sie Abonnements auf Mandantenebene für Kanal- und Chatnachrichten verwenden. Dazu müssen Sie zwei Abonnements erstellen: eines zum Nachverfolgen aller Nachrichten in allen Kanälen und eines zum Nachverfolgen aller Nachrichten in allen Chats.
Abonnieren von Nachrichten in allen Kanälen
Um Änderungsbenachrichtigungen für alle Nachrichten und Antworten in den Kanälen eines Mandanten zu erhalten, abonnieren Sie /teams/getAllMessages. 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 auchmodel=BAbfrageparameter. 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) | Nicht unterstützt |
| Delegiert (persönliches Microsoft-Konto) | Nicht unterstützt |
| Anwendung | ChannelMessage.Read.All |
Beispiel
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "created,updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/teams/getAllMessages",
"includeResourceData": true,
"encryptionCertificate": "{base64encodedCertificate}",
"encryptionCertificateId": "{customId}",
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
Abonnieren von Nachrichten in allen Chats
Wenn Sie Änderungsbenachrichtigungen für alle Nachrichten in allen Chats in einem Mandanten erhalten möchten, abonnieren Sie /chats/getAllMessages. 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 auchmodel=BAbfrageparameter. 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) | Nicht unterstützt |
| Delegiert (persönliches Microsoft-Konto) | Nicht unterstützt |
| Anwendung | Chat.Read.All |
Beispiel
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "created,updated,deleted",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/chats/getAllMessages",
"includeResourceData": true,
"encryptionCertificate": "{base64encodedCertificate}",
"encryptionCertificateId": "{customId}",
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
Abonnieren von Nachrichten in einem Kanal
Wenn Sie Nachrichten und Antworten in einem Kanal nachverfolgen möchten, können Sie ein Änderungsbenachrichtigungsabonnement auf Kanalebene erstellen. Abonnieren Sie dazu /teams/{team-id}/channels/{channel-id}/messages. Diese Ressource unterstützt das Einschließen von Ressourcendaten in die Benachrichtigung sowohl im delegierten als auch im anwendungsbasierten Modus.
Abonnements auf Kanalebene unterstützen auch die schlüsselwortbasierte Suche über den $search-Abfrageparameter.
Berechtigungen
| Berechtigungstyp | Berechtigungen (von der Berechtigung mit den wenigsten Rechten zu der mit den meisten Rechten) |
|---|---|
| Delegiert (Geschäfts-, Schul- oder Unikonto) | ChannelMessage.Read.All |
| Delegiert (persönliches Microsoft-Konto) | Nicht unterstützt |
| Anwendung | ChannelMessage.Read.Group*, ChannelMessage.Read.All |
Hinweis: Mit * markierte Berechtigungen werden als Teil der ressourcenspezifischen Zustimmung unterstützt.
Beispiel 1: Abonnieren aller Nachrichten (und Antworten) in einem Kanal
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "created,updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/teams/{team-id}/channels/{channel-id}/messages",
"includeResourceData": true,
"encryptionCertificate": "{base64encodedCertificate}",
"encryptionCertificateId": "{customId}",
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
Beispiel 2: Abonnieren von Nachrichten (und Antworten) in einem Kanal, die bestimmten Text enthalten
Die folgende Anforderung sendet Nachrichten mit dem Inhalt Hello an den Abonnenten.
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "created,updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/teams/{team-id}/channels/{channel-id}/messages?$search=Hello",
"includeResourceData": true,
"encryptionCertificate": "{base64encodedCertificate}",
"encryptionCertificateId": "{customId}",
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
Beispiel 3: Abonnieren von Nachrichten (und Antworten) in einem Kanal ohne Ressourcendaten
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "created,updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/teams/{team-id}/channels/{channel-id}/messages",
"includeResourceData": false,
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
Beispiel 4: Abonnieren von Nachrichten (und Antworten) in einem Kanal, die einen bestimmten Benutzer enthalten
Wenn Sie Benachrichtigungen nur für Nachrichten erhalten möchten, in denen ein bestimmter Benutzer erwähnt wurde, können Sie die ID des Benutzers (9a6eb4d1-826b-48b1-9627-b50836c8fee9 in diesem Beispiel) in der Abfrage angeben.
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "created,updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/teams/{team-id}/channels/{channel-id}/messages?$filter=mentions/any(u: u/mentioned/user/id eq '9a6eb4d1-826b-48b1-9627-b50836c8fee9')",
"includeResourceData": false,
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
Abonnieren von Nachrichten in einem Chat
Wenn Sie Nachrichten in einem Chat nachverfolgen möchten, können Sie ein Änderungsbenachrichtigungsabonnement auf Chatebene erstellen. Abonnieren Sie dazu /chats/{chat-id}/messages. Diese Ressource unterstützt das Einschließen von Ressourcendaten in die Benachrichtigung sowohl im delegierten als auch im anwendungsbasierten Modus.
Abonnements auf Chatebene unterstützen auch die schlüsselwortbasierte Suche über den $search-Abfrageparameter.
Berechtigungen
| Berechtigungstyp | Berechtigungen (von der Berechtigung mit den wenigsten Rechten zu der mit den meisten Rechten) |
|---|---|
| Delegiert (Geschäfts-, Schul- oder Unikonto) | Chat.Read |
| Delegiert (persönliches Microsoft-Konto) | Nicht unterstützt |
| Anwendung | ChatMessage.Read.Chat*, Chat.Read.All |
Hinweis: Mit * markierte Berechtigungen werden als Teil der ressourcenspezifischen Zustimmung aktuell nur für die Betaversion unterstützt.
Beispiel 1: Abonnieren von Nachrichten in einem Chat
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "created,updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/chats/{chat-id}/messages",
"includeResourceData": true,
"encryptionCertificate": "{base64encodedCertificate}",
"encryptionCertificateId": "{customId}",
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
Beispiel 2: Abonnieren von Nachrichten in einem Chat, die bestimmten Text enthalten
Die folgende Anforderung sendet Nachrichten mit dem Inhalt Hello an den Abonnenten.
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "created,updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/chats/{chat-id}/messages?$search=Hello",
"includeResourceData": true,
"encryptionCertificate": "{base64encodedCertificate}",
"encryptionCertificateId": "{customId}",
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
Beispiel 3: Abonnieren von Nachrichten (und Antworten) in einem Chat ohne Ressourcendaten
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "created,updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/chats/{chat-id}/messages",
"includeResourceData": false,
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
Beispiel 4: Abonnieren einer Nachricht in einem Chat, in der ein bestimmter Benutzer erwähnt wird
Wenn Sie Benachrichtigungen nur für Nachrichten erhalten möchten, in denen ein bestimmter Benutzer erwähnt wurde, können Sie die ID des Benutzers (9a6eb4d1-826b-48b1-9627-b50836c8fee9 in diesem Beispiel) in der Abfrage angeben.
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "created,updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/chats/{chat-id}/messages?$filter=mentions/any(u: u/mentioned/user/id eq '9a6eb4d1-826b-48b1-9627-b50836c8fee9')",
"includeResourceData": false,
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
Änderungen auf Benutzerebene abonnieren
Um Nachrichten in allen Chats zu verfolgen, an denen ein bestimmter Benutzer teilnimmt, können Sie ein Abonnement für Änderungsbenachrichtigungen auf Benutzerebene erstellen. Um dies zu tun, abonnieren Sie /users/{user-id}/chats/getAllMessages. Diese Ressource unterstützt das Einschließen von Ressourcendaten in die Benachrichtigung sowohl im delegierten als auch im anwendungsbasierten Modus.
Chatnachrichtenabonnements auf Benutzerebene unterstützen auch die schlüsselwortbasierte Suche über den $search Abfrageparameter.
Hinweis: Diese API hat Lizenzierungs- und Zahlungsanforderungen. Sie unterstützt den Abfrageparameter
model=B. 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) | Chat.Read, Chat.ReadWrite |
| Delegiert (persönliches Microsoft-Konto) | Nicht unterstützt |
| Anwendung | Chat.Read.All, Chat.ReadWrite.All |
Beispiel: Nachrichten in allen Chats abonnieren, an denen ein bestimmter Benutzer teilnimmt.
POST https://graph.microsoft.com/beta/subscriptions
Content-Type: application/json
{
"changeType": "created,updated,deleted",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "/users/{user-id}/chats/getAllMessages",
"includeResourceData": true,
"encryptionCertificate": "{base64encodedCertificate}",
"encryptionCertificateId": "{customId}",
"expirationDateTime": "2019-09-19T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
Nutzdaten der Benachrichtigung
Je nach Abonnement können Sie die Benachrichtigung entweder mit Ressourcendaten erhalten oder ohne. Wenn Sie mit Ressourcendaten abonnieren, können Sie die Nutzdaten der Nachricht zusammen mit der Benachrichtigung erhalten, d. h. Sie müssen nicht mehr zurückrufen, um den Inhalt zu erhalten.
Benachrichtigungen mit Ressourcendaten
Bei Benachrichtigungen mit Ressourcendaten sieht die Nutzlast wie folgt aus. Diese Nutzlast gilt für eine Nachricht, die in einem Chat gesendet wurde.
{
"value": [{
"subscriptionId": "10493aa0-4d29-4df5-bc0c-ef742cc6cd7f",
"changeType": "created",
"clientState": "<<--SpecifiedClientState-->>",
"subscriptionExpirationDateTime": "2021-02-02T10:30:34.9097561-08:00",
"resource": "chats('19:8ea0e38b-efb3-4757-924a-5f94061cf8c2_97f62344-57dc-409c-88ad-c4af14158ff5@unq.gbl.spaces')/messages('1612289765949')",
"resourceData": {
"id": "1612289765949",
"@odata.type": "#Microsoft.Graph.chatMessage",
"@odata.id": "chats('19:8ea0e38b-efb3-4757-924a-5f94061cf8c2_97f62344-57dc-409c-88ad-c4af14158ff5@unq.gbl.spaces')/messages('1612289765949')"
},
"encryptedContent": {
"data": "<<--EncryptedContent-->",
"dataKey": "<<--EnryptedDataKeyUsedForEncryptingContent-->>",
"encryptionCertificateId": "<<--IdOfTheCertificateUsedForEncryptingDataKey-->>",
"encryptionCertificateThumbprint": "<<--ThumbprintOfTheCertificateUsedForEncryptingDataKey-->>"
},
"tenantId": "<<--TenantForWhichNotificationWasSent-->>"
}],
"validationTokens": ["<<--ValidationTokens-->>"]
}
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 entspricht dem Schema chatMessage. Die Nutzlast ist der von GET-Vorgängen zurückgegebenen Nutzlast ähnlich.
{
"id": "1612289992105",
"replyToId": null,
"etag": "1612289992105",
"messageType": "message",
"createdDateTime": "2021-02-02T18:19:52Z",
"lastModifiedDateTime": "2021-02-02T18:19:52.105Z",
"lastEditedDateTime": null,
"deletedDateTime": null,
"subject": null,
"summary": null,
"chatId": "19:8ea0e38b-efb3-4757-924a-5f94061cf8c2_97f62344-57dc-409c-88ad-c4af14158ff5@unq.gbl.spaces",
"importance": "normal",
"locale": "en-us",
"webUrl": null,
"from": {
"application": null,
"device": null,
"user": {
"id": "8ea0e38b-efb3-4757-924a-5f94061cf8c2",
"displayName": "Ramjot Singh",
"userIdentityType": "aadUser"
},
"conversation": null
},
"body": {
"contentType": "text",
"content": "test"
},
"channelIdentity": null,
"attachments": [],
"mentions": [],
"policyViolation": null,
"reactions": [],
"replies": [],
"hostedContents": []
}
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 die tatsächlichen Ressourcendaten nicht übermittelt werden).
Das Nutzlast sieht wie folgt aus. Diese Nutzlast gilt für eine Nachricht, die in einem Kanal gesendet wurde.
{
"subscriptionId": "9f9d1ed0-c9cc-42e7-8d80-a7fc4b0cda3c",
"changeType": "created",
"tenantId": "<<--TenantForWhichNotificationWasSent-->>",
"clientState": "<<--SpecifiedClientState-->>",
"subscriptionExpirationDateTime": "2021-02-02T11:26:41.0537895-08:00",
"resource": "teams('fbe2bf47-16c8-47cf-b4a5-4b9b187c508b')/channels('19:4a95f7d8db4c4e7fae857bcebe0623e6@thread.tacv2')/messages('1612293113399')",
"resourceData": {
"id": "1612293113399",
"@odata.type": "#Microsoft.Graph.chatMessage",
"@odata.id": "teams('fbe2bf47-16c8-47cf-b4a5-4b9b187c508b')/channels('19:4a95f7d8db4c4e7fae857bcebe0623e6@thread.tacv2')/messages('1612293113399')"
}
}
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 der aktuelle 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.
Siehe auch
Feedback
Feedback senden und anzeigen für