Einrichten von Benachrichtigungen für Änderungen an Ressourcendaten
Die Microsoft Graph-API verwendet einen Webhook-Mechanismus zum Übermitteln von Änderungsbenachrichtigungen an Clients. Ein Client ist ein Webdienst, der eine eigene URL zum Empfangen von Änderungsbenachrichtigungen konfiguriert. Client-Apps verwenden Änderungsbenachrichtigungen, um bei Änderungen ihren Status zu aktualisieren.
Nachdem Microsoft Graph die Abonnementsanfrage akzeptiert hat, werden Änderungsbenachrichtigungen an die im Abonnement angegebene URL gesendet. Die App führt dann Aktionen gemäß der Geschäftslogik aus. Sie ruft z. B. weitere Daten ab, aktualisiert den Zwischenspeicher und Ansichten usw.
Standardmäßig enthalten Änderungsbenachrichtigungen keine anderen Ressourcendaten als die id. Wenn die App Ressourcendaten anfordert, kann Sse Anrufe an Microsoft Graph-APIs durchführen, um die vollständige Ressource abzurufen. In diesem Artikel wird die Benutzer-Ressource als Beispiel für das Arbeiten mit Änderungsbenachrichtigungen verwendet.
Eine App kann auch Änderungsbenachrichtigungen abonnieren, die Ressourcendaten enthalten, um zu vermeiden, dass zusätzliche API-Aufrufe für den Datenzugriff vorgenommen werden müssen. Solche Apps müssen zusätzliche Codes einsetzen, um den Anforderungen dieser Benachrichtigungen nachzukommen, insbesondere: Antworten auf Benachrichtigungen über das Ablaufdatum von Abonnements, Überprüfung der Authentizität von Benachrichtigungen und Entschlüsselung von Ressourcendaten. Einzelheiten über die Arbeit mit diesen Benachrichtigungen finden Sie unter Änderungsbenachrichtigungen einrichten, die Ressourcendaten enthalten.
Unterstützte Ressourcen
Mit der Microsoft Graph-API kann eine App Änderungen an den folgenden Ressourcen abonnieren:
- Drucken in der Cloud Drucker
- Cloud-drucken printTaskDefinition
- Inhalt in der Hierarchie des driveItem-Objekts eines beliebigen Ordners auf dem persönlichen OneDrive eines Benutzers
- Inhalt in der Hierarchie des driveItem-Objekts eines Stammordners auf OneDrive for Business
- group
- Microsoft 365-Gruppen[unterhaltung][]
- Outlook-[Ereignis][]
- Outlook-[Nachricht][]
- Persönlicher Outlook-Kontakt
- [Sicherheitswarnung][]
- SharePoint-[Liste][]
- Teams callRecord
- Teams channel
- Teams Chat
- Teams chatMessage
- Teams conversationMember
- Teams-[Anwesenheit][]
- Teams onlineMeeting
- Teams team
- To-Do-Aufgabe
- user
Beispielszenarien
Sie können ein Abonnement für die folgenden Szenarien erstellen:
| Szenario | Abfrage |
|---|---|
| Für einen bestimmten Outlook-Ordner, z. B. den Posteingang | me/mailFolders('inbox')/messages |
| Für eine Ressource der obersten Ebene | /me/messages /me/contacts /me/events /users /groups /communications/callRecords |
| Für eine bestimmte Ressourceninstanz | /users/{id} /groups/{id} /groups/{id}/conversations /sites/{site-id}/lists/{list-id} /communications/presences/{id} /communications/onlinemeeting/{meeting-id} |
| Für einen beliebigen Ordner in der persönlichen OneDrive-Umgebung eines Benutzers | /drives/{id}/root /drives/{id}/root/subfolder |
| Für den Stammorder eines Sharepoint-/OneDrive for Business-Laufwerks | /drive/root |
| Oder für eine neue Sicherheits-API-Warnung | /security/alerts?$filter=status eq 'newAlert' /security/alerts?$filter=vendorInformation/provider eq 'ASC' |
| Für die Tasks in der Aufgabenliste eines Benutzers | /me/todo/lists/{todoTaskListId}/tasks |
Azure AD-Ressourceneinschränkungen
Bestimmte Einschränkungen gelten für Azure AD-basierte Ressourcen (Benutzer, Gruppen) und rufen bei Überschreitung Fehler hervor:
Hinweis
Diese Grenzwerte gelten nicht für Ressourcen aus anderen Diensten als Azure AD. Zum Beispiel kann eine App viele weitere Abonnements für message- oder event-Ressourcen erstellen, die vom Exchange Online-Dienst als Bestandteil von Microsoft Graph unterstützt werden.
Maximale Abonnementkontingente:
- Pro App (für alle Mandanten kombiniert): 50.000 Abonnements insgesamt
- Pro Mandant (für alle Anwendungen kombiniert): 1000 Abonnements insgesamt über alle Apps hinweg
- Pro App und Mandanten kombiniert: 100 Abonnements insgesamt
Wenn Grenzwerte überschritten werden, resultieren Versuche, ein Abonnement zu erstellen, in einer Fehlerantwort - 403 Forbidden. Die message-Eigenschaft erläutert, welcher Grenzwert überschritten wurde.
Azure AD B2C-Mandanten werden nicht unterstützt.
Änderungsbenachrichtigungen für Benutzerentitäten werden für persönliche Microsoft-Konten nicht unterstützt.
Es gibt ein bekanntes Problem mit Benutzer- und Gruppenabonnements.
Outlook-Ressourcenbeschränkungen
Es sind maximal 1.000 aktive Abonnements pro Postfach für alle Anwendungen zulässig.
Ressourcenbeschränkungen für Teams
Jede Teams-Ressource hat unterschiedliche Abonnement-Kontingente.
Für Abonnements von callRecords:
- Pro Organisation: 100 Abonnements insgesamt
Für Abonnements von chatMessages (Kanäle oder Chats):
- Pro App- und Kanal- oder Chatkombination: 1 Abonnement
- Pro Organisation: 10.000 Abonnements insgesamt
Für Abonnements von Kanälen:
- Pro App- und Teamkombination: 1 Abonnement
- Pro Organisation: 10.000 Abonnements insgesamt
Für Abonnements von Chats:
- Pro App- und Chatkombination: 1 Abonnement
- Pro Organisation: 10.000 Abonnements insgesamt
Für Abonnements von Teams:
- Pro App- und Teamkombination: 1 Abonnement
- Pro Organisation: 10.000 Abonnements insgesamt
Für Abonnements von conversationMembers:
- Pro App- und Teamkombination: 1 Abonnement
- Pro Organisation: 10.000 Abonnements insgesamt
Gültigkeitsdauer von Abonnements
Abonnements haben eine eingeschränkte Gültigkeit. Apps müssen ihre Abonnements vor dem Ablaufzeitpunkt verlängern. Andernfalls müssen sie ein neues Abonnement erstellen. Eine Liste maximaler Ablaufzeiten finden Sie unter Maximale Abonnementdauer pro Ressourcentyp.
Apps können auch jederzeit gekündigt werden, um keine weiteren Änderungsbenachrichtigungen zu erhalten.
Verwalten von Abonnements
Clients können Abonnements erstellen, verlängern und löschen.
Erstellen eines Abonnements
Um Änderungsbenachrichtigungen für eine Ressource zu erhalten, muss in einem ersten Schritt ein Abonnement erstellt werden. Der Abonnementprozess läuft wie folgt ab:
Der Client sendet eine Abonnementanforderung (POST) für eine bestimmte Ressource.
Microsoft Graph überprüft die Anforderung.
- Wenn die Anforderung gültig ist, sendet Microsoft Graph ein Überprüfungsstoken an die Benachrichtigungs-URL.
- Wenn die Anfrage ungültig ist, sendet Microsoft Graph eine Fehlermeldung mit Code und Details.
Der Client sendet das Überprüfungstoken zurück an Microsoft Graph.
Microsoft Graph sendet eine Antwort an den Client zurück.
Der Client muss die Abonnement-ID speichern, um Änderungsbenachrichtigungen mit dem Abonnement korrelieren zu können.
Beispiel für eine Abonnementanfrage
POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
"changeType": "created,updated",
"notificationUrl": "https://webhook.azurewebsites.net/notificationClient",
"resource": "/me/mailfolders('inbox')/messages",
"expirationDateTime": "2016-03-20T11:00:00.0000000Z",
"clientState": "SecretClientState"
}
Die Eigenschaften changeType, notificationUrl, resource und expirationDateTime sind erforderlich. Unter subscription-Ressourcentyp finden Sie die Eigenschaftsdefinitionen und Werte.
Die Eigenschaft resource gibt die Ressource an, deren Änderungen überwacht werden. Sie können z. B. ein Abonnement für einen bestimmten E-Mail-Ordner erstellen: me/mailFolders('inbox')/messages oder im Auftrag eines Benutzers mit der Zustimmung eines Administrators: users/john.doe@onmicrosoft.com/mailFolders('inbox')/messages.
clientState ist zwar nicht erforderlich, muss aber eingeschlossen werden, um unserem empfohlenen Prozess zum Umgang mit Änderungsbenachrichtigungen zu entsprechen. Durch das Festlegen dieser Eigenschaft können Sie bestätigen, dass die empfangenen Änderungsbenachrichtigungen vom Microsoft Graph-Dienst stammen. Aus diesem Grund muss der Wert der Eigenschaft geheim bleiben und darf nur der Anwendung und dem Microsoft Graph-Dienst bekannt sein.
Wenn der Vorgang erfolgreich war, gibt Microsoft Graph einen 201 Created-Code und ein subscription-Objekt im Textkörper zurück.
Hinweis
Jeder String-Parameter in der Abfrage, der in der Eigenschaft notificationUrl enthalten ist, wird bei der Zustellung von Benachrichtigungen in die HTTP-POST-Anforderung aufgenommen.
Endpunktprüfung für Benachrichtigungen
Microsoft Graph überprüft den Benachrichtigungsendpunkt, der in der Eigenschaft notificationUrl der Abonnementanfrage angegeben ist, bevor das Abonnement erstellt wird. Der Überprüfungsprozess läuft wie folgt ab:
Microsoft Graph codiert ein Überprüfungstoken und fügt es in eine POST-Anforderung an die Benachrichtigungs-URL ein:
Content-Type: text/plain; charset=utf-8 POST https://{notificationUrl}?validationToken={opaqueTokenCreatedByMicrosoftGraph}Der Client muss die im vorhergehenden Schritt bereitgestellten
validationTokenAbfrageparameter ordnungsgemäß URL-decodieren und das gesamte HTML/JavaScript mit einem Escapezeichen versehen.Ein Escapezeichen ist eine bewährte Methode, da böswillige Akteure den Benachrichtigungsendpunkt für websiteübergreifende Scripting-Angriffe verwenden können.
Behandeln Sie den Wert des Überprüfungstokens im Allgemeinen als nicht transparent, da sich das Tokenformat im Allgemeinen ohne vorherige Ankündigung ändern kann. Microsoft Graph sendet niemals einen Wert, der HTML- oder JavaScript-Code enthält.
Der Client muss innerhalb von 10 Sekunden nach Schritt 1 eine Antwort mit folgenden Merkmalen bereitstellen:
- Statuscode
HTTP 200 OK. - Inhaltstyp
text/plain. - Ein Textkörper, der das URL-decodierte Überprüfungstoken enthält. Geben Sie einfach die gleiche Zeichenfolge zurück, die im
validationTokenAbfrageparameter gesendet wurde.
Der Client muss den Überprüfungstoken verwerfen, nachdem er in der Antwort bereitgestellt wurde.
Wichtig
Wenn der Client ein codiertes Überprüfungstoken zurückgibt, tritt bei der Überprüfung ein Fehler auf.
- Statuscode
Darüber hinaus können Sie die Microsoft Graph-Postman-Sammlung verwenden, um zu bestätigen, dass Ihr Endpunkt die Überprüfungsanforderung ordnungsgemäß implementiert. Die Anforderung Abonnementüberprüfung im Ordner Misc enthält Komponententests, mit denen die vom Endpunkt bereitgestellte Antwort überprüft wird.

