Il y ‘a quelques jours, par erreur, j’ai inondé/floodé une communauté interne au bureau dans Viva Engage, dédié à informer mes collègues sur les dernières nouveautés Microsoft Teams. Ce n’était pas intentionnel, je vous assure ! C’était le résultat d’une erreur que j’ai commise en essayant d’optimiser mes flows Power Automate. Dans cet article, je vais vous expliquer ce qui s’est passé et surtout, comment j’ai corrigé mon erreur et ce que j’ai appris au passage.
Mon erreur
Tout a commencé quand j’ai décidé de créer un flow Power Automate qui à pour but de réactiver tous mes flows Power Automate inactifs ou suspendus une fois par mois, car comme vous le savez au bout de 90 jours d’inactivité Microsoft le désactive automatiquement. J’ai donc créé un flow qui parcourait tous mes flows et les réactivait si nécessaire. Le problème, c’est que j’ai oublié de filtrer le flow de publication automatique des articles de mon blog. Ce flow était censé publier un nouvel article de mon blog sur la communauté Viva Engage de Microsoft Teams, chaque fois que je publie un article sur mon Blog WordPress. Ce flow ne fonctionnait pas très bien et était désactivé pour une bonne raison 😅. Du coup le flow a été réactivé et a donc publié plusieurs articles de mon blog en boucle, sans s’arrêter !
Le résultat
En quelques minutes à peine, j’ai créé 4370 annonces Viva Engage avec le même contenu. Je n’ai pas remarqué mon erreur tout de suite, car je ne consultais pas la communauté à ce moment-là. Quand je m’en suis rendu compte, j’étais surpris ! J’avais pollué ma propre communauté avec des doublons inutiles et j’avais probablement embêté tous mes abonnés et collègues!
J’ai voulu supprimer tous les postes que j’avais créés, mais je me suis heurté à un obstacle : il n’existe aucun moyen de supprimer en masse du contenu dans Viva Engage par les outils administratifs de Microsoft. En tout cas je n’en ai pas trouvé😫. Je devais alors supprimer chaque poste manuellement, ce qui aurait pris des heures, voire des jours !
La solution
Heureusement, j’ai trouvé une solution grâce à Power Automate! Oui, le même outil qui m’avait causé cette erreur ! Chez moi il y a une expression pour ça “guérir le mal par le mal” 😉Mais cette fois, je l’ai utilisé à bon escient. J’ai créé 2 nouveaux flows. Le premier utilise le connecteur Viva Engage pour lister tous les postes de la communauté Microsoft Teams. Une fois le premier flow exécuté, j’ai pu rechercher le dernier article que j’ai publié manuellement. Ensuite, à l’aide de mon deuxième flow, j’ai utilisé un appel API pour supprimer chaque poste dans une boucle For Each.
La combinaison de ces deux flows m’a permis de supprimer toutes les annonces générées automatiquement par mon erreur en moins de deux jours et sans intervention manuelle. J’étais soulagé de voir que ma communauté était de nouveau propre et que je n’avais pas causé de dommages irréparables.
1er Flow
Dans un premier temps, on définit un déclencheur, ici moi j’ai choisi un déclencheur manuel. Ensuite on définit 3 variables :
- varAllMessages, qui nous permettra d’unir toutes les IDs des annonces Viva Engage. En effet lorsqu’on demande au connecteur Viva Engage de récupérer toutes les annonces d’une communauté il nous en retourne que 20 🙄
- varNoMoreMessages, un booléen (vrai/faux) qui retournera vrai s’il y à encore des annonces et false s’il n’y en a plus.
- varLastMessages, L’ID de notre dernière annonce récupérée de Viva Engage.
Ensuite, on utilise l’opérateur Do Until, afin de récolter toutes les annonces Viva Engage et ce jusqu’à ce qu’il y en ait plus :
@equals(variables('varNoMoreMessages'), true)
Grâce au connecteur Viva Engage, j’ai sélectionné le Group ID de ma communauté, ainsi que son ID réseau. Ici très important, il faut utiliser l’option Older Than avec la fonction ci-dessous qui pemet d’utiliser le dernier ID de la dernière requête de 20 pour aller chercher les annonces suivantes jusqu’à l’ID du dernier message 0.
if(equals(variables('varLastMessageID'), 0), null, variables('varLastMessageID'))
Maintenant qu’on récupère toutes les annonces, il faut la stopper si jamais nous arrivons à la dernière annonce. Pour cela on utilise une condition Oui/Non. On vérifie si la condition suivante est vraie (is equal to $true) :
empty(body('Get_messages_in_a_group')?['messages'])
Si la condition est vraie alors on quitte la boucle Do Until, sinon on passe dans la branche False qui elle effectue les étapes suivantes :
- Unie la variable varAllMessages avec le body du connecteur Viva Engage qui récupère les annonces.
- Rajoute le contenu de l’union dans la variable varAllMessages
- Définis l’ID de la dernière annonce récupéré à l’étape plus haut.
union(variables('varAllMessages'), body('Get_messages_in_a_group')?['messages'])
Pour récupérer le dernier ID, il faudra filtrer notre Output pour ne récupérer que l’ID comme ci-dessous :
last(body('Get_messages_in_a_group')?['messages']).ID
Finalement pour compter le nombre d’annonces totales on utilise Compose en utilisant comme input :
length(variables('varAllMessages'))
2ème Flow
Voici les étapes de mon 2ème Flow :
- Initialisé le token bearer utilisé pour me connecter via API à Viva Engage.
- Initialisé une variable qui inclura un tableau avec toutes les IDs des annonces Viva Engage à supprimer
- Exécuter une option de type Apply to each et supprimé 1 à 1 les annonces Viva Engage via un Appel API de type DELETE
Le code de l’appel API ressemble à ceci :
{
"type": "Http",
"inputs": {
"uri": "https://www.yammer.com/api/v1/messages/@{items('Apply_to_each')}",
"method": "DELETE",
"headers": {
"Accept": "application/json",
"Authorization": "Bearer @{variables('varToken')}",
"content-type": "application/json"
}
}
}
La leçon
Cette mésaventure m’a appris plusieurs choses. Tout d’abord, j’ai appris à être plus prudent avec mes flows Power Automate. Dorénavant, je vérifierais toujours les conditions et les filtres avant de les activer. Idéalement, je devrais aussi tester mes flows sur un environnement de développement avant de les déployer sur un environnement de production.
Ensuite, j’ai appris à utiliser le connecteur Viva Engage et à faire des appels API avec Power Automate. C’est une compétence très utile pour interagir avec des services web et automatiser des tâches complexes. Je vais certainement explorer davantage les possibilités offertes par ce connecteur et par les appels API.
Enfin, j’ai appris à rire de mes erreurs. Au lieu de supprimer la communauté et la recréer de zéro et perdre tout mon travail de publication, j’ai décidé de nettoyer ma communauté actuelle et d’en faire un article de blog pour partager mon expérience et mes apprentissages. D’ailleurs j’espère que vous avez apprécié cette lecture et que vous avez tiré quelque chose de positif de mon erreur.
Source
Voici les sources Microsoft et les articles d’autres personnes qui m’ont aidé à concevoir ces 2 flows :