Synchroniser mes calendriers avec Flow

Par Loïc Cimon, le 16 aout 2021


//Corrige ce texte: Dans mon métier, je suis souvent amené à devoir gérer plusieurs calendriers. À force de louper des réunions parce que je n’ai pas vérifié le bon calendrier, je me suis décidé à chercher une solution. 

L’une d’entre elles a été d’utiliser Power Automate et le connecteur Outlook pour synchroniser mes réunions d’un calendrier à l’autre : 

Lorsqu’une réunion est ajoutée dans mon calendrier Source, une copie est automatiquement créée dans mon calendrier Cible.  

Puis un message Teams est envoyé sur mon compte Cible. Depuis le message, je peux répondre à l’organisateur. Ce qui me permet de gérer mes réunions en restant dans le même contexte. 

Le flow met également à jour les réunions ou les supprime si besoin. 

Vue d'ensemble du flow SyncCalendarFlow

Trigger

Ce flow utilise le déclencheur “When an event is added, updated or deleted (V3)” du connecteur Office 365 Outlook

Il m’a fallu pas mal de réflexion pour appréhender ce déclencheur. Principalement pour comprendre pourquoi il se déclenche plusieurs fois lors de la création ou la mise à jour d’une même réunion. Ce qui est plus ou moins expliqué dans la documentation :  

Please note, that if you use any version (V1, V2, V3) of When a new event is created trigger, when you accept the meeting invitation, the trigger would fire second time for this meeting event. The reason for this is that the Outlook service treats an event after acceptance as a new one and rewrites its Id and created date (so, recreates event in fact). The user can workaround this issue by filtering trigger’s outputs on Response type parameter using built-in Control module and its Condition action.  

Pour éviter les doublons et exclure les réunions où mon compte Cible est impliqué, j’ai rajouté une étape de filtrage en fonction du statut, par exemple. 

Capture des filtres du flow SyncCalendarFlow

Transférer vs Copier une réunion

Ma première tentative transférait les réunions. Simple et efficace. 

L’inconvénient est que l’organisateur est informé du transfert et l’ensemble des participants peuvent voir l’email dans le suivi de la réunion. Je souhaitais un système où je n’ai pas à partager mon email client. 

Créer une copie est donc la solution : seul mon compte Cible est l’organisateur de la réunion et le seul à avoir connaissance de celle-ci. Le détail des participants et le contenu sont ajoutés dans le corps de la copie. 

Cependant cela n’hésite de gérer moi-même les mises à jour. 

Note : Mon compte Cible n’est pas listé comme participants afin d’éviter les boucles et doublons dans mon calendrier Cible.

Gérer les mises à jour

Gérer les mises à jour nécessite d’être capable de retrouver une réunion créée précédemment. Lorsque le connecteur détecte une mise à jour, les anciennes valeurs ne sont pas renvoyées par le déclencheur. Et potentiellement, la date, les participants et le titre peuvent avoir été changé. 

J’ajoute donc l’ID de la réunion d’origine dans le titre de la copie afin de filtrer les réunions, comme ci-dessous :

Capture de l'action Get Events

Notifications et réponses

Comme la copie des réunions est faite directement en mon nom via Power Automate, aucune notification n’est envoyée. Je palie à ça en envoyant un message Teams à mon compte Cible grâce à l’action “Post an adaptive card and wait for an answer” du connecteur Teams. 

Capture de l'action Get Events

Le message contient un résumé et 4 boutons pour répondre à l’organisateur : 

  • Accepter : l’organisateur est notifié. 
  • Décliner : l’organisateur est notifié puis la réunion est  supprimée des 2 calendriers. 
  • Ignorer : il ne se passe rien. 
  • Supprimer : l’organisateur n’est pas notifié, la réunion est simplement supprimée du calendrier Cible uniquement.

Avec ce mécanisme, je peux répondre rapidement à une réunion depuis mon compte Cible depuis le même contexte et de manière transparente pour l’organisateur. 

Vous trouverez le code de ce flow sur mon GitHub.

comments powered by Disqus