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.

Vous l'avez testé et vu « envoyé avec succès » mais rien dans Teams ? C'est normal — et vous avez presque terminé. Le « succès » signifie seulement que Microsoft a reçu les données ; cela ne publie rien tout seul. Ajoutez l'unique action de publication dans la Partie 3 ci-dessous et les messages commenceront à apparaître.

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.
Vous avez déjà collé une URL Power Automate dans FyneDesk ? Alors vous avez fait le plus dur. Passez à la Partie 3 — il ne vous reste qu'à ajouter l'étape de publication.

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).

L'écran Templates de Power Automate avec webhook saisi dans la zone de recherche. Quatre modèles sont affichés ; le premier, Send webhook alerts to a channel, est celui à ouvrir.

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.

L'écran du modèle Send webhook alerts to a channel, montrant qu'il connectera Teams à Microsoft Teams, avec le compte Microsoft Teams connecté et un bouton Continue. La configuration du modèle avec un menu déroulant Microsoft Teams Team défini sur une équipe, et un menu déroulant Microsoft Teams Channel, au-dessus d'un bouton Create. La valeur du canal est masquée.

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.

Le déclencheur When a Teams webhook request is received développé, montrant un menu déroulant Who can trigger the flow défini sur Anyone et un champ d'URL HTTP avec un bouton de copie. La valeur de l'URL est masquée.

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.created coché — c'est tout ce dont vous avez besoin pour commencer. (Vous pourrez ajouter d'autres événements plus tard.)
  • Cliquez sur Enregistrer.
L'écran Ajouter un webhook de FyneDesk avec un champ Nom défini sur Microsoft Teams, un champ URL du point de terminaison pour le lien Power Automate, une liste d'événements à envoyer avec ticket.created coché, et un bouton 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 ».

L'éditeur de flux montrant le déclencheur When a Teams webhook request is received suivi de deux étapes Initialize variable et d'une condition Attachments is null — les étapes à supprimer.

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 :

ChampDéfinir sur
Post asFlow bot
Post inChannel
TeamVotre équipe
ChannelLe 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']))
L'action Post message in a chat or channel avec Post as défini sur Flow bot, Post in défini sur Channel, une équipe et un canal sélectionnés, et la boîte Message contenant une unique expression concat insérée via l'éditeur d'expression fx affiché à droite.

4. Enregistrez. Cliquez sur Save (en haut à droite). Vous devriez voir « Your flow is ready to go. »

Deux pièges qui font perdre des heures
  • 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.

À propos du bouton Envoyer un test Le bouton Envoyer un test de FyneDesk envoie un petit paquet 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
  }
}
Un seul flux gère les quatre Les expressions ci-dessous utilisent 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〉
PlaceholderCollez 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.

Vous préférez zéro configuration ? Il y a désormais une application Teams native FyneDesk publie désormais les notifications de tickets dans Teams de manière native — des cartes formatées et localisées, sans flux à construire, sur les forfaits Pro et Business. Consultez les notifications Microsoft Teams. Continuez à utiliser ce guide quand vous voulez un contrôle total sur le format des messages ou une logique de routage personnalisée dans Power Automate.

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.