Envoyer les notifications FyneDesk vers Microsoft Teams
Recevez un message dans votre canal Teams chaque fois qu'un ticket est créé, commenté ou change de statut. FyneDesk envoie l'événement à un webhook, et un court flux Power Automate le transforme en message Teams. Suivez les étapes ci-dessous dans l'ordre — cela prend environ dix minutes.
Comment ça marche
FyneDesk envoie chaque événement (nouveau ticket, nouveau commentaire, etc.) sous forme d'un petit paquet de données JSON à l'URL que vous fournissez. Microsoft Teams n'affiche pas ce paquet tout seul — votre flux Power Automate doit prendre les données et les publier sous forme de message.
C'est pourquoi un test peut dire « envoyé avec succès » alors que rien n'apparaît dans Teams : Power Automate répond 202 Accepted à l'instant où il reçoit une requête, donc « succès » signifie seulement que Microsoft a reçu les données. Cela ne dit rien sur le fait qu'un message ait été publié. Une fois que vous ajoutez l'étape de publication dans la Partie 3, les messages apparaîtront.
Avant de commencer
- Une équipe et un canal Microsoft Teams où vous voulez les notifications, et un compte Power Automate avec une licence qui permet de publier dans Teams.
- Un accès administrateur aux webhooks FyneDesk, sous Paramètres administrateur → Avancé → Webhooks (également accessible via Paramètres → Connexions → Webhooks).
- Environ dix minutes. Vous construirez un flux à partir d'un modèle prêt à l'emploi, collerez son URL dans FyneDesk, puis ajouterez une étape qui publie le message.
Configuration
C'est le chemin exact que notre équipe utilise, de bout en bout. Il produit un message texte simple et lisible. (Vous voulez que le message nomme chaque type d'événement, ou préférez-vous une carte formatée ? Consultez les options avancées ci-dessous.)
Partie 1 — Créer le flux à partir d'un modèle
Allez sur make.powerautomate.com et connectez-vous. Dans le menu de gauche, choisissez Templates, tapez webhook dans la zone de recherche, et ouvrez Send webhook alerts to a channel — la version simple, pas les versions « (TEST) ». Cliquez sur Continue (reconnectez-vous si on vous le demande).
Le modèle indique qu'il connectera Teams → Microsoft Teams et générera une URL de webhook. Avant de cliquer sur Create, définissez l'équipe et le canal où vous voulez que les notifications soient publiées — c'est facile à manquer, et c'est important.
Choisissez votre équipe et votre canal, puis cliquez sur Create. Lorsque le flux s'ouvre, cliquez sur Edit pour commencer à le modifier.
Partie 2 — Donner l'URL à FyneDesk
Dans le flux, cliquez sur la première boîte, « When a Teams webhook request is received », et copiez l'URL HTTP qu'elle affiche.
Ensuite, dans FyneDesk, allez dans Paramètres administrateur → Avancé → Webhooks et cliquez sur Ajouter un webhook :
- Nommez-le d'une manière que vous reconnaîtrez plus tard, par ex. Microsoft Teams.
- Collez l'URL Power Automate dans URL du point de terminaison (ce doit être un lien HTTPS).
- Laissez
ticket.createdcoché — c'est tout ce dont vous avez besoin pour commencer. (Vous pourrez ajouter d'autres événements plus tard.) - Cliquez sur Enregistrer.
Partie 3 — Indiquer au flux quoi publier
C'est l'étape facile à manquer — et c'est exactement pourquoi un test peut dire « envoyé » alors que rien n'apparaît dans Teams.
1. Supprimez les deux étapes prédéfinies. Le modèle ajoute une action Initialize variable (parfois deux) et une condition Attachments is null. Supprimez les deux — cliquez sur les … de chaque étape, puis Delete. Les laisser en place est ce qui déclenche l'erreur « AdaptiveCard ».
2. Ajoutez l'action de publication. Cliquez sur le + sous le déclencheur et choisissez Post message in a chat or channel (le connecteur Microsoft Teams). Définissez les menus déroulants :
| Champ | Définir sur |
|---|---|
| Post as | Flow bot |
| Post in | Channel |
| Team | Votre équipe |
| Channel | Le canal où vous voulez les notifications |
3. Construisez le message. Cliquez à l'intérieur de la boîte Message, cliquez sur le bouton bleu fx (Insert expression), collez l'expression ci-dessous exactement, puis cliquez sur Add.
concat('New ticket ', triggerBody()?['data']?['ticket_number'], ' - ', triggerBody()?['data']?['title'], ' | Status: ', triggerBody()?['data']?['status'], ' | Priority: ', triggerBody()?['data']?['priority'], ' | https://fynedesk.ai/tickets/', string(triggerBody()?['data']?['id']))
4. Enregistrez. Cliquez sur Save (en haut à droite). Vous devriez voir « Your flow is ready to go. »
- Insérez toujours l'expression avec le bouton fx — ne la tapez jamais en texte brut, et ne l'enveloppez jamais dans
@{ }. - Si vous avez utilisé une boîte Copilot à un moment, videz le champ Comment de cette étape avant d'enregistrer. Une longue note à cet endroit (plus de 256 caractères) bloque silencieusement l'enregistrement.
Partie 4 — Tester
Créez ou mettez à jour un vrai ticket dans FyneDesk. Un message apparaît dans votre canal Teams en quelques secondes.
ping sans numéro ni titre de ticket, donc le message de test paraît clairsemé (champs surtout vides). C'est normal. La vraie preuve est de créer ou commenter un vrai ticket et de surveiller le canal.
Optionnel : libeller chaque événement, ou publier une carte
L'expression ci-dessus commence toujours par « New ticket ». Si vous voulez que le message nomme l'événement (nouveau commentaire, changement de statut, etc.) ou si vous préférez une carte formatée, utilisez l'une des options ci-dessous. La configuration est identique — seule l'expression Message change.
Ce que FyneDesk envoie
Votre webhook peut s'abonner à quatre événements. Voici la forme de chaque paquet (les valeurs sont des exemples).
ticket.created
{
"event": "ticket.created",
"timestamp": "2026-05-30T22:19:59",
"organization": { "id": 173, "name": "SafePACS" },
"data": {
"id": 6381,
"ticket_number": "INC004736",
"title": "Printer not working",
"description": "The 3rd floor printer is offline",
"status": "New",
"priority": "Medium",
"ticket_type": "Incident",
"source": "Email",
"created_at": "2026-05-30T22:19:59"
}
}ticket.updated et ticket.status_changed utilisent la même forme que ci-dessus, plus updated_at, assigned_to et assigned_team_id.
ticket.commented — notez que les noms de champs sont légèrement différents ici :
{
"event": "ticket.commented",
"timestamp": "2026-05-30T22:19:59",
"organization": { "id": 173, "name": "SafePACS" },
"data": {
"ticket_id": 6381,
"ticket_number": "INC004736",
"ticket_title": "Printer not working",
"ticket_status": "New",
"content": "Any update on this?",
"comment_id": 8809,
"is_internal": false
}
}coalesce(...) pour basculer entre les différents noms de champs, donc un seul flux couvre tous les types d'événements. Pour les utiliser, cochez les événements supplémentaires sur votre webhook FyneDesk (Partie 2).
Option A — Un message texte plus riche
Au lieu de l'expression unique, tapez la mise en page ci-dessous dans la boîte Message. Tout ce qui n'est pas un 〈placeholder〉 est du texte brut que vous tapez. Pour chaque 〈placeholder〉, cliquez sur le bouton fx, collez l'expression correspondante du tableau, puis cliquez sur Add.
〈eventLabel〉 〈ticketNumber〉
〈title〉
Status: 〈status〉 • Priority: 〈priority〉
〈message〉
Open in FyneDesk: 〈link〉| Placeholder | Collez ceci dans la boîte d'expression fx |
|---|---|
| 〈eventLabel〉 | if(equals(triggerBody()?['event'],'ticket.created'),'🎫 New ticket',if(equals(triggerBody()?['event'],'ticket.commented'),'💬 New comment',if(equals(triggerBody()?['event'],'ticket.status_changed'),'🔄 Status changed','✏️ Ticket updated'))) |
| 〈ticketNumber〉 | triggerBody()?['data']?['ticket_number'] |
| 〈title〉 | coalesce(triggerBody()?['data']?['title'],triggerBody()?['data']?['ticket_title'],'(no title)') |
| 〈status〉 | coalesce(triggerBody()?['data']?['status'],triggerBody()?['data']?['ticket_status'],'-') |
| 〈priority〉 | coalesce(triggerBody()?['data']?['priority'],'-') |
| 〈message〉 | coalesce(triggerBody()?['data']?['content'],triggerBody()?['data']?['description'],'') |
| 〈link〉 | concat('https://fynedesk.ai/',if(equals(triggerBody()?['data']?['ticket_type'],'Service Request'),'requests/','tickets/'),string(coalesce(triggerBody()?['data']?['id'],triggerBody()?['data']?['ticket_id']))) |
Option B — Une carte formatée
Vous préférez une carte ? Utilisez l'action Post card in a chat or channel et collez ce qui suit dans le champ Adaptive Card. Elle utilise les mêmes expressions, donc ce sont les mêmes données dans une mise en page plus soignée.
{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.2",
"body": [
{
"type": "TextBlock",
"size": "Medium",
"weight": "Bolder",
"text": "@{if(equals(triggerBody()?['event'],'ticket.created'),'🎫 New ticket',if(equals(triggerBody()?['event'],'ticket.commented'),'💬 New comment',if(equals(triggerBody()?['event'],'ticket.status_changed'),'🔄 Status changed','✏️ Ticket updated')))} @{triggerBody()?['data']?['ticket_number']}"
},
{
"type": "TextBlock",
"text": "@{coalesce(triggerBody()?['data']?['title'],triggerBody()?['data']?['ticket_title'],'(no title)')}",
"wrap": true
},
{
"type": "FactSet",
"facts": [
{ "title": "Status", "value": "@{coalesce(triggerBody()?['data']?['status'],triggerBody()?['data']?['ticket_status'],'-')}" },
{ "title": "Priority", "value": "@{coalesce(triggerBody()?['data']?['priority'],'-')}" }
]
},
{
"type": "TextBlock",
"text": "@{coalesce(triggerBody()?['data']?['content'],triggerBody()?['data']?['description'],'')}",
"wrap": true
}
],
"actions": [
{
"type": "Action.OpenUrl",
"title": "Open in FyneDesk",
"url": "@{concat('https://fynedesk.ai/',if(equals(triggerBody()?['data']?['ticket_type'],'Service Request'),'requests/','tickets/'),string(coalesce(triggerBody()?['data']?['id'],triggerBody()?['data']?['ticket_id'])))}"
}
]
}Dépannage
Les messages n'apparaissent toujours pas — solutions courantes
Vous obtenez une erreur « AdaptiveCard », ou le flux s'exécute mais ne publie jamais. Les étapes prédéfinies Initialize variable et Attachments is null du modèle en sont la cause. Supprimez les deux (Partie 3, étape 1), et publiez votre message avec une seule action Post message in a chat or channel à la place.
Le flux ne s'enregistre pas. Si vous avez essayé Copilot à un moment, videz le champ Comment de cette étape — une note de plus de 256 caractères bloque silencieusement l'enregistrement.
Rien dans Teams après une vraie action sur un ticket. Dans Power Automate, ouvrez votre flux et vérifiez l'historique des exécutions (Run history, le journal de 28 jours). Chaque événement FyneDesk devrait apparaître comme une exécution. Aucune exécution du tout signifie que le webhook FyneDesk ne pointe pas vers l'URL de ce flux, ou n'est pas abonné à cet événement — revérifiez-le dans FyneDesk. Des exécutions affichent « Failed » signifie qu'une étape a échoué ; cliquez sur l'une d'elles pour voir laquelle. C'est généralement l'équipe ou le canal non sélectionné, ou le propriétaire du flux qui n'a pas de licence Power Automate.
Un message est publié, mais certains champs sont vides. Différents événements portent différents champs (un commentaire n'a pas de priority, par exemple). Les expressions coalesce(...) des options avancées basculent en douceur, donc un champ vide signifie simplement que cet événement n'incluait pas ce champ.
Une expression affiche une erreur rouge. Certains types de déclencheurs exposent le corps comme triggerOutputs()?['body'] au lieu de triggerBody(). Si triggerBody() renvoie une erreur, échangez-le — par exemple, triggerOutputs()?['body']?['data']?['ticket_number'].
Une note sur la sécurité
Votre URL Power Automate contient une signature secrète (la partie sig=...) — traitez l'URL entière comme un mot de passe et ne la partagez pas. FyneDesk signe aussi chaque requête avec un en-tête X-FyneDesk-Signature (HMAC-SHA256) si vous voulez un jour vérifier l'authenticité dans le flux, bien que ce soit facultatif et non requis pour faire circuler les messages.
Questions fréquentes
FyneDesk dit « envoyé avec succès » mais rien n'apparaît dans Teams. Pourquoi ?
« Envoyé avec succès » signifie seulement que Microsoft a reçu les données — Power Automate répond 202 Accepted dès qu'il reçoit une requête. Cela ne veut pas dire qu'un message a été publié. Teams n'affichera pas le JSON brut tout seul ; votre flux a besoin d'une action Post message in a chat or channel pour le formater et le publier.
Quel modèle Power Automate dois-je utiliser ?
Ouvrez Templates, recherchez webhook, et choisissez Send webhook alerts to a channel — la version simple, pas les versions « (TEST) ». Elle génère l'URL de webhook que vous collez dans FyneDesk et vous laisse choisir l'équipe et le canal où publier.
Pourquoi est-ce que j'obtiens une erreur « AdaptiveCard », ou pourquoi le flux ne publie-t-il jamais ?
Le modèle est livré avec deux étapes prédéfinies — une action Initialize variable et une condition Attachments is null — et ce sont elles qui provoquent l'erreur AdaptiveCard. Supprimez les deux, puis ajoutez une seule action Post message in a chat or channel avec votre propre expression de message.
FyneDesk peut-il publier dans Teams sans Power Automate ?
Oui — FyneDesk dispose désormais d'une application Microsoft Teams native qui publie des cartes de notification de tickets directement dans vos canaux, sur les forfaits Pro et Business, sans flux à construire. La méthode webhook + Power Automate de cette page fonctionne toujours, et reste utile quand vous voulez un contrôle total sur le formatage et le routage.
Quels événements de tickets puis-je envoyer à Teams ?
Un webhook FyneDesk peut envoyer ticket.created, ticket.updated, ticket.status_changed et ticket.commented. La configuration recommandée utilise ticket.created ; les expressions avancées gèrent les quatre automatiquement, donc un seul flux peut couvrir tous les événements.