Verlängern eines Abonnements
Der Kunde kann ein Abonnement mit einem bestimmten Ablaufdatum von bis zu drei Tagen ab dem Zeitpunkt der Anforderung verlängern. Die Eigenschaft expirationDateTime ist erforderlich.
Beispiel für eine Abonnementverlängerung
PATCH https://graph.microsoft.com/v1.0/subscriptions/{id}
Content-Type: application/json
{
"expirationDateTime": "2016-03-22T11:00:00.0000000Z"
}
Wenn der Vorgang erfolgreich war, gibt Microsoft Graph einen 200 OK-Code und ein subscription-Objekt im Textkörper zurück. Das Abonnementobjekt enthält den neuen Wert für expirationDateTime.
Löschen eines Abonnements
Der Client kann den Erhalt von Änderungsbenachrichtigungen stoppen, indem er das Abonnement anhand seiner ID löscht.
DELETE https://graph.microsoft.com/v1.0/subscriptions/{id}
Wenn der Vorgang erfolgreich verläuft, gibt Microsoft Graph einen 204 No Content-Code zurück.
Änderungsbenachrichtigungen
Wenn ein Client Änderungen an einer Ressource abonniert, sendet Microsoft Graph eine POST-Anforderung an die Benachrichtigungs-URL, sobald sich die Ressource ändert. Benachrichtigungen werden nur für die Änderungen des Typs gesendet, der im Abonnement angegeben ist, z. B. created.
Hinweis
Wenn ein Client über mehrere Abonnements verfügt, die dieselbe Ressource überwachen und die gleiche Benachrichtigungs-URL verwenden, kann Microsoft Graph mehrere Änderungsbenachrichtigungen senden, die verschiedenen Abonnements entsprechen, wobei jeweils die entsprechende Abonnement-ID angezeigt wird. Es kann nicht garantiert werden, dass alle Änderungsbenachrichtigungen in der POST-Anforderung zu einem einzelnen Abonnement gehören.
Beispiel für eine Änderungsbenachrichtigung
Dieser Abschnitt zeigt ein Beispiel für eine Benachrichtigung für die Erstellung einer Nachricht. Wenn der Benutzer eine E-Mail empfängt, sendet Microsoft Graph eine Änderungsbenachrichtigung wie die folgende:
Beachten Sie, dass sich die Benachrichtigung in einer Sammlung befindet, die im value-Feld dargestellt wird. Details zur Benachrichtigungsnutzlast finden Sie unter changeNotificationCollection.
Wenn zahlreiche Änderungen vorgenommen werden, kann Microsoft Graph mehrere Benachrichtigungen senden, die verschiedenen Abonnements in derselben POST-Anforderung entsprechen.
{
"value": [
{
"id": "lsgTZMr9KwAAA",
"subscriptionId":"{subscription_guid}",
"subscriptionExpirationDateTime":"2016-03-19T22:11:09.952Z",
"clientState":"secretClientValue",
"changeType":"created",
"resource":"users/{user_guid}@{tenant_guid}/messages/{long_id_string}",
"tenantId": "84bd8158-6d4d-4958-8b9f-9d6445542f95",
"resourceData":
{
"@odata.type":"#Microsoft.Graph.Message",
"@odata.id":"Users/{user_guid}@{tenant_guid}/Messages/{long_id_string}",
"@odata.etag":"W/\"CQAAABYAAADkrWGo7bouTKlsgTZMr9KwAAAUWRHf\"",
"id":"{long_id_string}"
}
}
]
}
Verarbeiten der Änderungsbenachrichtigung
Ihr Prozess sollte alle empfangenen Änderungsbenachrichtigungen verarbeiten. Die folgenden Aufgaben müssen von der App mindestens durchgeführt werden, um eine Änderungsbenachrichtigung zu verarbeiten:
Ihr Prozess sollte jede Änderungsmeldung, die er erhält, verarbeiten und einen 2xx-Klassencode senden. Wenn Microsoft Graph nicht innerhalb von 3 Sekunden einen 2xx-Klassencode erhält, wird es versuchen, die Änderungsbenachrichtigung für einen Zeitraum von etwa 4 Stunden mehrmals zu veröffentlichen; danach wird die Änderungsbenachrichtigung verworfen und nicht mehr ausgeliefert. Wenn Ihr Prozess dauerhaft nicht innerhalb von 3 Sekunden antwortet, kann es sein, dass Ihre Benachrichtigung einer Drosselung unterliegt.
Wenn die Verarbeitung voraussichtlich länger als 3 Sekunden dauert, sollten Sie die Benachrichtigung aufrechterhalten, einen
202 - AcceptedStatuscode in Ihrer Antwort an Microsoft Graph zurückgeben und dann die Benachrichtigungen verarbeiten. Wenn die Benachrichtigung nicht beibehalten wird, geben Sie einen 5xx-Klassencode zurück, um einen Fehler anzugeben, damit die Benachrichtigung wiederholt wird.Wenn Ihre Verarbeitung voraussichtlich weniger als 3 Sekunden dauert, sollten Sie die Benachrichtigungen verarbeiten und in Ihrer Antwort an Microsoft Graph einen
200 - OKStatuscode zurückgeben. Wenn die Benachrichtigung nicht korrekt verarbeitet wird, geben Sie einen 5xx-Klassencode zurück, um auf einen Fehler hinzuweisen, so dass die Benachrichtigung erneut versucht werden kann.Überprüfen der
clientState-Eigenschaft. Sie muss dem Wert entsprechen, der ursprünglich mit der Anforderung zum Erstellen eines Abonnement übermittelt wurde.Hinweis
Ist dies nicht der Fall, kann die Änderungsbenachrichtigung nicht als gültig betrachtet werden. Es ist möglich, dass die Änderungsbenachrichtigung nicht von Microsoft Graph stammt und möglicherweise von einem gefälschten Akteur gesendet wurde. Prüfen Sie auch, woher die Änderungsbenachrichtigung stammt, und ergreifen Sie die entsprechenden Maßnahmen.
Aktualisieren Sie die Anwendung basierend auf Ihrer Geschäftslogik.
Wiederholen Sie den Vorgang für weitere Änderungsbenachrichtigungen in der Anfrage.
Einschränkung
Senden Sie einen 202 - Accepted Statuscode, sobald Sie die Änderungsbenachrichtigung erhalten, auch bevor Sie deren Echtheit überprüfen. Sie bestätigen lediglich den Empfang der Änderungsbenachrichtigung und verhindern unnötige Wiederholungen. Bei den meisten Abonnements gibt es keine zusätzlichen Verzögerungen bei der Veröffentlichung von Benachrichtigungen. Alle Benachrichtigungen werden innerhalb der SLA geliefert, es sei denn, bei dem Dienst liegt eine Störung vor. Wenn jedoch die URL einer Abonnement-Benachrichtigung langsam ist oder nicht antwortet, werden die Benachrichtigungen möglicherweise für den mit dem Abonnement verbundenen Host gedrosselt. Der folgende Prozess wird verwendet, um zu bestimmen, wann eine Drosselung erfolgt und wie eingeschränkte Endpunkte behandelt werden.
Benachrichtigungen werden mithilfe eines HTTP-Clients mit einem Timeout von 3 Sekunden veröffentlicht. Nach Abschluss der Veröffentlichung einer Meldung wird unabhängig vom Ergebnis die Gesamtzeit für den Versuch der Veröffentlichung, einschließlich der Netzwerklatenz, für den mit der Meldungs-URL verbundenen Host erfasst. Beträgt die Veröffentlichungszeit mehr als 2900 ms, gilt die Antwort als langsam. Die Antworten werden für den Host gesammelt, und der Prozentsatz der langsamen Antworten wird berechnet, nachdem 100 Benachrichtigungen empfangen wurden. Wenn der Prozentsatz der langsamen Antworten 10 % erreicht, wird der mit der Benachrichtigungs-URL verbundene Host als langsamer Endpunkt gekennzeichnet. Da langsame Endpunkte in der Benachrichtigungs-URL mit dem Host verknüpft sind, werden alle Benachrichtigungen für alle Abonnements, die mit dem Host verknüpft sind, für die Auswertung berücksichtigt und einer Drosselung unterzogen.
Die Auswertung wird in Echtzeit fortgesetzt. Wenn die Veröffentlichungszeit für einen Host unter 2900 ms fällt, wird diese nicht langsame Antwort in die Gesamtzahl der Antworten aufgenommen, der Prozentsatz der langsamen Antworten wird neu berechnet und der Endpunkt wird neu bewertet. Außerdem wird die Ansammlung von Antworten alle 10 Minuten geleert und die Auswertung beginnt wieder, wobei 100 Benachrichtigungen abgewartet werden, bevor ein Endpunkt ausgewertet wird. Daher erholt sich eine temporäre Latenzspitze im Netzwerk oder eine Verzögerung bei der Veröffentlichung, sobald die Verzögerung ausgeglichen ist. Eine beständigere Netzwerklatenz oder Veröffentlichungsverzögerung, die größer als 2900 ms ist, wird alle 10 Minuten kontinuierlich neu ausgewertet.
Während ein Endpunkt gedrosselt wird, werden Benachrichtigungen den folgenden zusätzlichen Verzögerungen unterzogen:
- Die Meldungen werden automatisch an eine Gruppe von Mitarbeitern weitergeleitet, die für fehlgeschlagene und gedrosselte Meldungen zuständig sind, und es entsteht eine zusätzliche Verzögerung von 10 Minuten.
- Benachrichtigungen werden verworfen, wenn der gedrosselte Anteil langsamer Endpunkte >= 15 % ist.
- Benachrichtigungen, die aufgrund eines fehlgeschlagenen HTTP-Aufrufs nicht geliefert werden konnten, werden nach 10 Minuten erneut versucht.
Codebeispiele
Es folgen einige Codebeispiele in GitHub.
- Microsoft Graph Schulungsmodul – Verwenden von Änderungsbenachrichtigungen und Nachverfolgen von Änderungen mit Microsoft Graph
- Microsoft Graph Webhooks-Beispiel für Node.js
- Microsoft Graph Webhooks-Beispiel für ASP.NET Core
- Microsoft Graph Webhooks-Beispiel für Java Spring
Firewallkonfiguration
Sie können die Firewall, die Ihre Benachrichtigungs-URL schützt, optional so konfigurieren, dass sie eingehende Verbindungen nur von Microsoft Graph zulässt. Auf diese Weise können Sie die Gefährdung durch ungültige Änderungsbenachrichtigungen, die an Ihre Benachrichtigungs-URL gesendet werden, weiter verringern. Diese ungültigen Änderungsbenachrichtigungen können versuchen, die von Ihnen implementierte benutzerdefinierte Logik auszulösen. Eine vollständige Liste der IP-Adressen, die von Microsoft Graph zur Übermittlung von Änderungsbenachrichtigungen verwendet werden, finden Sie unter Zusätzliche Endpunkte für Microsoft 365.
Hinweis
Die aufgeführten IP-Adressen, die zur Übermittlung von Änderungsbenachrichtigungen verwendet werden, können jederzeit ohne Vorankündigung aktualisiert werden.
Wartezeit
Die folgende Tabelle enthält eine Liste der voraussichtlichen Wartezeiten zwischen dem Eintreten eines Ereignisses im Dienst und der Übermittlung der Änderungsbenachrichtigung.
| Ressource | Durchschnittliche Wartezeit | Maximale Wartezeit |
|---|---|---|
| alert | Weniger als 3 Minuten | 5 Minuten |
| callRecord | Weniger als 15 Minuten | 60 Minuten |
| channel | Weniger als 10 Sekunden | 60 Minuten |
| chat | Weniger als 10 Sekunden | 60 Minuten |
| chatMessage | Weniger als 10 Sekunden | 1 Minute |
| [contact][] | Unbekannt | Unbekannt |
| conversation | Unbekannt | Unbekannt |
| conversationMember | Weniger als 10 Sekunden | 60 Minuten |
| driveItem | Weniger als 1 Minute | 5 Minuten |
| event | Unbekannt | Unbekannt |
| group | Weniger als 2 Minuten | 15 Minuten |
| list | Weniger als 1 Minute | 5 Minuten |
| message | Unbekannt | Unbekannt |
| onlineMeeting | Weniger als 10 Sekunden | 1 Minute |
| presence | Weniger als 10 Sekunden | 1 Minute |
| Drucker | Weniger als 1 Minute | 5 Minuten |
| printTaskDefinition | Weniger als 1 Minute | 5 Minuten |
| team | Weniger als 10 Sekunden | 60 Minuten |
| [todoTask][] | Weniger als 2 Minuten | 15 Minuten |
| user | Weniger als 2 Minuten | 15 Minuten |
Hinweis
Die Wartezeit, die für die Warnungs-Ressource bereitgestellt wird, gilt erst nach der Erstellung der Benachrichtigung. Sie enthält nicht die Zeit, die eine Regel benötigt, um eine Benachrichtigung aus den Daten zu erstellen.
Siehe auch
Feedback
Feedback senden und anzeigen für