Kürzlich bekamen wir eine Anfrage zu dem Thema: Auswertung von Microsoft Teams. Das Ziel war es zu wissen ob und wie Teams in der Organisation verwendet werden und was man tun kann, um seinen Mitarbeitern ein effektiveres Arbeiten mit Teams zu ermöglichen. Dabei sollen Nutzungsstatistiken anonym ausgewertet und die Anzahl von Nachrichten und Aktionen gezählt werden. Wenn möglich sollen ActiveDirectory Daten mit einfließen, um zum Beispiel Standortinformationen zu bekommen.
Wir hatten bereits vor einiger Zeit eine ähnliche Anfrage erhalten und haben damals eine umständliche Lösung aufgebaut. Wir haben mithilfe von Headless-Browsern gebaut, die Teams steuerten und jedes Team einzeln durchklicken, um anhand des HTML die gewünschten Informationen zu holen. Dynamisches Nachladen von Inhalten machte das Ganze damals zu einer zeitaufwändigen, fehleranfälligen und zermürbenden Angelegenheit. Schnell war klar, dass wir diesen Weg nicht noch einmal gehen wollten.
Mittlerweile hat Microsoft die neue Teams API in Microsoft Graph als beta bereitgestellt. Ein kurzer Überblick über die abrufbaren Informationen und die Teams API schien uns alles zu liefern, was wir für die gewünschte Auswertung benötigten.
In diesem Artikel möchte ich meine bisherigen Erfahrungen mit der Teams API teilen und auf einige Einschränkungen hinweisen denen die Teams API unterliegt.
Zuerst: Die Teams API ist immer noch in der Beta-Phase und kann jederzeit Änderungen unterliegen. Die Nutzung der Teams API in einer stabilen Produktionsumgebung ist derzeit von Microsoft nicht empfohlen.
Der erste Schritt beim Abrufen der Teams Informationen war für mich das Auslesen aller Teams in der Organisation. Die Microsoft Graph Dokumentation weist darauf hin, dass zum Abrufen aller Teams die Group API verwendet wird:
https://graph.microsoft.com/beta/groups?$filter=resourceProvisioningOptions/Any(x:x eq 'Team')
Diese Anfrage filtert die Gruppen des Tenants nach solchen, die unter den Bereitstellungsoptionen auch „Team“ aufgeführt haben. Jedes Team in Microsoft Teams ist mit einer O365 Gruppe verbunden, über die auch Besitzer und Mitglieder des Teams verwaltet werden.
Die Microsoft Graph Dokumentation warnt hier jedoch, dass alte Teams von dieser Anfrage eventuell nicht gefunden werden, da diese erstellt worden sein könnten, bevor die Bereitstellungsoption „Team“ existierte.
Weitere Informationen zu diesem Endpunkt können hier gefunden werden.
Zum Testen, welche Daten der Endpunkt mir liefert, habe ich den Microsoft Graph Explorer verwendet.
Wie erwartet, liefert der Endpunkt die Gruppen zu allen Teams im Tenant zurück.
Da wir nun schon bei der Group API waren, war der nächste Schritt für mich das Auslesen der Besitzer und Mitglieder des Teams, da diese einfach die Besitzer und Mitglieder der gerade abgerufenen Gruppen sind und so auch über die Groups API abgerufen werden:
https://graph.microsoft.com/v1.0/groups/{groupId}/owners
bzw.
https://graph.microsoft.com/v1.0/groups/{groupId}/members
Mit diesen Informationen können wir später feststellen, wie viele Leute sich durchschnittlich ein Team teilen, von wie vielen Teams ein Mitarbeiter durchschnittlich Mitglied ist und wie viele Mitarbeiter der Organisation Teams potentiell nutzen und darin vertreten sind.
Hier habe ich mithilfe von Power BI eine Visualisierung der Team nach Nutzeranzahl gefiltert erstellt:
Jetzt haben wir bereits unsere Teams, ihre Besitzer und Mitglieder, aber die Group API hat uns nicht alle Informationen zu den Teams geliefert, die wir uns gewünscht hätten.
Um spezifische Informationen für Teams abzurufen, bietet die Teams API einen Endpunkt:
https://graph.microsoft.com/beta/teams/{groupId}
Dieser Endpunkt liefert die interne Team Id, die Url des Teams, die Information, ob das Team archiviert wurde und verschiedene Einstellungen des Teams zurück.
Oder zumindest war das meine Erwartungshaltung. Denn was ich tatsächlich zurückbekam war folgender Fehler:
Der Grund hierfür war, dass ich den Aufruf nicht als Administrator durchgeführt hatte. Als globaler Administrator funktionierte der Aufruf wie erwartet.
Mithilfe dieser Informationen kann nun eine Übersicht über archivierte Teams erstellt und auch die meist verwendeten Einstellungen der Teams herausgestellt werden.
Weitere Informationen können hier gefunden werden.
Zusätzlich wollen wir ebenfalls gelöschte Teams auswerten können. Also habe ich auch eine Anfrage zum Auslesen aller gelöschten Teams zusammengebaut:
https://graph.microsoft.com/beta/directory/deletedItems/microsoft.graph.group?$filter=resourceProvisioningOptions/Any(x:x eq 'Team')
Genauere Informationen über das Abrufen von gelöschten Ressourcen können hier nachgelesen werden.
Die Besitzer und Mitglieder für gelöschte Teams können über folgende Anfragen abgerufen werden:
https://graph.microsoft.com/beta/directory/deletedItems/microsoft.graph.group/{groupId}/owners
bzw.
https://graph.microsoft.com/beta/directory/deletedItems/microsoft.graph.group/{groupId}/members
Zur Zeit ist es nicht möglich genauere Team Informationen für gelöschte Teams abzurufen. Für gelöschte Inhalte sind die Teams-Gruppen, Besitzer und Mitglieder das Einzige was wir abrufen können.
Als nächstes habe ich die Kanäle zu den einzelnen Teams ausgelesen:
https://graph.microsoft.com/beta/teams/{groupId}/channels
Die Channels an sich haben für unsere Zwecke weniger interessante Informationen. Wir sind jedoch damit in der Lage festzustellen, ob die Mitarbeiter sich (vorausgesetzt sie besitzen die entsprechende Berechtigung) Kanäle anlegen, um sich in ihren Teams zu organisieren.
Hier kann die Dokumentation für diesen Endpunkt gefunden werden.
Der interessante Teil beginnt mit dem Abrufen der Nachrichten eines Kanals:
https://graph.microsoft.com/beta/teams/{groupId}/channels/{channelId}/messages
Die Nachrichten enthalten, abgesehen von der eigentlichen Nachricht, auch Anhänge, Erwähnungen von Gruppen, Personen, etc. und Reaktionen, wie z.B. Likes.
Hiermit kann man feststellen, wie aktiv die Nutzer Nachrichten schreiben, wie viele Nutzer regelmäßig aktiv sind, ob häufig Personen oder Gruppen per Erwähnung benachrichtigt werden, ob die Nutzer die Like-Funktionalitäten nutzen und Vieles mehr.
Die Dokumentation des Endpunktes findet sich hier.
Hier jedoch begann mein bisher so perfekt laufende Auswertung zu bröckeln. Ich erhielt folgende Fehlermeldung (schon wieder!):
Auch der globale Administrator hatte hier keinen Zugriff. Nach einiger Recherche stellte sich heraus, dass zur Zeit das Abrufen von Nachrichten nur für Nutzer erlaubt ist, die auch Mitglied des Teams sind. Microsoft hat jedoch bereits angekündigt, dies in einer zukünftigen Veröffentlichung der Teams API zu beheben.
Grundlegend, ist dies jedoch das Aus für eine globale Microsoft Teams Auswertung, es sei denn, man möchte einen Service Nutzer in jedes Team hinzufügen. Ich habe aber, um zumindest ein teilweises Reporting aufzustellen, dennoch weitergemacht. Im Idealfall wird es nutzbar, sobald die Restriktion beim Auslesen der Nachrichten aufgehoben wird.
Der letzte Schritt für meine Zwecke war das Auslesen der Antworten auf die zuvor abgerufenen Nachrichten:
https://graph.microsoft.com/beta/teams/{groupId}/channels/{channelId}/messages/{messageId}/replies
Dieser Endpunkt gibt, wie auch zuvor der Nachrichten-Endpunkt, eine Liste an Nachrichten zurück – mit den gleichen Eigenschaften.
Die Dokumentation kann hier gefunden werden.
Zusammen mit den vorher abgerufenen Nachrichten kann man nun ein Nutzungsprofil im Bezug auf Teams und Kanäle erstellen. So gibt die Menge an unterschiedlichen Verfassern von Nachrichten an, wie viele Nutzer des Unternehmens Teams nutzen und über das Erstellungs- und Änderungsdatum kann man die Nutzung sogar zeitlich filtern.
Hier habe ich die Anzahl der Nachrichten des letzten Jahres in einem Team nach Monaten aufgeschlüsselt dargestellt:
Rechnet man die Reaktionen vom Reaktionstyp ‚like‘ der Nachrichten eines Kanals zusammen, kann man auf Kanalebene, wenn man die Nachrichten aller Kanäle eines Teams zusammenrechnet, auch auf Teamebene herausfinden, in welchen Kanälen/Teams die meisten Likes verteilt werden und ist so auch in der Lage, besonders hilfreiche und beliebte Nachrichten herauszufiltern.
Als Beispiel habe ich in PowerBI die Anzahl der Likes in einem Team nach Kanal aufgeteilt:
Die Anhänge zeigen die Einbindung von Dateien in Konversationen. Darüber kann man feststellen, ob die Mitarbeiter andere Teammitglieder über für das Team relevante Dateien in den Kanälen informieren. Zusätzlich kann auch die Nutzung von Teams Cards über die Anhänge festgestellt werden.
Abgesehen von der Microsoft Graph API gibt es noch eine weitere Möglichkeit eine Übersicht über Teams zu erhalten. Im Admin Center von Teams gibt es seit kurzem auch Analytic Reports.
Diese stellen vor allem die Nutzeraktivität in den Vordergrund, indem sie die aktiven Nutzer und Kanäle in einem Zeitraum darstellt.
Für alles, was darüber hinaus geht, liefern die Analytic Reports nicht viel.
Alles in allem geht die Graph API meiner Ansicht nach den richtigen Weg. Wir können nahezu alle wichtigen Informationen zu Teams in einer Organisation über die Graph API beziehen. Und wenn man jetzt schon auf solche Reports angewiesen ist, kann man durch Hinzufügen eines Service-Nutzers in jedes Team das Reporting auch aufsetzen. Diese Einschränkungen, was den auslesenden Benutzer angeht, sind jedoch ein Todeskriterium für jegliches organisationsweites Reporting, wenn man nicht so ohne weiteres, einen zusätzlichen Nutzer in jedes Team hinzufügen kann (was meistens der Fall ist). Ich hoffe, dass schon bald diese Einschränkungen aufgehoben werden und werde das Thema auch weiterhin verfolgen.
Derartige Microsoft Teams Auswertungen helfen Unternehmen zu verstehen, wie Microsoft Teams genutzt wird, wie die Arbeitsweise ist und in welchen Bereichen gegebenenfalls Schulungsbedarf besteht.
Für Fragen oder Feedback nutzt gerne die Diskussionsfunktion!
Kategorien: Microsoft Teams
Schlagwörter: Auswertung, Erfahrungsbericht, Microsoft Graph, Microsoft Teams, PowerBi, WebService
Haben Sie Fragen zu diesem Artikel oder brauchen Sie Unterstützung?
Nehmen Sie mit uns Kontakt auf!
Wir unterstützen Sie gerne bei Ihren Vorhaben!