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

> Converse e colabore com Devin diretamente no Microsoft Teams

Mencione **@Devin** no Microsoft Teams assim que surgirem bugs, solicitações de funcionalidades e dúvidas. Devin responde no próprio tópico com atualizações e perguntas sempre que for marcado.

<div id="get-started">
  ## Primeiros passos
</div>

<div id="installation">
  ### Instalação
</div>

1. Vá para [Settings > Connections](https://app.devin.ai/settings/connections) e selecione **Microsoft Teams**
2. Clique em "Connect"
3. Você será solicitado a instalar o aplicativo Devin para Microsoft Teams no seu tenant e/ou equipe de destino
4. Certifique-se de vincular seu usuário. Todos os usuários da sua organização precisarão concluir esta etapa para usar o Devin
5. Mencione `@Devin` em um canal ou chat de uma equipe para iniciar uma sessão

> Observação: Para que o Devin funcione para cada usuário, cada pessoa deve conectar a própria conta no painel do Devin (Settings > Connections). Isso permite que o Devin associe a identidade do Microsoft Teams desse usuário à sua conta no Devin.

<div id="how-to-use-devin-from-microsoft-teams">
  ### Como usar o Devin a partir do Microsoft Teams
</div>

Depois de instalar a integração com o Microsoft Teams, basta acionar o Devin com `@Devin` em qualquer canal do Teams.

O Devin responderá em uma thread à sua sessão. Você pode se comunicar normalmente, como na interface de chat padrão do Devin.

*Observe que o Devin pode cometer erros. Verifique as respostas com atenção.*

<div id="inline-teams-keywords-functions">
  ### Palavras-chave e funções inline no Teams
</div>

| Palavra-chave       | Função                                                                                                            |
| ------------------- | ----------------------------------------------------------------------------------------------------------------- |
| `!ask`              | Comece sua mensagem com !ask para obter uma resposta rápida sobre a base de código sem iniciar um agente completo |
| `!deep`             | Obtenha uma resposta de pesquisa mais detalhada usando busca avançada                                             |
| `mute`              | Impede que Devin veja novas mensagens no tópico                                                                   |
| `unmute`            | Reverte o comportamento acima                                                                                     |
| `(aside)`, `!aside` | Faz com que Devin ignore a mensagem (útil para comentários sobre a execução do Devin diretamente no tópico)       |
| `sleep`             | Coloca Devin em modo de suspensão; para acordá-lo, envie qualquer mensagem no tópico                              |
| `archive`           | Coloca Devin em modo de suspensão e arquiva a sessão                                                              |
| `EXIT`              | Encerra a sessão                                                                                                  |
| `help`              | Mostra uma mensagem de ajuda com as palavras-chave e funções disponíveis                                          |

<div id="pricing">
  ### Preços
</div>

Se você ainda não tem uma conta no Devin, saiba mais sobre preços e planos [aqui](https://devin.ai/pricing).

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

Nossa política de privacidade pode ser acessada [aqui](https://cognition.com/privacy-policy).

<div id="authentication-flow">
  ### Fluxo de autenticação
</div>

O diagrama abaixo ilustra a arquitetura de autenticação em alto nível da integração do Microsoft Teams, mostrando como a autenticação flui do Teams por diferentes camadas para criar sessões autenticadas do Devin.

```mermaid theme={null}
graph TB
    subgraph MSTeams ["Microsoft Teams"]
        A[Usuário do Teams] --> B[Canal do Teams]
        B --> C[Teams Bot Framework]
        C --> D[API do Microsoft Graph]
    end
    
    subgraph AuthLayer ["Camada de Autenticação"]
        E[Autenticação por Certificado] --> F[Validação de Token JWT]
        F --> G[Verificação de ID do Tenant]
        G --> H[Claims de Identidade do Usuário]
    end
    
    subgraph DevinPlat ["Plataforma Devin"]
        I[Gerenciador de Chat] --> J[Serviço de Mapeamento de Identidade]
        J --> K[Resolvedor de Organização]
        K --> L[Autorização RBAC]
        L --> M[Criação de Sessão]
    end
    
    subgraph IdProviders ["Provedores de Identidade"]
        N[Microsoft Entra ID] --> O[Provedor SAML/SSO]
        O --> P[Repositório de Identidade do Devin]
    end
    
    A --> E
    D --> F
    H --> J
    N --> J
    P --> L
    M --> Q[Sessão do Devin]
```

<div id="permissions-details">
  ### Detalhes de permissões
</div>

Abaixo está um resumo das permissões do Microsoft Teams e do Microsoft Graph que nossa integração exige — o que cada uma concede, por que precisamos dela e onde é usada.

> Visão geral rápida
>
> * Graph (aplicativo, em todo o tenant): descoberta e orquestração de instalação.
> * Bot do Teams RSC (por equipe/chat): acesso restrito a mensagens/membros/configurações apenas onde o bot está instalado ou presente.

<div id="tenant-wide-microsoft-graph-application-permissions">
  #### Permissões de Microsoft Graph (Aplicativo) em todo o tenant
</div>

Essas permissões exigem consentimento de administrador no Microsoft Entra ID. Elas são somente aplicativo (sem delegação de usuário).

| Permission                                                | O que ela permite                                                         | Por que precisamos dela                                                         |
| --------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| `Organization.Read.All`                                   | Ler o perfil básico da organização                                        | Validar o tenant onde o aplicativo está sendo instalado                         |
| `User.ReadBasic.All`                                      | Ler perfis básicos de todos os usuários                                   | Mapear identidades de membros e resolver menções em Teams vinculados            |
| `AppCatalog.Read.All`                                     | Ler o catálogo de aplicativos do Teams                                    | Localizar nosso aplicativo e buscar o `teamsAppId` necessário para a instalação |
| `TeamsAppInstallation.ReadWriteAndConsentSelfForTeam.All` | Instalar/desinstalar nosso próprio aplicativo; conceder RSC ao aplicativo | Instalar/remover o bot em uma equipe selecionada a partir do painel do Devin    |

> Observação: não usamos o Graph em nível de tenant para ler conteúdo de mensagens. O acesso a mensagens é concedido somente via RSC e somente onde o bot está instalado.

<div id="teams-bot-resource-specific-consent-rsc-permissions">
  #### Permissões de Resource-Specific Consent (RSC) do bot do Teams
</div>

São concedidas por equipe/chat no momento da instalação (não se aplicam a todo o locatário).

| Permission                  | Scope        | O que permite                                                                                        | Por que precisamos disso                                                                                     |
| --------------------------- | ------------ | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `ChannelMessage.Read.Group` | Team/Channel | Ler mensagens de canais onde o aplicativo está instalado                                             | Processar conversas de canal (resumos, gatilhos, sincronização)                                              |
| `ChannelMessage.Send.Group` | Team/Channel | Enviar mensagens em canais (novas postagens e respostas em threads) onde o aplicativo está instalado | Responder a mensagens em threads de canal e postar atualizações de forma proativa em canais                  |
| `Member.Read.Group`         | Team/Channel | Ler a lista de membros da equipe                                                                     | Mapear identidades, realizar verificações de permissão, roteamento de menções                                |
| `TeamSettings.Read.Group`   | Team/Channel | Ler configurações da equipe                                                                          | Respeitar políticas em nível de equipe e ajustar o comportamento                                             |
| `ChatMember.Read.Chat`      | Chat         | Ler os participantes do chat                                                                         | Direcionar/responder corretamente e oferecer registros de auditoria                                          |
| `ChatMessage.Read.Chat`     | Chat         | Ler mensagens em chats onde o bot participa                                                          | Processar prompts, contexto e interações de acompanhamento                                                   |
| `ChatMessage.Send.Chat`     | Chat         | Enviar mensagens em chats 1:1 e em grupo (DMs) onde o bot participa; não para canais                 | Responder a usuários em DMs e chats em grupo, postar notificações e respostas interativas em threads de chat |
| `ChatSettings.Read.Chat`    | Chat         | Ler configurações do chat (por exemplo, moderação)                                                   | Alinhar o comportamento com as políticas do chat (limites de frequência, quem pode postar, etc.)             |

> Salvaguardas de RSC: o acesso é limitado à equipe/chat específico onde o aplicativo está instalado ou participa. Remover o aplicativo de uma equipe/chat revoga esse acesso.

<div id="example-certificate-based-authentication-for-teams-discovery">
  #### Exemplo: autenticação baseada em certificado para descoberta de Teams
</div>

O diagrama abaixo ilustra nossa autenticação somente de aplicativo, baseada em certificado, com o Microsoft Graph. Usando um certificado de cliente X.509, o serviço adquire um token de acesso e então chama o Graph para listar os Teams (GET /v1.0/teams). Este exemplo demonstra como o Devin realiza com segurança a descoberta do tenant, sem contexto de usuário.

```mermaid theme={null}
sequenceDiagram
    participant S as Cognition
    participant M as Cliente MSAL
    participant K as Chave privada do certificado
    participant A as Endpoint de token do Entra ID
    participant G as Microsoft Graph

    S->>M: Adquirir token para o Graph (escopo .default)
    M->>M: Verificar cache de token (locatário, escopo, cliente)
    M->>K: Construir JWT client_assertion (assinar com certificado)
    K-->M: client_assertion (JWT assinado)
    M->>A: POST /oauth2/v2.0/token
    A-->A: Validar assinatura e impressão digital do certificado<br/>Verificar permissões do app no Graph
    A-->M: 200 access_token (aud=graph)
    M-->S: Retornar access_token (armazenar em cache)

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

> Observação sobre credenciais: usamos um certificado X.509 (client assertion) em vez de um client secret para autenticação entre serviços. Isso se aplica a chamadas ao Microsoft Graph, comunicações do bot com o adaptador do Bot Framework e quaisquer chamadas de API somente de aplicativo feitas pela integração.

<div id="complete-message-processing-flow-teams-cognition">
  #### Fluxo completo de processamento de mensagens (Teams → Cognition)
</div>

O diagrama abaixo mostra o fluxo completo de ponta a ponta quando um usuário envia uma mensagem para Devin no Microsoft Teams, incluindo validação de tokens e processamento do bot.

```mermaid theme={null}
sequenceDiagram
    participant U as Cliente Teams
    participant T as Serviço Teams
    participant W as Adaptador de webhook do bot
    participant J as Validador JWT
    participant O as Metadados e chaves OpenID
    participant C as Provedor de credenciais
    participant B as Lógica do bot

    U->>T: Mensagem do usuário @Devin
    T->>W: Atividade HTTP POST + token Bearer de autorização
    note over W: Extrair cabeçalho Authorization e token

    W->>J: Validar token
    J->>O: Buscar configuração OpenID e chaves de assinatura
    O-->J: Retornar chaves JWKS
    J->>J: Verificar assinatura RS256<br/>e analisar declarações
    J-->W: Declarações validadas

    W->>C: Verificar appId nas credenciais
    C-->W: AppId reconhecido
    W->>W: Adicionar serviceUrl à lista de confiança

    W->>B: Criar TurnContext e chamar manipulador do bot
    B->>B: Executar lógica de negócio
    B-->W: Atividade de saída

    W->>T: Enviar resposta via serviço de conector
    T->>U: Entregar mensagem ao usuário
```

> Observação sobre credenciais: usamos um certificado X.509 (client assertion) em vez de um client secret para autenticação entre serviços. Isso se aplica a chamadas ao Microsoft Graph, comunicações do bot com o adaptador do Bot Framework e a quaisquer chamadas de API somente aplicativo feitas a partir da integração.

<div id="consent-installation-flow">
  #### Fluxo de consentimento e instalação
</div>

1. **Consentimento de administrador (em todo o locatário)**
   * Um administrador do Entra ID concede as permissões de aplicativo do Graph listadas acima.
2. **Descoberta do aplicativo**
   * A integração consulta o catálogo de aplicativos do Teams para localizar nosso app e obter o `teamsAppId`.
3. **Instalação direcionada**
   * A partir do nosso painel, instalamos o bot em uma equipe específica.
   * Durante a instalação, os escopos de RSC são concedidos apenas para aquela equipe (ou para o chat específico quando invocado em um chat).
4. **Operação**
   * A descoberta (organização/equipes/canais/catálogo de aplicativos) usa permissões de aplicativo do Graph.
   * A leitura/envio de mensagens e a leitura de membros/configurações dependem de RSC nos contextos em que o app está instalado.

<div id="least-privilege-notes">
  #### Observações sobre privilégio mínimo
</div>

* Apenas leitores básicos: `User.ReadBasic.All` (sem leitura de mensagens em todo o tenant).
* O conteúdo das mensagens é acessado exclusivamente por meio de RSC e somente onde o bot estiver instalado/presente.
* Nenhuma permissão de caixa de correio, arquivos ou calendário é solicitada.

<div id="revocation-uninstallation">
  #### Revogação e desinstalação
</div>

* Revogar consentimento de administrador: Um administrador do locatário pode remover as permissões do aplicativo empresarial no Entra ID.
* Desinstalar do Teams: Remova o aplicativo de uma Equipe/Chat para revogar o RSC para esse recurso.
* Tratamento de dados: Na desinstalação, nossa integração interrompe o processamento de eventos para essa Equipe/Chat e limpa as assinaturas/vínculos relacionados.
