15/05/2024

AstucesMicrosoft TeamsOffice 365PowerShell

Microsoft Teams : Publier un message via PowerShell et Webhook

I. Présentation

Réservé aux clients Office 365, Microsoft Teams est d'après la firme de Redmond "un espace d'équipe pour l'échange instantané et la collaboration dans Office 365". En effet, l'intégration de Teams au sein du package Office 365 est forte puisqu'il est directement en relation avec SharePoint/OneDrive, OneNote et même Skype (à qui d'ailleurs il reprend quelques fonctions).

Ces derniers temps et pour notre bonheur, les développeurs s'activent sur Microsoft Teams pour proposer des connecteurs, c'est-à-dire l'intégration et la connexion de Teams avec d'autres applications et services. Et non pas forcément des outils Microsoft, mais des outils tiers.

Il y a un connecteur particulièrement intéressant qui se nomme "Webhook entrant" et qui comme son nom l'indique permet d'envoyer des requêtes web à Teams (via la méthode POST) pour envoyer des données. Ainsi, on peut imaginer publier des messages dans Teams par l'envoi d'une requête web ; chose que PowerShell sait très bien faire, là encore pour notre plus grand bonheur.

Voyons ensemble comment ajouter le connecteur Webhook sur un canal Teams et ensuite comment publier un message dans Teams avec PowerShell.

Plutôt que de recevoir des notifications par e-mail, il peut être intéressant de bouleverser ses habitudes et d'envoyer les messages directement dans un canal de communication au sein de Teams. Par exemple, à la fin du déploiement d'un poste via un serveur WDS-MDT (ou autre), on peut exécuter un script PowerShell (tout simple) qui ira publier un message dans Teams, pour - par exemple - indiquer différentes informations sur le poste déployé.

II. Créer le connecteur Webhook

Au sein de Microsoft Teams, nous allons ajouter un nouveau connecteur sur le canal dans lequel nous souhaitons pusher des messages. Cliquez sur l'icône "..." au niveau du canal souhaité, dans mon cas "Déploiements (WDS-MDT)" au sein d'une équipe "Notifications", et cliquez sur "Connecteurs".

Vous avez ensuite accès à la liste des connecteurs déjà ajoutés à ce canal et ceux que vous pouvez ajouter. La liste grossie au fil du temps, ce qui est une bonne chose. Pour notre part, nous allons ajouter le connecteur "Webhook entrant (Incoming Webhook)" ; cliquez sur le bouton "Ajouter".

Il faut donner un nom à notre Webhook, par exemple "webhook-mdt-wds", ce qui sera en quelque sorte le nom utilisé pour poster les messages dans Teams. Vous pouvez même lui attribuer une image en cliquant sur le bouton "Télécharger une image". Ensuite, descendez un peu... et cliquez sur "Créer".

Après quelques secondes, le connecteur Webhook doit être créé, vous avez désormais la possibilité de copier une URL. Cette URL est importante car elle permet d'envoyer des données à ce canal, nous l'utiliserons pour la publication des messages.

Dans le menu des connecteurs, on remarque le webhook est présent et qu'il est possible de revenir sur sa configuration, chose qui n'a pas d'utilité ici. Vous pouvez fermer cette fenêtre.

Nous allons passer à la suite puisque la configuration de Teams est terminée, le canal est prêt à recevoir des messages via le Webhook entrant.

III. Publier un message dans Teams avec PowerShell

Pour la publication du message dans Teams en utilisant PowerShell, on va exécuter une requête Web avec une méthode POST pour envoyer nos données à destination du Webhook. Je vous propose d'utiliser mon script PowerShell baptisé "New-TeamsMessage" pour disposer d'un code prêt à l'emploi pour réaliser cette opération, vous retrouverez également quelques exemples et des explications sur l'utilisation du script : New-TeamsMessage

Par exemple, en exécutant mon script de la façon suivante :

.\New-TeamsMessage.ps1 -WebhookURL "https://outlook.office.com/webhook/a9999b3f-1001-4711-f4h9-5e6fffggggg@aaaaa-bbbbb-cccccc/IncomingWebhook/28g90bdcb7ad312ab7afe6598ca7f69b/4a10bd21-2017-fbfb-ffff-585f639e84b0" -MessageText "Hello Teams! From PowerShell"

Vous obtiendrez ceci dans Teams :

Dans le principe, c'est assez simple,on stockage dans une variable l'URL de notre Webhook :

$WebhookURL = "https://outlook.office.com/webhook/a9999b3f-1001-4711-f4h9-5e6fffggggg@aaaaa-bbbbb-cccccc/IncomingWebhook/28g90bdcb7ad312ab7afe6598ca7f69b/4a10bd21-2017-fbfb-ffff-585f639e84b0"

Puis, on définit une hashtable dans PowerShell pour contenir les paramètres de notre message :

$Body = @{
            'text'= "Mon message"
}

On construit la requête que l'on va envoyer au Webhook :

# Build the request
$Params = @{
         Headers = @{'accept'='application/json'}
         Body = $Body | ConvertTo-Json
         Method = 'Post'
         URI = $WebhookURL 
}

Puis on exécute la requête en utilisant la hashtable de paramètres $Params :

Invoke-RestMethod @Params

Pour personnaliser encore plus les messages envoyés à Teams, par exemple pour inclure un bouton d'actions ou encore des images dans votre message, je vous propose de lire cet article à propos de l'API Connectors et le support de "schema.org/ViewAction" : https://dev.outlook.com/Connectors/Reference

Qu'allez-vous envoyer comme message dans Teams à partir de PowerShell ?

Sinon pour ceux que ça intéresse d'envoyer des messages depuis Linux avec Curl ou encore des notifications directement depuis Azure, je vous recommande de lire l'article de Stanislas Quastana sur le sujet : Remonter des informations Azure dans Microsoft Teams avec les Webhooks

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

3 commentaires sur “Microsoft Teams : Publier un message via PowerShell et Webhook

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.