> ## 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

> Chatta e collabora con Devin direttamente in Microsoft Teams

Menziona **@Devin** in Microsoft Teams non appena arrivano bug, richieste di nuove funzionalità e domande. Devin risponde nello stesso thread con aggiornamenti e domande ogni volta che viene menzionato.

<div id="get-started">
  ## Per iniziare
</div>

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

1. Vai su [Settings > Connections](https://app.devin.ai/settings/connections) e seleziona **Microsoft Teams**
2. Fai clic su "Connect"
3. Ti verrà richiesto di installare l'app Devin per Microsoft Teams nel tuo tenant e/o nel Team di destinazione
4. Assicurati di collegare il tuo account personale. Tutti gli utenti della tua organizzazione dovranno completare questo passaggio per usare Devin
5. Menziona `@Devin` in un canale o in una chat di Teams per avviare una sessione

> Nota: perché Devin funzioni per ciascun utente, ogni persona deve collegare il proprio account nella dashboard di Devin (Settings > Connections). Questo consente a Devin di associare l'identità Microsoft Teams di ciascun utente al relativo account Devin.

<div id="how-to-use-devin-from-microsoft-teams">
  ### Come usare Devin da Microsoft Teams
</div>

Dopo aver installato l'integrazione con Microsoft Teams, ti basta menzionare Devin con `@Devin` in qualsiasi canale del team.

Devin risponderà nel thread della tua sessione. Puoi interagire come nella normale interfaccia di chat di Devin.

*Tieni presente che Devin potrebbe commettere errori. Verifica sempre attentamente le risposte.*

<div id="inline-teams-keywords-functions">
  ### Parole chiave e funzioni inline per Teams
</div>

| Parola chiave       | Funzione                                                                                                             |
| ------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `!ask`              | Inizia il tuo messaggio con !ask per ottenere rapidamente una risposta sul codebase senza avviare un agente completo |
| `!deep`             | Ottieni una risposta più approfondita usando la ricerca avanzata                                                     |
| `mute`              | Impedisce a Devin di vedere i messaggi successivi nel thread                                                         |
| `unmute`            | Annulla l’azione precedente                                                                                          |
| `(aside)`, `!aside` | Fa sì che Devin ignori il messaggio (utile per commenti sull’esecuzione di Devin direttamente nel thread)            |
| `sleep`             | Mette Devin in sospensione; per riattivare Devin, invia un qualsiasi messaggio nel thread                            |
| `archive`           | Mette Devin in sospensione e archivia la sessione                                                                    |
| `EXIT`              | Termina la sessione                                                                                                  |
| `help`              | Mostra un messaggio di aiuto con le parole chiave e le funzioni disponibili                                          |

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

Se non hai ancora un account Devin, puoi scoprire di più su piani e prezzi [qui](https://devin.ai/pricing).

<div id="privacy">
  ### Privacy
</div>

La nostra informativa sulla privacy è disponibile [qui](https://cognition.com/privacy-policy).

<div id="authentication-flow">
  ### Flusso di autenticazione
</div>

Il diagramma seguente illustra l'architettura di autenticazione a livello generale per l'integrazione con Microsoft Teams, mostrando come il processo di autenticazione si propaghi da Teams attraverso i vari livelli per creare sessioni Devin autenticate.

```mermaid theme={null}
graph TB
    subgraph MSTeams ["Microsoft Teams"]
        A[Utente Teams] --> B[Canale Teams]
        B --> C[Framework Bot Teams]
        C --> D[API Microsoft Graph]
    end
    
    subgraph AuthLayer ["Livello di Autenticazione"]
        E[Autenticazione Basata su Certificato] --> F[Validazione Token JWT]
        F --> G[Verifica ID Tenant]
        G --> H[Claim Identità Utente]
    end
    
    subgraph DevinPlat ["Piattaforma Devin"]
        I[Gestore Chat] --> J[Servizio di Mappatura Identità]
        J --> K[Risolutore Organizzazione]
        K --> L[Autorizzazione RBAC]
        L --> M[Creazione Sessione]
    end
    
    subgraph IdProviders ["Provider di Identità"]
        N[Microsoft Entra ID] --> O[Provider SAML/SSO]
        O --> P[Archivio Identità Devin]
    end
    
    A --> E
    D --> F
    H --> J
    N --> J
    P --> L
    M --> Q[Sessione Devin]
```

<div id="permissions-details">
  ### Dettagli sulle autorizzazioni
</div>

Di seguito è riportato un riepilogo delle autorizzazioni Microsoft Teams e Microsoft Graph richieste dalla nostra integrazione: cosa consentono, perché sono necessarie e dove vengono utilizzate.

> In sintesi
>
> * Graph (Application, a livello di tenant): orchestrazione della individuazione e dell’installazione.
> * Teams bot RSC (per Team/Chat): accesso con ambito limitato a messaggi/membri/impostazioni solo nei Team o nelle chat in cui il bot è installato o presente.

<div id="tenant-wide-microsoft-graph-application-permissions">
  #### Autorizzazioni applicative Microsoft Graph a livello di tenant
</div>

Richiedono il consenso dell'amministratore in Microsoft Entra ID. Sono autorizzazioni app-only (nessuna delega utente).

| Permission                                                | Cosa consente                                                 | Perché è necessaria                                                              |
| --------------------------------------------------------- | ------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| `Organization.Read.All`                                   | Leggere il profilo di base dell'organizzazione                | Validare il tenant in cui l'app viene installata                                 |
| `User.ReadBasic.All`                                      | Leggere i profili di base di tutti gli utenti                 | Mappare le identità dei membri e risolvere le menzioni nei team collegati        |
| `AppCatalog.Read.All`                                     | Leggere il catalogo delle app di Teams                        | Trovare la nostra app e recuperare il `teamsAppId` richiesto per l'installazione |
| `TeamsAppInstallation.ReadWriteAndConsentSelfForTeam.All` | Installare/disinstallare la nostra app; concedere RSC all'app | Installare/rimuovere il bot in un team selezionato dalla dashboard di Devin      |

> Nota: non utilizziamo Graph a livello di tenant per leggere il contenuto dei messaggi. L'accesso ai messaggi è concesso solo tramite RSC e solo dove il bot è installato/presente.

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

Vengono concesse per singolo team/chat al momento dell'installazione (non si applicano all'intero tenant).

| Permission                  | Scope        | Cosa consente                                                                           | Perché è necessaria                                                                                                  |
| --------------------------- | ------------ | --------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `ChannelMessage.Read.Group` | Team/Channel | Leggere i messaggi nei canali in cui l'app è installata                                 | Elaborare le conversazioni nei canali (riepiloghi, trigger, sincronizzazione)                                        |
| `ChannelMessage.Send.Group` | Team/Channel | Inviare messaggi nei canali (nuovi post e risposte in thread) in cui l'app è installata | Rispondere ai messaggi nei thread dei canali e pubblicare in modo proattivo aggiornamenti nei canali                 |
| `Member.Read.Group`         | Team/Channel | Leggere i membri del team                                                               | Mappare le identità, eseguire controlli di autorizzazione, instradare le menzioni                                    |
| `TeamSettings.Read.Group`   | Team/Channel | Leggere le impostazioni del team                                                        | Rispettare i criteri a livello di team e adattare il comportamento                                                   |
| `ChatMember.Read.Chat`      | Chat         | Leggere i partecipanti alla chat                                                        | Rivolgersi/rispondere correttamente e supportare i registri di audit                                                 |
| `ChatMessage.Read.Chat`     | Chat         | Leggere i messaggi nelle chat in cui il bot partecipa                                   | Elaborare i prompt, il contesto e le interazioni successive                                                          |
| `ChatMessage.Send.Chat`     | Chat         | Inviare messaggi in chat 1:1 e di gruppo (DM) in cui il bot partecipa; non per i canali | Rispondere agli utenti nei DM e nelle chat di gruppo, pubblicare notifiche e risposte interattive nei thread di chat |
| `ChatSettings.Read.Chat`    | Chat         | Leggere le impostazioni della chat (es. moderazione)                                    | Allineare il comportamento ai criteri della chat (limiti di invio, chi può pubblicare, ecc.)                         |

> Vincoli RSC: l'accesso è limitato allo specifico team/chat in cui l'app è installata o partecipa. La rimozione dell'app da un team/chat revoca tale accesso.

<div id="example-certificate-based-authentication-for-teams-discovery">
  #### Esempio: Autenticazione basata su certificato per la scoperta dei team
</div>

Il diagramma seguente illustra la nostra autenticazione basata su certificato in modalità app-only con Microsoft Graph. Utilizzando un certificato client X.509, il servizio acquisisce un token di accesso e poi chiama Graph per elencare i team (GET /v1.0/teams). Questo esempio mostra come Devin esegue in modo sicuro la scoperta del tenant senza contesto utente.

```mermaid theme={null}
sequenceDiagram
    participant S as Cognition
    participant M as Client MSAL
    participant K as Chiave privata del certificato
    participant A as Endpoint token Entra ID
    participant G as Microsoft Graph

    S->>M: Acquisizione token per Graph (scope .default)
    M->>M: Verifica cache token (tenant, scope, client)
    M->>K: Creazione JWT client_assertion (firma con certificato)
    K-->M: client_assertion (JWT firmato)
    M->>A: POST /oauth2/v2.0/token
    A-->A: Convalida firma e thumbprint certificato<br/>Verifica ruoli app per Graph
    A-->M: 200 access_token (aud=graph)
    M-->S: Restituzione access_token (memorizzazione in cache)

    S->>G: GET /v1.0/teams con Authorization: Bearer access_token
    G-->S: 200 elenco team (paginato tramite @odata.nextLink)
```

> Nota sulle credenziali: utilizziamo un certificato X.509 (asserzione client) invece di un client secret per l'autenticazione tra servizi. Questo vale per le chiamate a Microsoft Graph, le comunicazioni del bot con il Bot Framework adapter e qualsiasi chiamata API app-only effettuata dall'integrazione.

<div id="complete-message-processing-flow-teams-cognition">
  #### Flusso completo di elaborazione dei messaggi (Teams → Cognition)
</div>

Il diagramma seguente mostra l'intero flusso end-to-end quando un utente invia un messaggio a Devin in Microsoft Teams, che include la validazione dei token e l'elaborazione del bot.

```mermaid theme={null}
sequenceDiagram
    participant U as Client Teams
    participant T as Servizio Teams
    participant W as Adattatore webhook bot
    participant J as Validatore JWT
    participant O as Metadati e chiavi OpenID
    participant C as Provider di credenziali
    participant B as Logica bot

    U->>T: Messaggio utente @Devin
    T->>W: Attività HTTP POST + token Bearer Authorization
    note over W: Estrai header Authorization e token

    W->>J: Valida token
    J->>O: Recupera configurazione OpenID e chiavi di firma
    O-->J: Restituisci chiavi JWKS
    J->>J: Verifica firma RS256<br/>e analizza claim
    J-->W: Claim validati

    W->>C: Verifica appId con le credenziali
    C-->W: AppId riconosciuto
    W->>W: Aggiungi serviceUrl all'elenco attendibile

    W->>B: Crea TurnContext e chiama handler bot
    B->>B: Esegui logica di business
    B-->W: Attività in uscita

    W->>T: Invia risposta tramite servizio connettore
    T->>U: Consegna messaggio all'utente
```

> Nota sulle credenziali: utilizziamo un certificato X.509 (client assertion) al posto di un client secret per l'autenticazione tra servizi (service-to-service). Questo vale per le chiamate a Microsoft Graph, per le comunicazioni del bot con il Bot Framework adapter e per qualsiasi chiamata API app-only effettuata dall'integrazione.

<div id="consent-installation-flow">
  #### Flusso di consenso e installazione
</div>

1. **Consenso dell'amministratore (a livello di tenant)**
   * Un amministratore Entra ID concede le autorizzazioni dell'applicazione Graph elencate sopra.
2. **Individuazione dell'app**
   * L'integrazione esegue query sul catalogo delle app di Teams per individuare la nostra app e recuperare `teamsAppId`.
3. **Installazione mirata**
   * Dal nostro dashboard, installiamo il bot in un team specifico.
   * Durante l'installazione, gli ambiti RSC vengono concessi solo a quel team (o alla specifica chat quando il bot viene utilizzato in una chat).
4. **Funzionamento**
   * L'individuazione (organizzazione/team/canali/catalogo app) utilizza le autorizzazioni dell'applicazione Graph.
   * La lettura/l'invio dei messaggi e la lettura di membri/impostazioni si basano su RSC all'interno dei contesti in cui il bot è installato.

<div id="least-privilege-notes">
  #### Note sul principio dei privilegi minimi
</div>

* Solo lettori di base: `User.ReadBasic.All` (nessuna lettura dei messaggi a livello di tenant).
* Il contenuto dei messaggi è accessibile esclusivamente tramite RSC e solo dove il bot è installato/presente.
* Non vengono richieste autorizzazioni per caselle di posta, file o calendari.

<div id="revocation-uninstallation">
  #### Revoca e disinstallazione
</div>

* Revoca del consenso dell'amministratore: un amministratore del tenant può rimuovere le autorizzazioni dell'app come applicazione aziendale in Entra ID.
* Disinstallazione da Teams: rimuovi l'app da un team/chat per revocare l'RSC per quella risorsa.
* Gestione dei dati: al momento della disinstallazione, la nostra integrazione smette di elaborare eventi per quel team/chat e rimuove le sottoscrizioni/collegamenti correlati.
