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

# Microsoft Teams 연동

> CloudThinker 에이전트와 상호작용하고, Adaptive Card 알림을 받고, 인시던트를 조율하여 Microsoft Teams에서 클라우드 운영을 실행하세요.

Microsoft Teams 워크스페이스를 클라우드 운영 명령 센터로 전환하세요. CloudThinker 에이전트와 소통하고, 알림을 받고, Teams를 떠나지 않고 운영을 실행하세요.

***

## 사전 요구사항

<Warning>
  초기 설정은 **다음 Azure AD 역할 중 하나를 가진 사용자가 수행해야 합니다**:

  * **전역 관리자** — 모든 Microsoft 365 서비스에 대한 전체 관리자 액세스
  * **Teams 관리자** — Microsoft Teams로 범위가 지정된 관리자 액세스

  일반 Microsoft 365 사용자는 설정을 완료할 **수 없습니다**. 이 역할 중 하나가 없는 경우 IT 팀에게 초기 연결(아래 1-3단계)을 수행해달라고 요청하세요. 봇이 게시되면 모든 사용자가 Teams 채널에서 봇과 상호작용할 수 있습니다.
</Warning>

### 필수 Azure AD 권한

OAuth 흐름 중 CloudThinker는 다음 Microsoft Graph API 권한을 요청합니다:

| 권한                                                | 유형         | 목적                |
| ------------------------------------------------- | ---------- | ----------------- |
| `User.Read`                                       | 사용자 동의     | 로그인한 사용자의 프로필 읽기  |
| `Channel.ReadBasic.All`                           | 사용자 동의     | 팀의 채널 나열          |
| `Team.ReadBasic.All`                              | 사용자 동의     | 사용자가 속한 팀 나열      |
| `TeamsAppInstallation.ReadWriteForTeam`           | **관리자 동의** | 팀에 봇 설치           |
| `TeamsAppInstallation.ReadWriteAndConsentForTeam` | **관리자 동의** | 봇 설치 및 리소스별 동의 부여 |
| `TeamsAppInstallation.ReadWriteSelfForTeam`       | **관리자 동의** | 봇 자체 설치 관리        |
| `AppCatalog.ReadWrite.All`                        | **관리자 동의** | 조직의 앱 카탈로그에 봇 게시  |
| `Organization.Read.All`                           | **관리자 동의** | 조직 정보 읽기          |

**관리자 동의**로 표시된 권한은 전역 관리자 또는 Teams 관리자만 부여할 수 있습니다. OAuth 흐름 중 관리자에게는 **"조직을 대신하여 동의"** 확인란이 표시됩니다:

* **선택됨** — Azure AD 테넌트의 모든 사용자에 대해 테넌트 전체에 권한이 부여됩니다. 나중에 연결하는 다른 관리자는 다시 동의할 필요가 없습니다.
* **선택 안 됨** — 관리자 자신의 계정에만 권한이 부여됩니다. 관리자가 봇을 게시하는 데 필요한 역할을 개인적으로 보유하므로 설정을 완료하는 데 충분합니다.

### 설정을 수행해야 하는 사람

| 역할                      | 해야 할 일                                                                       |
| ----------------------- | ---------------------------------------------------------------------------- |
| **전역 관리자 또는 Teams 관리자** | 전체 설정을 직접 완료할 수 있습니다 — 아래 1단계로 진행하세요                                         |
| **일반 사용자**              | 전역 관리자 또는 Teams 관리자에게 1-3단계를 완료해달라고 요청하세요. 봇이 게시되면 설치된 채널 어디서나 봇을 사용할 수 있습니다 |

***

## 설정

