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

> Chatea y colabora con Devin directamente en Microsoft Teams

Menciona a **@Devin** en Microsoft Teams en cuanto surjan errores, solicitudes de nuevas funciones o preguntas. Devin responde en el hilo con actualizaciones y consultas cuando se le menciona.

<div id="get-started">
  ## Primeros pasos
</div>

<div id="installation">
  ### Instalación
</div>

1. Ve a [Settings > Connections](https://app.devin.ai/settings/connections) y selecciona **Microsoft Teams**
2. Haz clic en "Connect"
3. Se te pedirá que instales la aplicación de Devin para Microsoft Teams en tu tenant y/o en el equipo de destino
4. Asegúrate de vincular tu propio usuario. Todos los usuarios de tu organización deberán completar este paso para usar Devin
5. Menciona `@Devin` en un canal o chat de un equipo para iniciar una sesión

> Nota: Para que Devin funcione para cada usuario, cada persona debe conectar su propia cuenta en el panel de control de Devin (Settings > Connections). Esto permite que Devin asocie su identidad de Microsoft Teams con su cuenta de Devin.

<div id="how-to-use-devin-from-microsoft-teams">
  ### Cómo usar Devin en Microsoft Teams
</div>

Una vez que hayas instalado la integración de Microsoft Teams, simplemente invoca a Devin con `@Devin` en cualquier canal de Teams.

Devin responderá en el hilo de tu sesión. Puedes comunicarte con él igual que en la interfaz de chat habitual de Devin.

*Ten en cuenta que Devin puede cometer errores. Revisa las respuestas cuidadosamente.*

<div id="inline-teams-keywords-functions">
  ### Palabras clave y funciones inline de Teams
</div>

| Palabra clave       | Función                                                                                                                    |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `!ask`              | Comienza tu mensaje con !ask para obtener rápidamente una respuesta sobre tu base de código sin iniciar un agente completo |
| `!deep`             | Obtén una respuesta de análisis más profunda usando una búsqueda avanzada                                                  |
| `mute`              | Impide que Devin vea más mensajes en el hilo                                                                               |
| `unmute`            | Revierte lo anterior                                                                                                       |
| `(aside)`, `!aside` | Hace que Devin ignore el mensaje (útil para comentarios sobre la ejecución de Devin directamente en el hilo)               |
| `sleep`             | Pone a Devin en reposo; para despertarlo, envía cualquier mensaje en el hilo                                               |
| `archive`           | Pone a Devin en reposo y, además, archiva la sesión                                                                        |
| `EXIT`              | Finaliza la sesión                                                                                                         |
| `help`              | Muestra un mensaje de ayuda con las palabras clave y funciones disponibles                                                 |

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

Si aún no tienes una cuenta de Devin, puedes obtener más información sobre los precios y los planes [aquí](https://devin.ai/pricing).

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

Nuestra política de privacidad está disponible [aquí](https://cognition.com/privacy-policy).

<div id="authentication-flow">
  ### Flujo de autenticación
</div>

El siguiente diagrama ilustra la arquitectura de autenticación de alto nivel para la integración con Microsoft Teams, y muestra cómo la autenticación fluye desde Teams a través de varias capas hasta crear sesiones de Devin autenticadas.

```mermaid theme={null}
graph TB
    subgraph MSTeams ["Microsoft Teams"]
        A[Usuario de Teams] --> B[Canal de Teams]
        B --> C[Framework de Bot de Teams]
        C --> D[API de Microsoft Graph]
    end
    
    subgraph AuthLayer ["Capa de Autenticación"]
        E[Autenticación Basada en Certificados] --> F[Validación de Token JWT]
        F --> G[Verificación de ID de Tenant]
        G --> H[Claims de Identidad de Usuario]
    end
    
    subgraph DevinPlat ["Plataforma Devin"]
        I[Administrador de Chat] --> J[Servicio de Mapeo de Identidad]
        J --> K[Resolución de Organización]
        K --> L[Autorización RBAC]
        L --> M[Creación de Sesión]
    end
    
    subgraph IdProviders ["Proveedores de Identidad"]
        N[Microsoft Entra ID] --> O[Proveedor SAML/SSO]
        O --> P[Almacén de Identidad de Devin]
    end
    
    A --> E
    D --> F
    H --> J
    N --> J
    P --> L
    M --> Q[Sesión de Devin]
```

<div id="permissions-details">
  ### Detalles de permisos
</div>

A continuación se muestra un resumen de los permisos de Microsoft Teams y Microsoft Graph que requiere nuestra integración: qué otorga cada uno, por qué los necesitamos y dónde se utilizan.

> De un vistazo
>
> * Graph (aplicación, a nivel de inquilino): orquestación del descubrimiento e instalación.
> * Bot de Teams RSC (por equipo/chat): acceso limitado a mensajes, miembros y configuraciones solo donde el bot está instalado o presente.

<div id="tenant-wide-microsoft-graph-application-permissions">
  #### Permisos de Microsoft Graph (aplicación) a nivel de tenant
</div>

Estos requieren consentimiento de Admin en Microsoft Entra ID. Son solo de aplicación (sin delegación de usuario).

| Permiso                                                   | Qué permite                                                          | Por qué lo necesitamos                                                             |
| --------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| `Organization.Read.All`                                   | Leer el perfil básico de la organización                             | Validar el tenant donde se está instalando la aplicación                           |
| `User.ReadBasic.All`                                      | Leer perfiles básicos de todos los usuarios                          | Mapear las identidades de los miembros y resolver menciones en los Teams asociados |
| `AppCatalog.Read.All`                                     | Leer el catálogo de aplicaciones de Teams                            | Ubicar nuestra aplicación y obtener el `teamsAppId` requerido para la instalación  |
| `TeamsAppInstallation.ReadWriteAndConsentSelfForTeam.All` | Instalar/desinstalar nuestra propia aplicación; otorgar RSC a la app | Instalar/eliminar el bot en un equipo seleccionado desde el dashboard de Devin     |

> Nota: No utilizamos Graph a nivel de tenant para leer contenido de mensajes. El acceso a mensajes se otorga solo mediante RSC y únicamente donde el bot está instalado/presente.

<div id="teams-bot-resource-specific-consent-rsc-permissions">
  #### Permisos de consentimiento específicos de recursos (RSC) del bot de Teams
</div>

Se conceden por equipo o chat en el momento de la instalación (no se aplican a todo el inquilino).

| Permiso                     | Ámbito       | Qué permite                                                                                                | Por qué lo necesitamos                                                                                                         |
| --------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `ChannelMessage.Read.Group` | Equipo/Canal | Leer mensajes de canal donde la aplicación está instalada                                                  | Procesar conversaciones de canal (resúmenes, disparadores, sincronización)                                                     |
| `ChannelMessage.Send.Group` | Equipo/Canal | Enviar mensajes en canales (nuevas publicaciones y respuestas en hilos) donde la aplicación está instalada | Responder a mensajes en hilos de canal y publicar actualizaciones de forma proactiva en los canales                            |
| `Member.Read.Group`         | Equipo/Canal | Leer los miembros del equipo                                                                               | Relacionar identidades, comprobaciones de permisos, enrutamiento de menciones                                                  |
| `TeamSettings.Read.Group`   | Equipo/Canal | Leer la configuración del equipo                                                                           | Respetar las directivas a nivel de equipo y adaptar el comportamiento                                                          |
| `ChatMember.Read.Chat`      | Chat         | Leer los participantes del chat                                                                            | Dirigirse y responder correctamente y permitir registros de auditoría                                                          |
| `ChatMessage.Read.Chat`     | Chat         | Leer mensajes en chats donde el bot participa                                                              | Procesar solicitudes, contexto y seguimientos posteriores                                                                      |
| `ChatMessage.Send.Chat`     | Chat         | Enviar mensajes en chats 1:1 y de grupo (mensajes directos, DMs) donde el bot participa; no para canales   | Responder a usuarios en mensajes directos y chats de grupo, publicar notificaciones y respuestas interactivas en hilos de chat |
| `ChatSettings.Read.Chat`    | Chat         | Leer la configuración del chat (por ejemplo, moderación)                                                   | Alinear el comportamiento con las directivas del chat (límites de frecuencia, quién puede publicar, etc.)                      |

> Límites de RSC: El acceso se limita al equipo o chat específico donde la aplicación está instalada o participa. Quitar la aplicación de un equipo o chat revoca ese acceso.

<div id="example-certificate-based-authentication-for-teams-discovery">
  #### Ejemplo: Autenticación basada en certificados para el descubrimiento de Teams
</div>

El siguiente diagrama ilustra nuestra autenticación solo de aplicación basada en certificados con Microsoft Graph. Usando un certificado de cliente X.509, el servicio obtiene un token de acceso y luego llama a Graph para listar los equipos de Teams (GET /v1.0/teams). Este ejemplo demuestra cómo Devin realiza de forma segura el descubrimiento del tenant sin contexto de usuario.

```mermaid theme={null}
sequenceDiagram
    participant S as Cognition
    participant M as Cliente MSAL
    participant K as Clave privada del certificado
    participant A as Punto de conexión de token de Entra ID
    participant G as Microsoft Graph

    S->>M: Adquirir token para Graph (ámbito .default)
    M->>M: Verificar caché de tokens (inquilino, ámbito, cliente)
    M->>K: Construir JWT client_assertion (firmar con certificado)
    K-->M: client_assertion (JWT firmado)
    M->>A: POST /oauth2/v2.0/token
    A-->A: Validar firma y huella digital del certificado<br/>Verificar roles de aplicación para Graph
    A-->M: 200 access_token (aud=graph)
    M-->S: Devolver access_token (almacenar en caché)

    S->>G: GET /v1.0/teams con Authorization: Bearer access_token
    G-->S: 200 lista de equipos (paginada mediante @odata.nextLink)
```

> Nota sobre credenciales: utilizamos un certificado X.509 (client assertion) en lugar de un client secret para la autenticación de servicio a servicio. Esto se aplica a las llamadas a Microsoft Graph, las comunicaciones del bot con el adaptador de Bot Framework y a cualquier llamada de API de solo aplicación (app-only) desde la integración.

<div id="complete-message-processing-flow-teams-cognition">
  #### Flujo completo de procesamiento de mensajes (Teams → Cognition)
</div>

El siguiente diagrama muestra el flujo completo de extremo a extremo cuando un usuario le envía un mensaje a Devin en Microsoft Teams, incluida la validación de tokens y el procesamiento del bot.

```mermaid theme={null}
sequenceDiagram
    participant U as Cliente de Teams
    participant T as Servicio de Teams
    participant W as Adaptador de webhook del bot
    participant J as Validador de JWT
    participant O as Metadatos y claves de OpenID
    participant C as Proveedor de credenciales
    participant B as Lógica del bot

    U->>T: Mensaje de usuario @Devin
    T->>W: Actividad HTTP POST + token Bearer de autorización
    note over W: Extraer encabezado de autorización y token

    W->>J: Validar token
    J->>O: Obtener configuración de OpenID y claves de firma
    O-->J: Devolver claves JWKS
    J->>J: Verificar firma RS256<br/>y analizar claims
    J-->W: Claims validados

    W->>C: Verificar appId contra credenciales
    C-->W: AppId reconocido
    W->>W: Agregar serviceUrl a lista de confianza

    W->>B: Crear TurnContext y llamar al manejador del bot
    B->>B: Ejecutar lógica de negocio
    B-->W: Actividad saliente

    W->>T: Enviar respuesta a través del servicio de conector
    T->>U: Entregar mensaje al usuario
```

> Nota sobre credenciales: utilizamos un certificado X.509 (client assertion) en lugar de un client secret para la autenticación de servicio a servicio. Esto se aplica a las llamadas a Microsoft Graph, a las comunicaciones del bot con el adaptador de Bot Framework y a cualquier llamada de API de solo aplicación desde la integración.

<div id="consent-installation-flow">
  #### Flujo de consentimiento e instalación
</div>

1. **Consentimiento de administrador (a nivel de organización/tenant)**
   * Un administrador de Entra ID otorga los permisos de aplicación de Graph indicados arriba.
2. **Descubrimiento de la aplicación**
   * La integración consulta el catálogo de aplicaciones de Teams para localizar nuestra aplicación y obtener `teamsAppId`.
3. **Instalación dirigida**
   * Desde nuestro panel de control, instalamos el bot en un equipo específico.
   * Durante la instalación, los ámbitos de RSC se otorgan solo a ese equipo (o al chat específico cuando se invoca en un chat).
4. **Funcionamiento**
   * El descubrimiento (organización/equipos/canales/catálogo de aplicaciones) utiliza permisos de aplicación de Graph.
   * La lectura y el envío de mensajes, así como la lectura de miembros y configuración, se basan en RSC dentro de los contextos donde está instalado.

<div id="least-privilege-notes">
  #### Notas sobre privilegios mínimos
</div>

* Solo lectores básicos: `User.ReadBasic.All` (sin lectura de mensajes a nivel de todo el tenant).
* El contenido de los mensajes se accede exclusivamente mediante RSC y solo donde el bot está instalado o presente.
* No se solicitan permisos de buzón, archivos ni calendario.

<div id="revocation-uninstallation">
  #### Revocación y desinstalación
</div>

* Revocar el consentimiento de administrador: Un administrador del inquilino (tenant) puede quitar los permisos de la aplicación empresarial en Entra ID.
* Desinstalar de Teams: Quita la aplicación de un equipo/chat para revocar RSC para ese recurso.
* Gestión de datos: Al desinstalar, nuestra integración deja de procesar eventos para ese equipo/chat y elimina las suscripciones/vínculos relacionados.
