Teams-Gruppenbild mit PowerAutomate (Flow) ändern

Für PowerAutomate gibt es mittlerweile unzählige Konnektoren und Möglichkeiten. Eine für uns nicht unwichtige und mit Sicherheit viel genutzte Aktion gibt es mit den Standardmitteln jedoch leider nicht: Das Ändern eines Gruppenbilds für ein Team in Microsoft Teams bzw. Office 365 Gruppen.

Per Graph-API und benutzerdefinierten Konnektoren können wir diese Aktion jedoch selbst bauen.

Am Ende erreichen wir folgendes Ziel

Wir haben eine eigene Aktion, mit der wir mittels GroupID und Base64-Image das Bild abändern können.


Voraussetzungen
Bevor wir loslegen, müssen ein paar Dinge beachtet werden, die technisch bedingt durch die API limitiert sind.
– Die API funktioniert nur im User-Kontext.
– Der User, der die Connection ausführt, muss demnach Owner der gewünschten Gruppe sein.
– Die Schnittstelle nimmt das Bild nur im Base64-Format an.
– Das Bild muss daher als String übergeben werden.
– Über Base64 Image Encoder (base64-image.de) können JPEGs, PNGs, etc. umgewandelt werden. Muss das Bild dynamisch übergeben werden, gibt es genügend Tutorials im Netz, die zeigen, wie man Bilder mit Bordmitteln umwandeln kann (Stichwort Expressions).
– Die Bilder dürfen NICHT größer als 4MB sein (werden Bilder dynamisch übergeben, sollte das vorher abgefangen werden).
 
Außerdem benötigt man Zugriff bzw. die nötigen Rechte um im Azure AD eine App registrieren zu können (anderenfalls schlägt die Authentifizierung fehlt).

Hier noch einmal der grobe Ablauf:
1.      Anlage/Berechtigung der Applikation im Azure AD.
2.      Anlage des benutzerdefinierten Connectors (In PowerAutomate / Flow).
3.      Verwendung der Aktion im Worfklow selbst.

Anlage der Applikation im Azure AD

Aufruf des Azure Active Directory


Unter dem Menüpunkt „App-Registrierung“, klicke auf „Neue Registrierung“.

Hier kann ein beliebiger Namen ausgewählt werden, außerdem sollte die Umleitungs-URL unten auf „https://global.consent.azure-apim.net/redirect“ stehen.


Anschließend erstellen wir unter dem Punkt „Zertifikate & Geheimnisse“ einen geheimen Client Secret.
Achtung: Nach Ablauf der einstellbaren Ablaufzeit funktioniert der Zugriff nicht mehr. Es müsste dann ein neuer Clientschlüssel erstellt werden.

Der hierbei erscheinende Wert (siehe Screenshot -> rote Markierung) muss gespeichert werden, da er zu einem späteren Zeitpunkt noch benötigt wird.
Nun konfigurieren wir, was die Schnittstelle überhaupt alles darf. Hierfür klicken wir auf „Berechtigung hinzufügen“.

Wähle „Microsoft Graph“:

Hier selektieren wir „Delegierte Berechtigungen“, suchen nach „group“ und wählen „Group.ReadWrite.All“ aus. Anschließend kann die Berechtigung gespeichert werden.
Damit die Rechte greifen, muss noch die Administratorzustimmung erteilt werden:
Akzeptiere mit „Ja“:
Zuletzt speichern wir uns auch die Application ID (ClientID) und die Directory ID (TenantID) ab. Diese findet man in der Übersicht unserer erstellten Applikation.

Die Vorbereitungen von Azure-Seiten sind nun alle getroffen. Als nächstes legen wir den Konnektor in PowerAutomate an.

Anlage des benutzerdefinierten Konnektors (in PowerAutomate / Flow)

Login unter „https://flow.microsoft.com/“. Navigiere unter „Daten“ zu den „Benutzerdefinierten Connectors“.

Erstelle einen neuen Konnektor ohne Vorlage:
Wähle einen beliebigen Namen:
Das Symbol, die Hintergrundfarbe und die Beschreibung können nach Belieben gewählt werden. Übernehme das Schema Host + Basis-URL wie im folgenden Screenshot. Navigiere anschließend unten rechts zum Punk „Sicherheit“.
Die Authentifizierungsmethode solle „OAuth 2.0“ sein:
Hier konfigurieren wir die Authentifizierung unseres Konnektors mit unserer erstellten Applikation bei Azure. Dort kommen ebenfalls die zuvor gespeicherten Daten zum Einsatz.
IdentitätsanbieterAzure Active Directory
Client IDVon der erstellten Applikation gespeichert
Client secretVon der erstellten Applikation gespeichert
Authorization URL“https://login.windows.net”
Tenant ID“Common”
Resource URL“https://graph.microsoft.com”
Bereichhttps://graph.microsoft.com/.default
Wähle „Neue Aktion“ und vergebe eine Namen:
Über “Aus Beispiel importieren” unter „Anforderungen“ konfigurieren wir unseren API-Befehl.
Wähle PUT und füge folgende Werte ein.
URLhttps://graph.microsoft.com/v1.0/groups/{GroupID}/photo/$value
HeaderContent-Type Image/jpeg
Text{
   "$content-type":"application/octet-stream",
   "$content":"string"
}

Bestätige mit „Importieren“

Bearbeite „Content-Type“ unter Header:
Konfiguriere wie folgt:
Bearbeite „body“ unter Text:
Bearbeite „$content“ innerhalb vom body :
Bearbeite wie folgt:
Navigiere zurück:
Und bearbeite ebenfalls „$content-type“:
Bearbeite wie folgt:
Den größten Teil haben wir nun geschafft. Zuletzt müssen wir den Konnektor erstellen und die Aktion nur noch anwenden.

Auswahl der erstellen Aktion im Worfklow. Diese steht (in jedem Flow) unter „Benutzerdefiniert“ zur Auswahl bereit.
Unter „GroupID“ fügt man letztlich noch die ID der Gruppe ein und unter „Base64-Image“ den String für das Bild:
Ich persönlich setze das Bild vorher immer gern in eine Variable und setze diese dann ein. Wie am Anfang schon beschrieben lässt sich jedes Bild über Base64 Image Encoder (base64-image.de) in Base64 codieren. Soll das Bild dynamisch gezogen werden, gibt’s im Netz viele Tutorials die zeigen, wie man mit Bordmitteln normale Bilder in Base64 codieren kann.

Viel Spaß damit!