<Steps>
  <Step title="연동으로 이동">
    [**관리자 설정 → 연동**](https://app.cloudthinker.io/admin-settings/integrations)으로 이동하여 **Microsoft Teams**를 찾습니다
  </Step>

  <Step title="Teams 연결">
    **Teams 연결**을 클릭하고 Microsoft OAuth를 통해 인증합니다.

    <Warning>
      **전역 관리자** 또는 **Teams 관리자** 계정으로 로그인해야 합니다. 일반 사용자인 경우 이 단계가:

      * Microsoft 동의 화면에서 차단되거나
      * 성공한 것처럼 보이지만 봇을 조직의 앱 카탈로그에 게시하는 데 자동으로 실패합니다

      관리자가 아닌 경우 이 페이지를 IT 팀과 공유하고 이 단계를 수행해달라고 요청하세요.
    </Warning>
  </Step>

  <Step title="봇 설치">
    CloudThinker 봇을 추가할 Teams를 선택하고 설치를 확인합니다. 봇이 조직의 Teams 앱 카탈로그에 게시됩니다 — 이는 일회성 작업입니다.
  </Step>

  <Step title="Teams를 워크스페이스에 매핑">
    에이전트가 작동할 클라우드 계정을 알 수 있도록 Microsoft Teams를 CloudThinker 워크스페이스에 매핑합니다
  </Step>

  <Step title="알림 구성">
    선택적으로 각 알림 유형(비용 알림, 보안 결과, 인시던트 업데이트)에 대한 채널을 선택합니다
  </Step>

  <Step title="테스트">
    채널에서 `@CloudThinker alex show AWS costs`를 입력하여 연결을 확인합니다
  </Step>
</Steps>

***

## 문법

Teams에서는 모든 명령에 `@CloudThinker` 접두사를 붙입니다:

```text theme={null}
@CloudThinker alex analyze EC2 spending trends
@CloudThinker oliver audit security groups for public access
@CloudThinker tony check database performance
@CloudThinker kai review EKS cluster health
```

모든 [CloudThinker Language](/ko/guide/language) 문법이 Teams에서 작동합니다 — `@CloudThinker` 접두사만 추가하면 됩니다.

***

## 예시

### 빠른 쿼리

```text theme={null}
@CloudThinker alex what's our AWS spending this week?
@CloudThinker oliver any critical security findings?
@CloudThinker tony why are queries slow on production?
@CloudThinker kai check pod status in payment namespace
```

### 도구 사용

```text theme={null}
@CloudThinker alex #dashboard cost trends by service
@CloudThinker oliver #report weekly security summary
@CloudThinker tony #recommend index optimizations
@CloudThinker kai #alert on pod OOMKilled events
```

### 멀티 에이전트

```text theme={null}
@CloudThinker anna coordinate investigation of latency spike
@CloudThinker alex and tony analyze database infrastructure costs
```

***

## 알림

에이전트가 Teams 채널에 알림을 보내도록 구성합니다:

```text theme={null}
@CloudThinker alex #alert daily spend exceeds $5,000 → #cloud-ops
@CloudThinker oliver #alert security group changes → #security
@CloudThinker kai #alert pod failures in production → #k8s-alerts
```

***

## Code Review 알림

AI Code Review가 완료되면 CloudThinker가 구성된 Teams 채널에 Adaptive Card 알림을 전송합니다. 카드에는 다음이 포함됩니다:

* **심각도 FactSet** — 심각도 수준별 수를 보여주는 구조화된 표 (🔴 Critical, 🟠 High, 🟡 Medium, 🟢 Low)
* **결과 세부 정보** — 제목, 심각도 레이블, 파일 경로, 줄 번호가 포함된 최대 5개의 미해결 결과
* **해결된 수** — 이전에 식별된 결과 중 해결된 항목 수
* **Code Review 보기** 버튼 — 리뷰 대시보드로 직접 이동하는 링크
* **깨끗한 통과** — 문제가 없는 경우 간단한 "No issues found" 메시지

<Info>
  Code Review 알림을 받을 Teams 채널을 구성하고 **설정 > 알림 > Code Review / 파이프라인 모니터링**에서 심각도 임계값을 설정하세요. 자세한 내용은 [알림 센터](/ko/guide/notifications)를 참조하세요.
</Info>

***

## 채널 패턴

| 채널              | 사용 사례                       |
| --------------- | --------------------------- |
| `#cloud-ops`    | 일반 인프라 운영 및 비용 알림           |
| `#security`     | 보안 결과 및 컴플라이언스 업데이트         |
| `#incidents`    | 활성 인시던트 조사 및 조율             |
| `#code-reviews` | Code Review 결과 및 파이프라인 모니터링 |
| `#reports`      | 예약된 보고서 및 요약                |

***

## 문제 해결

<Accordion title="에이전트가 응답하지 않음">
  * CloudThinker 봇이 팀에 설치되어 있는지 확인합니다
  * `@CloudThinker agent` 문법을 사용하고 있는지 확인합니다 (`agent`만 입력하는 것이 아님)
  * CloudThinker 콘솔에서 에이전트가 구성되어 있는지 확인합니다
  * Azure AD 관리자 동의 상태를 확인합니다
</Accordion>

<Accordion title="알림 누락">
  * CloudThinker 설정에서 알림 구성을 확인합니다
  * Teams 채널 알림 설정을 확인합니다
  * 봇이 대상 채널에 게시할 권한이 있는지 확인합니다
</Accordion>

<Accordion title="권한 오류">
  * **"필수 권한 누락"** — 연결한 사용자가 전역 관리자 또는 Teams 관리자 역할을 보유하지 않습니다. IT 팀에게 초기 연결을 수행해달라고 요청하세요.
  * **"조직을 대신하여 동의"** — OAuth 중 관리자가 이 확인란을 선택하여 테넌트 전체에 권한을 부여할 수 있습니다. 선택 사항입니다 — 연결하는 사용자가 이미 관리자인 경우 개인 동의로 충분합니다.
  * **연결이 성공한 것처럼 보이지만 봇이 작동하지 않음** — 비관리자 사용자가 OAuth 흐름을 완료한 경우 발생할 수 있습니다. 사용자의 개인 인증은 성공하지만 봇을 앱 카탈로그에 게시하는 데 자동으로 실패합니다. 전역 관리자 또는 Teams 관리자에게 다시 연결해달라고 요청하세요.
  * 다른 권한 오류의 경우 CloudThinker에서 워크스페이스 관리자 권한을 확인하거나 팀에서 봇을 제거했다가 다시 추가해 보세요.
</Accordion>

<Accordion title="관리자가 아닌 경우 — 어떻게 설정하나요?">
  조직의 **전역 관리자** 또는 **Teams 관리자**가 초기 연결을 완료해야 합니다. 공유할 내용:

  1. CloudThinker에 로그인합니다 (조직에 대한 관리자 액세스가 있는 CloudThinker 계정 필요)
  2. [**관리자 설정 → 연동 → Microsoft Teams**](https://app.cloudthinker.io/admin-settings/integrations)로 이동합니다
  3. **Teams 연결**을 클릭하고 Microsoft OAuth 흐름을 완료합니다
  4. 봇이 조직의 Teams 앱 카탈로그에 게시됩니다

  이는 **일회성 설정**입니다. 관리자가 완료하면 봇이 설치된 채널 어디서나 `@CloudThinker`를 언급하여 Teams 워크스페이스의 모든 사용자가 봇과 상호작용할 수 있습니다.
</Accordion>

***

## 권한

### Azure AD 권한

초기 연결에는 Azure AD의 **전역 관리자** 또는 **Teams 관리자**가 필요합니다. CloudThinker가 조직의 Teams 앱 카탈로그에 봇을 게시해야 하는데, 이는 관리자 수준의 작업이기 때문입니다. 이 설정은 일회성 작업입니다 — 봇이 게시되면 추가 관리자 작업이 필요하지 않습니다.

OAuth 중 관리자는 선택적으로 \*\*"조직을 대신하여 동의"\*\*를 선택하여 테넌트 전체에 권한을 부여할 수 있습니다. 선택하지 않으면 관리자 자신의 계정에만 권한이 부여되며, 이는 여전히 설정을 완료하는 데 충분합니다. 요청된 범위의 전체 목록은 위의 [필수 Azure AD 권한](#필수-azure-ad-권한) 표를 참조하세요.

### CloudThinker 권한

Teams 내에서 사용자는 CloudThinker 계정이 허용하는 에이전트와 클라우드 연결만 접근할 수 있습니다. CloudThinker 워크스페이스 역할은 웹 콘솔에서와 동일하게 적용됩니다.

***

## 관련 항목

<CardGroup cols={2}>
  <Card title="CloudThinker Language" icon="code" href="/ko/guide/language">
    모든 명령에 대한 완전한 문법 참조
  </Card>

  <Card title="Slack 연동" icon="slack" href="/ko/guide/slack-integration">
    Slack에서 CloudThinker 설정
  </Card>
</CardGroup>
