myair85
Goto Top

MS Teams Presence Status auf HTML Seite anzeigen

Hallo zusammen,

ich suche eine Möglichkeit den Presence Status von Microsoft Teams abzufragen und auf einer HTML Seite anzuzeigen.

Wir haben an der Tür kleine Displays, die als Türschilder fungieren. Aktuell läuft dort eine HTML Seite, auf der man über Buttons die Anzeige der Verfügbarkeit steuern kann.
Zukünftig soll hier jedoch der Teams Verfügbarkeits Status angezeigt werden.
Da in den Büros bis zu 4 Mitarbeiter:innen sitzen, sollen auch alle Verfügbarkeiten angezeigt werden.


Ich habe schon eine Option über Microsoft Graph gefunden, die mir aber sehr kompliziert erscheint und ich auch nicht sicher bin, ob dieser Weg für meine Anwendung überhaupt funktioniert.
Wenn da jemand mehr Ahnung hat, bin ich dankbar über eine Rückmeldung.

Gruß
Stefan

Content-Key: 21830278352

Url: https://administrator.de/contentid/21830278352

Printed on: April 29, 2024 at 10:04 o'clock

Member: NordicMike
NordicMike Jan 15, 2024 at 15:05:27 (UTC)
Goto Top
Darf ich fragen was die Anzeige bringen soll? Wie erkennt die Präsenz anzeige ob sich der Teilnehmer im Raum befindet oder im Homeoffice? Er kann ja auch sonst wo sein und seine Anzeige grün oder rot haben.

Das wäre mal interessant...
Member: myair85
myair85 Jan 15, 2024 at 15:07:43 (UTC)
Goto Top
Das wird bei uns in Teams eingestellt.
Member: mbehrens
mbehrens Jan 15, 2024 at 15:13:53 (UTC)
Goto Top
Zitat von @myair85:

Ich habe schon eine Option über Microsoft Graph gefunden, die mir aber sehr kompliziert erscheint und ich auch nicht sicher bin, ob dieser Weg für meine Anwendung überhaupt funktioniert.

Das wäre schon der richtige Weg (z. B. über getPresencesByUserId). Ob dies dann in der Anwendung funktioniert, kann hier niemand beurteilen.
Member: Celiko
Celiko Jan 15, 2024 at 15:24:44 (UTC)
Goto Top
Moin,

da ich mit der Graph API immer nur mit PowerShell arbeite hier ein kleiner Hinweis für Powershell:

Aus dem Modul Microsoft.Graph.CloudCommunications kannst du bspw. folgende CMDlets nutzen:
Get-MgUserPresence #Abruf der Status für einen einzelnen User
Get-MgCommunicationPresenceByUserId #Abruf mehrere User (User ID notwendig)

Hier der Link:
MS Graph 1.0 - Presence Resource Type

Unter "Request" siehst du dann auch andere Programmiersprachen, mit denen zu die Abfrage laufen lassen kannst --> Java, Javascript, C# PHP, Python...
Vielleicht wirst du hier fündig und kannst es mit der Graph API realisieren (die auch erst seit kurzem zur Verfügung steht)?
Einen anderen Weg die Presence auszuwerten kenne ich nicht.

VG
Celiko
Member: myair85
myair85 Jan 15, 2024 at 17:45:50 (UTC)
Goto Top
Zitat von @Celiko:

Moin,

da ich mit der Graph API immer nur mit PowerShell arbeite hier ein kleiner Hinweis für Powershell:

Aus dem Modul Microsoft.Graph.CloudCommunications kannst du bspw. folgende CMDlets nutzen:
Get-MgUserPresence #Abruf der Status für einen einzelnen User
Get-MgCommunicationPresenceByUserId #Abruf mehrere User (User ID notwendig)

Hier der Link:
MS Graph 1.0 - Presence Resource Type

Unter "Request" siehst du dann auch andere Programmiersprachen, mit denen zu die Abfrage laufen lassen kannst --> Java, Javascript, C# PHP, Python...
Vielleicht wirst du hier fündig und kannst es mit der Graph API realisieren (die auch erst seit kurzem zur Verfügung steht)?
Einen anderen Weg die Presence auszuwerten kenne ich nicht.

VG
Celiko

Ah cool. Danke, das teste ich mal aus!
Und so bekomme ich das Ergebnis auch in eine HTML Datei?
Member: Celiko
Celiko Jan 15, 2024 at 23:22:23 (UTC)
Goto Top
Moin,

Naja sobald du die Daten irgendwie zur Verfügung hast kannst du sie sicherlich auf deine HTML Seite hinzufügen und automatisch updaten lassen.

Webentwicklung ist nicht so mein Ding - da geht aber bestimmt einiges mit Javascript bspw.

Vg
Celiko
Member: myair85
myair85 Jan 16, 2024 at 10:05:52 (UTC)
Goto Top
Zitat von @Celiko:

Moin,

da ich mit der Graph API immer nur mit PowerShell arbeite hier ein kleiner Hinweis für Powershell:

