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

# Microsoft Teams

> Microsoft Teams 内で Devin と直接チャットし、共同作業する

バグ報告や機能要望、質問が届いたら、すぐに Microsoft Teams で **@Devin** をメンションしてください。タグ付けされると、Devin がスレッド内で更新内容や確認事項を返信します。

<div id="get-started">
  ## はじめに
</div>

<div id="installation">
  ### インストール
</div>

1. [Settings > Connections](https://app.devin.ai/settings/connections) に移動し、**Microsoft Teams** を選択します
2. 「Connect」をクリックします
3. テナントや対象のTeamに Devin アプリをインストールするよう求められます
4. 必ず自分のユーザーを連携してください。組織内のすべてのユーザーが Devin を利用するには、この手順を各自で完了する必要があります
5. Teamのチャネルまたはチャットで `@Devin` とメンションしてセッションを開始します

> 注: Devin を各ユーザーに対して動作させるには、すべてのユーザーが Devin ダッシュボード (Settings > Connections) で自分のアカウントを連携する必要があります。これにより、Devin はそのユーザーの Microsoft Teams のユーザー ID と Devin ユーザーを関連付けることができます。

<div id="how-to-use-devin-from-microsoft-teams">
  ### Microsoft Teams から Devin を使う方法
</div>

Microsoft Teams 連携をインストールしたら、任意の Teams チャンネルで `@Devin` とメンションするだけで Devin を呼び出せます。

Devin は、そのスレッド内であなたのセッションに返信します。通常の Devin チャットインターフェースと同様に、双方向にやりとりできます。

*なお、Devin が誤った回答をする可能性があります。必ず回答内容を再確認してください。*

<div id="inline-teams-keywords-functions">
  ### Teams インラインキーワードと機能
</div>

| Keyword             | Function                                                |
| ------------------- | ------------------------------------------------------- |
| `!ask`              | メッセージを `!ask` で始めると、Devin をフル起動せずにコードベースに関する簡潔な回答を取得します |
| `!deep`             | 高度な検索を使って、より深く踏み込んだ調査結果を取得します                           |
| `mute`              | そのスレッド内で、以降のメッセージを Devin が見ないようにします                     |
| `unmute`            | 上記の状態を解除します                                             |
| `(aside)`, `!aside` | Devin にそのメッセージを無視させます（スレッド内での Devin の実行に関するコメントに便利です）   |
| `sleep`             | Devin をスリープ状態にします。Devin を起こすには、そのスレッドで任意のメッセージを送信してください |
| `archive`           | Devin をスリープ状態にし、さらにセッションをアーカイブします                       |
| `EXIT`              | セッションを終了します                                             |
| `help`              | 利用可能なキーワードと機能のヘルプメッセージを表示します                            |

<div id="pricing">
  ### 料金
</div>

まだDevinアカウントをお持ちでない場合は、料金とプランの詳細を[こちら](https://devin.ai/pricing)からご確認いただけます。

<div id="privacy">
  ### プライバシー
</div>

当社のプライバシーポリシーは[こちら](https://cognition.com/privacy-policy)をご覧ください。

<div id="authentication-flow">
  ### 認証フロー
</div>

以下の図は、Microsoft Teams 連携における認証アーキテクチャの全体像を示しており、Teams から各レイヤーを通って Devin の認証済みセッションが確立されるまでの認証フローを表しています。

```mermaid theme={null}
graph TB
    subgraph MSTeams ["Microsoft Teams"]
        A[Teamsユーザー] --> B[Teamsチャネル]
        B --> C[Teams Bot Framework]
        C --> D[Microsoft Graph API]
    end
    
    subgraph AuthLayer ["認証レイヤー"]
        E[証明書ベース認証] --> F[JWTトークン検証]
        F --> G[テナントID検証]
        G --> H[ユーザーIDクレーム]
    end
    
    subgraph DevinPlat ["Devinプラットフォーム"]
        I[チャットマネージャー] --> J[IDマッピングサービス]
        J --> K[組織リゾルバー]
        K --> L[RBAC認可]
        L --> M[セッション作成]
    end
    
    subgraph IdProviders ["IDプロバイダー"]
        N[Microsoft Entra ID] --> O[SAML/SSOプロバイダー]
        O --> P[Devin IDストア]
    end
    
    A --> E
    D --> F
    H --> J
    N --> J
    P --> L
    M --> Q[Devinセッション]
```

<div id="permissions-details">
  ### 権限の詳細
</div>

以下は、本連携で必要となる Microsoft Teams および Microsoft Graph の権限の概要です。それぞれが何を許可するのか、なぜ必要なのか、どこで使用されるのかを示します。

> 概要
>
> * Graph（アプリケーション権限、テナント全体）：検出およびインストールのオーケストレーションに使用します。
> * Teams ボット RSC（チーム／チャット単位）：ボットがインストールまたは参加している場所に限定して、メッセージ／メンバー／設定へのアクセスを許可します。

<div id="tenant-wide-microsoft-graph-application-permissions">
  #### テナント全体の Microsoft Graph (アプリケーション) 権限
</div>

これらには Microsoft Entra ID での管理者の同意が必要です。アプリケーション専用の権限であり、ユーザーによる委任はありません。

| Permission                                                | 許可される内容                      | 必要な理由                                            |
| --------------------------------------------------------- | ---------------------------- | ------------------------------------------------ |
| `Organization.Read.All`                                   | 基本的な組織プロファイルの読み取り            | アプリをインストールしているテナントを検証するため                        |
| `User.ReadBasic.All`                                      | すべてのユーザーの基本プロファイルの読み取り       | メンバーの ID をマッピングし、リンクされた Teams 内のメンションを解決するため     |
| `AppCatalog.Read.All`                                     | Teams アプリカタログの読み取り           | 本アプリを特定し、インストールに必要な `teamsAppId` を取得するため         |
| `TeamsAppInstallation.ReadWriteAndConsentSelfForTeam.All` | 本アプリのインストール/アンインストールと RSC 付与 | Devin ダッシュボードから選択した Teams のチームにボットをインストール/削除するため |

> 注: テナント全体スコープの Graph を使用してメッセージ内容を読み取ることはありません。メッセージへのアクセスは、ボットがインストールされ存在しているチームに対してのみ、RSC によって付与されます。

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

これらの権限は、インストール時にチーム / チャットごとに付与されます（テナント全体には適用されません）。

| Permission                  | Scope        | What it allows                                          | Why we need it                                       |
| --------------------------- | ------------ | ------------------------------------------------------- | ---------------------------------------------------- |
| `ChannelMessage.Read.Group` | Team/Channel | アプリがインストールされているチャネルのメッセージを読み取る                          | チャネルでの会話を処理する（要約、トリガー、同期など）                          |
| `ChannelMessage.Send.Group` | Team/Channel | アプリがインストールされているチャネルでメッセージを送信する（新規投稿およびスレッド返信）           | チャネルのスレッド内のメッセージに返信し、チャンネルに積極的に更新を投稿する               |
| `Member.Read.Group`         | Team/Channel | チームのメンバーシップを読み取る                                        | ID の対応付け、権限チェック、メンションのルーティング                         |
| `TeamSettings.Read.Group`   | Team/Channel | チーム設定を読み取る                                              | チームレベルのポリシーを尊重し、動作を最適化する                             |
| `ChatMember.Read.Chat`      | Chat         | チャット参加者を読み取る                                            | 適切に宛先指定して応答し、監査証跡をサポートする                             |
| `ChatMessage.Read.Chat`     | Chat         | Bot が参加しているチャット内のメッセージを読み取る                             | プロンプト、コンテキスト、およびフォローアップを処理する                         |
| `ChatMessage.Send.Chat`     | Chat         | Bot が参加している 1:1 およびグループチャット（DM）でメッセージを送信する（チャネルには送信しない） | DM およびグループチャットでユーザーに返信し、通知やインタラクティブな返信をチャットスレッドに投稿する |
| `ChatSettings.Read.Chat`    | Chat         | チャット設定（例: モデレーション）を読み取る                                 | チャットのポリシー（レート制限、投稿可能なユーザーなど）に動作を合わせる                 |

> RSC の制限事項: アクセスは、アプリがインストールされている、または参加している特定のチーム / チャットに限定されます。チーム / チャットからアプリを削除すると、そのアクセスは失効します。

<div id="example-certificate-based-authentication-for-teams-discovery">
  #### 例: Teams 検出のための証明書ベースの認証
</div>

下の図は、Microsoft Graph に対するアプリケーション専用の証明書ベース認証を示しています。X.509 クライアント証明書を使用してサービスがアクセストークンを取得し、その後 Graph を呼び出して Teams の一覧を取得します (GET /v1.0/teams)。この例は、Devin がユーザー コンテキストなしでテナント検出を安全に行う方法を示しています。

```mermaid theme={null}
sequenceDiagram
    participant S as Cognition
    participant M as MSALクライアント
    participant K as 証明書秘密鍵
    participant A as Entra IDトークンエンドポイント
    participant G as Microsoft Graph

    S->>M: Graphのトークンを取得（.defaultスコープ）
    M->>M: トークンキャッシュを確認（テナント、スコープ、クライアント）
    M->>K: client_assertion JWTを構築（証明書で署名）
    K-->M: client_assertion（署名済みJWT）
    M->>A: POST /oauth2/v2.0/token
    A-->A: 署名と証明書サムプリントを検証<br/>Graphへのアプリロールを検証
    A-->M: 200 access_token（aud=graph）
    M-->S: access_tokenを返却（キャッシュに保存）

    S->>G: GET /v1.0/teams（Authorization: Bearer access_token）
    G-->S: 200 チームのリスト（@odata.nextLinkでページング）
```

> 資格情報に関する注意: サービス間認証にはクライアント シークレットではなく、X.509 証明書（クライアント アサーション）を使用します。これは、Microsoft Graph への呼び出し、Bot Framework アダプターとのボット通信、この連携から行われるアプリ単独（app-only）の API 呼び出しに適用されます。

<div id="complete-message-processing-flow-teams-cognition">
  #### メッセージ処理フロー全体（Teams → Cognition）
</div>

次の図は、ユーザーが Microsoft Teams から Devin にメッセージを送信した際の、トークン検証およびボット処理を含むエンドツーエンドのメッセージ処理フローを示しています。

```mermaid theme={null}
sequenceDiagram
    participant U as Teamsクライアント
    participant T as Teamsサービス
    participant W as Botウェブフックアダプター
    participant J as JWTバリデーター
    participant O as OpenIDメタデータとキー
    participant C as 認証情報プロバイダー
    participant B as Botロジック

    U->>T: @Devin ユーザーメッセージ
    T->>W: HTTP POSTアクティビティ + Authorization Bearerトークン
    note over W: Authorizationヘッダーとトークンを抽出

    W->>J: トークンを検証
    J->>O: OpenID設定と署名キーを取得
    O-->J: JWKSキーを返却
    J->>J: RS256署名を検証<br/>してクレームを解析
    J-->W: 検証済みクレーム

    W->>C: appIdを認証情報と照合
    C-->W: AppIdを認識
    W->>W: serviceUrlを信頼リストに追加

    W->>B: TurnContextを作成してBotハンドラーを呼び出し
    B->>B: ビジネスロジックを実行
    B-->W: 送信アクティビティ

    W->>T: コネクターサービス経由で返信を送信
    T->>U: ユーザーにメッセージを配信
```

> 認証情報に関する注意: サービス間認証では、クライアント シークレットではなく X.509 証明書（クライアント アサーション）を使用します。これは、Microsoft Graph の呼び出し、Bot Framework アダプターとのボット通信、およびこの連携からのアプリのみの API 呼び出しすべてに適用されます。

<div id="consent-installation-flow">
  #### 同意とインストールフロー
</div>

1. **管理者同意 (テナント全体)**
   * Entra ID の管理者が、上記の Graph Application 権限を付与します。
2. **アプリ検出**
   * この連携機能が Teams アプリ カタログをクエリし、当社アプリを特定して `teamsAppId` を取得します。
3. **対象指定インストール**
   * ダッシュボードから、特定の Team にボットをインストールします。
   * インストール時、RSC スコープはその Team（またはチャットで呼び出された場合はその特定の Chat）にのみ付与されます。
4. **運用**
   * 検出処理（組織 / Teams / チャネル / アプリ カタログ）は Graph Application 権限を使用します。
   * メッセージの読み取り / 送信、およびメンバー / 設定の読み取りは、インストール先サーフェス内での RSC に依存します。

<div id="least-privilege-notes">
  #### 最小権限に関する注意事項
</div>

* 基本リーダーのみ: `User.ReadBasic.All`（テナント全体のメッセージは読み取りません）。
* メッセージコンテンツへのアクセスは、RSC を通じてのみ行われ、ボットがインストールされている／存在する場所に限定されます。
* メールボックス、ファイル、カレンダーの権限は一切要求しません。

<div id="revocation-uninstallation">
  #### 取り消しとアンインストール
</div>

* 管理者同意の取り消し: テナント管理者は、Entra ID でこのアプリのエンタープライズ アプリ権限を削除できます。
* Teams からのアンインストール: 対象のリソースに対する RSC を取り消すには、その Team/Chat からアプリを削除します。
* データ処理: アンインストール時、当社の連携機能はその Team/Chat に対するイベントの処理を停止し、関連するサブスクリプションやリンクを削除します。
