Microsoft Teams
Extension payante. Une carte paraît dans un canal Teams quand une soumission arrive, quand un dossier est assigné, ou quand une échéance est dépassée.
C’est le pendant du module Slack, pour l’autre moitié du marché — celle qui a Microsoft 365 et n’a jamais eu Slack. Deux choses, pourtant, ne s’y ressemblent pas, et ce sont les deux premières sections.
Le webhook entrant de Teams n’existe plus
Microsoft a retiré les connecteurs Office 365 : désactivés progressivement du 18 au
22 mai 2026. Les adresses en webhook.office.com ou outlook.office.com ne
délivrent plus rien.
Le remplaçant est un flux Power Automate — « Publier dans un canal lors de la
réception d’une requête webhook » — qui expose une adresse sur logic.azure.com.
C’est elle qu’on colle.
L’écran reconnaît une ancienne adresse de connecteur et le dit avec ses mots : quelqu’un qui arrive ici a sous les yeux une adresse qui a fonctionné pendant des années, et doit apprendre que c’est Microsoft qui l’a retirée, pas SolisForms qui la refuse.
Pourquoi pas une application OAuth
Le plan laissait le choix « selon le mode Microsoft disponible ». Publier dans un
canal par Microsoft Graph demande une application approuvée par un administrateur
du client, une permission ChannelMessage.Send, et une application Teams installée
dans l’équipe pour avoir une identité à qui attribuer le message. C’est beaucoup
d’administration pour le même résultat.
Le flux, lui, se crée par la personne qui veut recevoir les messages, dans son propre canal, sans passer par personne.
Un bloc de texte Teams rend du Markdown, liens compris
C’est la décision de sécurité de ce module, et la vraie différence avec Slack — où le format est explicite et où le module le maîtrise.
Adaptive Cards interprète dans chaque bloc de texte un sous-ensemble de Markdown :
gras, italique, listes, et liens [intitulé](adresse).
Une valeur de formulaire posée telle quelle permet donc à un visiteur d’écrire un lien cliquable dans le canal interne du client. Et pas n’importe quel canal : celui que l’équipe ouvre précisément pour lire les soumissions, donc avec la confiance qu’on accorde à ce qui vient de son propre formulaire.
C’est la même famille de danger que le typecast d’Airtable ou l’option créée par
Notion : le service fait quelque chose d’utile par défaut, et ce défaut devient une
arme dès qu’un inconnu tient le clavier.
Les caractères qui forment un lien ou une emphase — [, ], *, _, ` —
sont donc échappés dans tout ce qui vient d’une soumission, de même que les
accolades doubles qui déclenchent les fonctions de date d’Adaptive Cards. Un
antislash qui resterait visible chez un client qui n’honore pas l’échappement est un
désagrément ; un lien d’hameçonnage dans un canal d’équipe n’en est pas un.
Les parenthèses sont laissées telles quelles : elles abondent en français, et une parenthèse seule ne peut pas former de lien sans le crochet qui la précède.
Les titres et libellés, eux, ne sont pas échappés : ils viennent de l’administrateur, qui écrit son gabarit en connaissance de cause et peut vouloir y mettre du gras.
Trois annonces, chacune activable séparément
L’arrivée d’une soumission, son assignation à quelqu’un, son échéance dépassée.
Un seul interrupteur aurait obligé à choisir entre le bruit et le silence : une équipe qui traite des dossiers veut savoir qu’un dossier lui est assigné sans recevoir les trois cents soumissions du mois. Une autre veut l’inverse.
Chaque annonce a sa propre ligne de suivi : UNIQUE (entry_id, kind). Une clé
portant la seule soumission aurait forcé à choisir entre écraser l’état des
annonces précédentes et publier deux fois dans le canal.
La condition du formulaire ne vaut que pour l’annonce d’une soumission. Une assignation et une échéance sont des gestes d’équipe, décidés après coup, et les filtrer sur les valeurs du formulaire ferait disparaître l’annonce d’un dossier qu’on vient justement de confier à quelqu’un.
Les deux dernières dépendent du module de traitement interne, qui émet désormais
solis_forms_pro_workflow_assigned et solis_forms_pro_workflow_overdue. Le
premier est émis indépendamment du réglage d’envoi de courriel : une équipe peut
vouloir l’annonce dans son canal sans vouloir le message individuel.
Une adresse morte suspend le connecteur
C’est ce que le plan demande, et c’est la particularité de ce module.
Un flux supprimé ou une adresse renouvelée répond 401, 403 ou 404. Aucune
reprise n’y changera rien. Sans garde, chaque soumission repartirait pour trois
tentatives, et le journal se remplirait du même refus jusqu’à ce que quelqu’un s’en
aperçoive — c’est-à-dire longtemps, puisque le symptôme est le silence.
Le connecteur se suspend donc de lui-même au premier refus définitif. Rien n’est plus programmé, l’écran l’écrit en gros, et la reprise reprogramme ce qui avait échoué : sinon la suspension aurait coûté exactement ce qu’elle prétendait éviter, des annonces perdues sans que personne le sache.
Poser une adresse neuve lève la suspension : c’est précisément le geste qu’elle attendait.
L’adresse est l’autorisation
Il n’y a ni identifiant ni jeton : qui détient l’adresse du flux peut publier dans
le canal. Elle est donc chiffrée au repos, jamais réaffichée — seuls ses douze
derniers caractères sont montrés, assez pour distinguer deux flux, trop peu pour
reconstituer celui-ci — et confrontée au suffixe .logic.azure.com, le point
initial séparant un flux Microsoft d’un attaquant-logic.azure.com.
Elle n’entre pas davantage dans le journal des envois.
L’essai publie vraiment
Le bouton envoie une carte dans le canal. C’est voulu : une adresse qui répond n’est pas une adresse qui publie — un flux peut accepter la requête et ne rien faire du corps. La seule preuve est un message qui apparaît, et c’est celle qu’on vient chercher en cliquant.
La carte
Un titre, les champs désignés un par un, et un bouton vers l’écran d’administration de la soumission.
Le titre est préfixé par la nature de l’annonce — « Nouvelle soumission », « Assigné », « En retard » — et ce préfixe n’est pas réglable : c’est lui qui permet de distinguer d’un coup d’œil, dans un canal, une soumission d’un dossier en retard.
Les champs sont désignés un par un, jamais « toutes les valeurs » : un canal d’équipe est lu par des gens qui ne sont pas tous destinataires de toutes les données. Les types sensibles sont écartés quoi qu’il arrive.
Le lien mène à l’écran d’administration, qui exige toujours une session : reçu par mégarde, il ne divulgue rien, et il évite de recopier dans le canal ce que l’écran montre déjà.
La charge est bornée à deux niveaux : chaque valeur à cinq cents caractères, le nombre de champs à vingt. La carte la plus lourde que le module sache composer reste donc loin de la limite que Teams accepte — le garde du client est une ceinture, pas le vêtement.
Ce qui n’est pas tenté, et ce qui est rejoué
Rien n’est programmé sans adresse, sans annonce cochée, si le connecteur est suspendu, ou si la condition du formulaire n’est pas remplie. Une soumission marquée indésirable ou mise à la corbeille ne part pas.
Les 429 et les 5xx sont rejoués, à 1, 5 puis 30 minutes. Les 401, 403 et
404 ne le sont pas : ils suspendent.
Une panne de Teams ne bloque jamais la soumission. Elle est enregistrée, confirmée au visiteur et notifiée par courriel avant que ce module ne soit sollicité.
Schéma
slf_teams_messages : une ligne par soumission et par nature d’annonce, avec
l’état, le motif du dernier problème et le nombre de tentatives.
Il n’y a pas d’identifiant de message distant : un flux Power Automate ne rend pas celui du message qu’il a publié, et le module ne le modifie ni ne le supprime jamais. Conserver une colonne vide aurait laissé croire qu’un jour on saurait quoi en faire.
L’adresse vit dans une option, chiffrée. La date de suspension et son motif ne le sont pas : ce ne sont pas des secrets, et les lire en clair est précisément ce qu’on veut quand on cherche pourquoi un canal est devenu silencieux.
Ce que la V1 ne fait pas
Pas de carte interactive, pas de réponse, pas de création d’équipe, pas de lecture de conversation, pas de fichier.
Les cartes actionnables ne sont d’ailleurs pas prises en charge par le déclencheur webhook des flux : ce que l’ancien connecteur permettait, le nouveau ne le permet pas. Le bouton de la carte ouvre donc une page, et ne fait rien d’autre.