Aus dem Modul Microsoft.Graph.CloudCommunications kannst du bspw. folgende CMDlets nutzen:
Get-MgUserPresence #Abruf der Status für einen einzelnen User
Get-MgCommunicationPresenceByUserId #Abruf mehrere User (User ID notwendig)

Hier der Link:
MS Graph 1.0 - Presence Resource Type

Unter "Request" siehst du dann auch andere Programmiersprachen, mit denen zu die Abfrage laufen lassen kannst --> Java, Javascript, C# PHP, Python...
Vielleicht wirst du hier fündig und kannst es mit der Graph API realisieren (die auch erst seit kurzem zur Verfügung steht)?
Einen anderen Weg die Presence auszuwerten kenne ich nicht.

VG
Celiko

Also ich habe mir das mal angesehen. Ich verstehe nicht unbedingt nur Bahnhof, aber ich sehe da schon sehr viele Züge.
Wo lasse ich die Auswertung zum Beispiel laufen und welcher Benutzer bzw. welche Berechtigungen muss der User haben?
Member: Michi91
Michi91 Jan 16, 2024 updated at 10:42:30 (UTC)
Goto Top
wo liegt die HTML Datei bisher? Am einfachsten wird es sicherlich sein, wenn irgendwo ein Powershell-Script z.B. minütlich läuft und neue HTML Dateien erzeugt und ablegt. Alternativ kann man die Graph API auch direkt per JavaScript ansprechen, aber das halte ich für komplexer / eher was für geübte Webentwickler.

Ich selber würde mein Glück über https://github.com/microsoftgraph/msgraph-sdk-php versuchen, da mir PHP am ehesten liegt

Was für Displays sind das?
Member: Celiko
Celiko Jan 16, 2024 updated at 10:49:18 (UTC)
Goto Top
Moin,

wenn ich mit der Graph API arbeite nutze ich immer eine Managed Identity.
Das heißt, dass deine Managed Identity die Presence-Daten von der Graph API abholt und du die dann nutzen kannst, um sie auf deiner HTML Seite zu aktualisieren.

Die Managed Identity kannst du per GUI erstellen und anschließend per Powershell bspw. berechtigen.

Die Managed Identity weise ich ich immer einer virtuellen Maschine zu, die sich dann im Azure auch als Managed Identity herantreten darf mit den entsprechenden Berechtigungen.

Hier mal ein Beispiel, wie ich eine Managed Identity eine Berechtigung zuweise:
#Grants a managed identity (application) access to the Graph API Permission

# Managed Serive Identity (msi) per GUI erstellen und dann die ID in der Variable $msiClientID hinterlegen
#--> Hier Managed Identity ID eingeben, die zuvor per GUI im Azure erstellt wurde, Beispiel:
$msiClientID = "15b7b22c-c154-4fea-a5a9-3d6ef0007f69"  
#Meine msiClientID habe ich natürlich verändert :)

#Globaler Administrator vereinfacht Berechtigungsproblematiken *
#$cred = Get-Credential 
#Connect-AzureAD -Credential $cred #ONLY WORKING ON BASIC AUTH - NOT WITH MFA
Connect-AzureAD #WORKS WITH MFA! --> anmelden als Global-Admin (GA)

# Graph API Service Principal (immer gleich)
$graph = Get-AzureADServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'"  

# app permission set --> Welche Berechtigung der Managed Identity gegeben werden soll. Bitte die Graph API Doku heranziehen für die korrekte Berechtigung. Hier nur ein Beispiel:
#$msGraphPermission = "User.Read.All" 

# Hol die Graph API Berechtigungs ID
$appRoles = $graph.AppRoles | Where-Object {$_.Value -in $msGraphPermission -and $_.AllowedMemberTypes -contains "Application"}  

#AppID of Managed indentiy
$msi = Get-AzureADServicePrincipal -Filter "appId eq '$msiClientID'"  

#Zuweisen der Graph API Berechtigung zur Managed Identity
$approles | ForEach-Object {New-AzureADServiceAppRoleAssignment -Objectid $msi.ObjectId -principalid $msi.objectid -id $approles.id -resourceid $graph.ObjectId}

Zum entfernen:
#$approles | ForEach-Object {Remove-AzureADServiceAppRoleAssignment -Objectid $msi.ObjectId -principalid $msi.objectid -id $approles.id -resourceid $graph.ObjectId}

WICHTIG:
Wo ich paar mal durchgedreht bin ist, dass die Berechtigung eine Weile dauern kann, bis das greift. Deshalb am besten Berechtigung setzen und morgen testen, ob das geht*

Ob das bei euch möglich ist weiß ich nicht - musste dich mal schlau machen.
Gibt aber auch andere Möglichkeiten. Findest im Internet bestimmt was dazu 👌

Sobald du die Daten abgerufen hast musst du schauen, wie du die auf deine HTML Seite aktualisieren lässt.
Da bin ich leider mit meinem Wissen an einem Stau, da ich noch nichts wirklich mit HTML gemacht habe.

VG
Celiko