> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Microsoft Teams

> Discutez et collaborez avec Devin directement dans Microsoft Teams

Mentionnez **@Devin** dans Microsoft Teams dès que des bugs, des demandes de fonctionnalités ou des questions arrivent. Devin répond dans le fil de discussion avec des mises à jour et des questions lorsqu'il est mentionné.

<div id="get-started">
  ## Bien démarrer
</div>

<div id="installation">
  ### Installation
</div>

1. Accédez à [Settings > Connections](https://app.devin.ai/settings/connections), puis sélectionnez **Microsoft Teams**
2. Cliquez sur « Connect »
3. Vous serez invité à installer l’application Devin pour Microsoft Teams dans votre tenant et/ou dans l’équipe cible
4. Assurez-vous de lier votre compte utilisateur. Tous les utilisateurs de votre organisation devront effectuer cette étape pour pouvoir utiliser Devin
5. Mentionnez `@Devin` dans un canal ou un chat Teams pour démarrer une session

> Remarque : Pour que Devin fonctionne pour chaque utilisateur, chacun doit connecter son propre compte dans le tableau de bord Devin (Settings > Connections). Cela permet à Devin d’associer l’identité Microsoft Teams de chaque utilisateur à son compte Devin.

<div id="how-to-use-devin-from-microsoft-teams">
  ### Comment utiliser Devin depuis Microsoft Teams
</div>

Une fois que vous avez installé l’intégration Microsoft Teams, il vous suffit de mentionner Devin avec `@Devin` dans n’importe quel canal d’équipe.

Devin répondra dans le fil de discussion de votre session. Vous pouvez échanger avec lui comme dans l’interface de chat Devin classique.

*Notez que Devin peut faire des erreurs. Veuillez vérifier attentivement ses réponses.*

<div id="inline-teams-keywords-functions">
  ### Mots-clés et fonctions Teams en ligne
</div>

| Keyword             | Function                                                                                                              |
| ------------------- | --------------------------------------------------------------------------------------------------------------------- |
| `!ask`              | Commencez votre message par !ask pour obtenir rapidement une réponse sur la base de code sans lancer un agent complet |
| `!deep`             | Obtenez une réponse plus détaillée grâce à la recherche avancée                                                       |
| `mute`              | Empêche Devin de voir les messages suivants dans le fil                                                               |
| `unmute`            | Annule l'action ci-dessus                                                                                             |
| `(aside)`, `!aside` | Indique à Devin d’ignorer le message (utile pour les commentaires sur l'exécution de Devin directement dans le fil)   |
| `sleep`             | Met Devin en veille ; pour réveiller Devin, envoyez n'importe quel message dans le fil                                |
| `archive`           | Met Devin en veille et archive la session                                                                             |
| `EXIT`              | Met fin à la session                                                                                                  |
| `help`              | Affiche un message d'aide avec les mots-clés et fonctions disponibles                                                 |

<div id="pricing">
  ### Tarifs
</div>

Si vous n'avez pas encore de compte Devin, vous pouvez en savoir plus sur les tarifs et les formules [ici](https://devin.ai/pricing).

<div id="privacy">
  ### Confidentialité
</div>

Notre politique de confidentialité est disponible [ici](https://cognition.com/privacy-policy).

<div id="authentication-flow">
  ### Flux d’authentification
</div>

Le diagramme ci-dessous illustre l’architecture d’authentification de haut niveau de l’intégration Microsoft Teams, et montre comment le processus d’authentification se propage depuis Teams à travers différentes couches pour créer des sessions Devin authentifiées.

```mermaid theme={null}
graph TB
    subgraph MSTeams ["Microsoft Teams"]
        A[Utilisateur Teams] --> B[Canal Teams]
        B --> C[Framework de bot Teams]
        C --> D[API Microsoft Graph]
    end
    
    subgraph AuthLayer ["Couche d'authentification"]
        E[Auth. par certificat] --> F[Validation du jeton JWT]
        F --> G[Vérification de l'ID de locataire]
        G --> H[Revendications d'identité utilisateur]
    end
    
    subgraph DevinPlat ["Plateforme Devin"]
        I[Gestionnaire de chat] --> J[Service de mappage d'identité]
        J --> K[Résolveur d'organisation]
        K --> L[Autorisation RBAC]
        L --> M[Création de session]
    end
    
    subgraph IdProviders ["Fournisseurs d'identité"]
        N[Microsoft Entra ID] --> O[Fournisseur SAML/SSO]
        O --> P[Référentiel d'identités Devin]
    end
    
    A --> E
    D --> F
    H --> J
    N --> J
    P --> L
    M --> Q[Session Devin]
```

<div id="permissions-details">
  ### Détails des autorisations
</div>

Ci-dessous se trouve un récapitulatif des autorisations Microsoft Teams et Microsoft Graph requises par notre intégration — ce que chacune permet, pourquoi nous en avons besoin et où elle est utilisée.

> En un coup d’œil
>
> * Graph (Application, à l’échelle du tenant) : découverte et orchestration de l’installation.
> * Bot Teams RSC (par équipe/conversation) : accès limité aux messages, aux membres et aux paramètres, uniquement là où le bot est installé ou présent.

<div id="tenant-wide-microsoft-graph-application-permissions">
  #### Autorisations Microsoft Graph (Application) à l’échelle du tenant
</div>

Ces autorisations nécessitent un consentement d’administrateur dans Microsoft Entra ID. Elles sont app-only (aucune délégation utilisateur).

| Permission                                                | Ce qu’elle autorise                                                                | Pourquoi nous en avons besoin                                                                    |
| --------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| `Organization.Read.All`                                   | Lire le profil de base de l’organisation                                           | Valider le tenant dans lequel l’application est installée                                        |
| `User.ReadBasic.All`                                      | Lire les profils de base de tous les utilisateurs                                  | Faire le mapping des identités des membres et résoudre les mentions dans les équipes Teams liées |
| `AppCatalog.Read.All`                                     | Lire le catalogue d’applications Teams                                             | Localiser notre application et récupérer le `teamsAppId` requis pour l’installation              |
| `TeamsAppInstallation.ReadWriteAndConsentSelfForTeam.All` | Installer/dDésinstaller notre propre application ; accorder le RSC à l’application | Installer/supprimer le bot dans une équipe sélectionnée depuis le tableau de bord Devin          |

> Remarque : nous n’utilisons pas Graph à l’échelle du tenant pour lire le contenu des messages. L’accès aux messages est accordé uniquement via RSC et uniquement là où le bot est installé/présent.

<div id="teams-bot-resource-specific-consent-rsc-permissions">
  #### Autorisations RSC (Resource-Specific Consent) du bot Teams
</div>

Celles-ci sont accordées par équipe/chat au moment de l'installation (ne s'appliquent pas à l'ensemble du client).

| Permission                  | Scope        | Ce qu'elle permet                                                                                                                  | Pourquoi nous en avons besoin                                                                                                                                 |
| --------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ChannelMessage.Read.Group` | Team/Channel | Lire les messages de canal là où l'application est installée                                                                       | Traiter les conversations de canal (résumés, déclencheurs, synchronisation)                                                                                   |
| `ChannelMessage.Send.Group` | Team/Channel | Envoyer des messages dans les canaux (nouveaux messages et réponses dans les fils de discussion) là où l'application est installée | Répondre aux messages dans les fils de discussion des canaux et publier de façon proactive des mises à jour dans les canaux                                   |
| `Member.Read.Group`         | Team/Channel | Lire la composition de l'équipe                                                                                                    | Faire la correspondance des identités, effectuer des contrôles d'autorisations, router les mentions                                                           |
| `TeamSettings.Read.Group`   | Team/Channel | Lire les paramètres de l'équipe                                                                                                    | Respecter les stratégies au niveau de l'équipe et adapter le comportement                                                                                     |
| `ChatMember.Read.Chat`      | Chat         | Lire les participants du chat                                                                                                      | S'adresser/répondre correctement et prendre en charge les journaux d'audit                                                                                    |
| `ChatMessage.Read.Chat`     | Chat         | Lire les messages dans les chats où le bot participe                                                                               | Traiter les requêtes, le contexte et les relances                                                                                                             |
| `ChatMessage.Send.Chat`     | Chat         | Envoyer des messages dans les chats 1:1 et de groupe (messages privés/DM) où le bot participe ; pas pour les canaux                | Répondre aux utilisateurs dans les messages privés et les chats de groupe, publier des notifications et des réponses interactives dans les fils de discussion |
| `ChatSettings.Read.Chat`    | Chat         | Lire les paramètres du chat (par ex. modération)                                                                                   | Aligner le comportement sur les stratégies de chat (limites de fréquence, qui peut publier, etc.)                                                             |

> Garde-fous RSC : l'accès est limité à l'équipe/au chat spécifique où l'application est installée ou participe. La suppression de l'application d'une équipe/d'un chat révoque cet accès.

<div id="example-certificate-based-authentication-for-teams-discovery">
  #### Exemple : authentification par certificat pour la découverte des équipes Teams
</div>

Le schéma ci-dessous illustre notre authentification « app-only » par certificat avec Microsoft Graph. À l'aide d'un certificat client X.509, le service obtient un jeton d'accès, puis appelle Graph pour répertorier les équipes Teams (GET /v1.0/teams). Cet exemple montre comment Devin effectue de manière sécurisée la découverte du locataire sans contexte utilisateur.

```mermaid theme={null}
sequenceDiagram
    participant S as Cognition
    participant M as Client MSAL
    participant K as Clé privée du certificat
    participant A as Point de terminaison de jeton Entra ID
    participant G as Microsoft Graph

    S->>M: Acquérir un jeton pour Graph (scope .default)
    M->>M: Vérifier le cache de jetons (tenant, scope, client)
    M->>K: Construire le JWT client_assertion (signer avec le cert)
    K-->M: client_assertion (JWT signé)
    M->>A: POST /oauth2/v2.0/token
    A-->A: Valider la signature et l'empreinte du cert<br/>Vérifier les rôles d'app pour Graph
    A-->M: 200 access_token (aud=graph)
    M-->S: Retourner access_token (stocker dans le cache)

    S->>G: GET /v1.0/teams avec Authorization: Bearer access_token
    G-->S: 200 liste des équipes (paginée via @odata.nextLink)
```

> Remarque sur les informations d’identification : nous utilisons un certificat X.509 (assertion de client) plutôt qu’un secret client pour l’authentification entre services. Cela s’applique aux appels Microsoft Graph, aux communications du bot avec l’adaptateur Bot Framework et à tout appel d’API en mode application seule effectué par l’intégration.

<div id="complete-message-processing-flow-teams-cognition">
  #### Flux complet de traitement des messages (Teams → Cognition)
</div>

Le diagramme ci-dessous montre le flux de bout en bout complet lorsqu’un utilisateur envoie un message à Devin dans Microsoft Teams, y compris la validation des jetons et le traitement par le bot.

```mermaid theme={null}
sequenceDiagram
    participant U as Client Teams
    participant T as Service Teams
    participant W as Adaptateur webhook du bot
    participant J as Validateur JWT
    participant O as Métadonnées et clés OpenID
    participant C as Fournisseur d'identifiants
    participant B as Logique du bot

    U->>T: Message utilisateur @Devin
    T->>W: Activité HTTP POST + jeton Bearer d'autorisation
    note over W: Extraire l'en-tête Authorization et le jeton

    W->>J: Valider le jeton
    J->>O: Récupérer la configuration OpenID et les clés de signature
    O-->J: Retourner les clés JWKS
    J->>J: Vérifier la signature RS256<br/>et analyser les claims
    J-->W: Claims validés

    W->>C: Vérifier l'appId par rapport aux identifiants
    C-->W: AppId reconnu
    W->>W: Ajouter serviceUrl à la liste de confiance

    W->>B: Créer TurnContext et appeler le gestionnaire du bot
    B->>B: Exécuter la logique métier
    B-->W: Activité sortante

    W->>T: Envoyer la réponse via le service connecteur
    T->>U: Remettre le message à l'utilisateur
```

> Remarque concernant les informations d’authentification : nous utilisons un certificat X.509 (assertion client) plutôt qu’un secret client pour l’authentification de service à service. Cela s’applique aux appels à Microsoft Graph, aux communications du bot avec l’adaptateur Bot Framework, ainsi qu’à tout appel d’API en mode application uniquement (app-only) depuis l’intégration.

<div id="consent-installation-flow">
  #### Flux de consentement et d'installation
</div>

1. **Consentement administrateur (à l'échelle du tenant)**
   * Un administrateur Entra ID accorde les autorisations d'application Graph listées ci-dessus.
2. **Découverte de l'application**
   * L'intégration interroge le catalogue d'applications Teams pour localiser notre application et récupérer `teamsAppId`.
3. **Installation ciblée**
   * Depuis notre tableau de bord, nous installons le bot dans une équipe donnée.
   * Pendant l'installation, les étendues RSC sont accordées uniquement à cette équipe (ou au chat spécifique lorsqu'il est invoqué dans un chat).
4. **Fonctionnement**
   * La découverte (organisation/équipes/canaux/catalogue d'applications) utilise les autorisations d'application Graph.
   * La lecture et l'envoi de messages ainsi que la lecture des membres/paramètres reposent sur RSC dans les surfaces où il est installé.

<div id="least-privilege-notes">
  #### Notes sur le principe de moindre privilège
</div>

* Lecteurs de base uniquement : `User.ReadBasic.All` (aucune lecture de messages à l’échelle du client/tenant).
* Le contenu des messages est consultable exclusivement via RSC et uniquement là où le bot est installé/présent.
* Aucune autorisation relative aux boîtes aux lettres, aux fichiers ou aux calendriers n’est demandée.

<div id="revocation-uninstallation">
  #### Révocation et désinstallation
</div>

* Révoquer le consentement d’administrateur : un administrateur du tenant peut supprimer les autorisations d’application d’entreprise de l’application dans Entra ID.
* Désinstaller depuis Teams : supprimez l’application d’une équipe/d’un chat pour révoquer RSC pour cette ressource.
* Gestion des données : lors de la désinstallation, notre intégration cesse de traiter les événements pour cette équipe/ce chat et supprime les abonnements/liens associés.
