Aller au contenu

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.