Microsoft Graph を使ってみよう : チームワークリソース (Teams) 

# Microsoft Teams
Microsoft Teams は比較的新しいサービスで、社内外のコラボレーションを効率よく行うためのツールです。Teams ではグループという単位で作業を行うようにデザインされていて、チャットやファイル、他サービスとの統合機能などが提供されます。

Microsoft Graph では Teams 用に以下のようなリソースが提供されます。

- グループ
- チーム
- チャネル
- チャット

関連リソースとして予定表やドライブ、予定やメモ (OneNote) があります。

現時点でチームワークのリソースはベータ版です。よってここでは C# のサンプルは載せませんが、HttpClient が利用できます。
また現在は行える操作が限定的ですが、詳細的にはより多くの操作がサポートされる予定です。

# グループリソース

Microsoft Team の基本の単位としてグループがあります。

## 主なシナリオ

- グループの取得、更新、削除
- グループの一覧取得や差分取得
- グループ設定の取得、作成、更新、削除
- グループの所有者やメンバーの追加や削除
- メンバー設定の操作
- 関連リソースの操作

## グループリソースの操作

Microsoft Teams のグループと以前紹介したグループは内部的には同じものですが、Office 365 グループとして登録が必要な点と、チームの追加が必要となります。いくつか代表的な操作を以下に紹介します。

**グループの作成**
Teams のグループを作成するには、まずグループリソースを作成して、その後 Teams の設定を登録します。

POST: https://graph.microsoft.com/beta/groups

```json:Body
{
  "description": "de:code 2018 Teams グループ",
  "displayName": "de:code 2018 Teams グループ",
  "groupTypes": [
    "Unified"
  ],
  "mailEnabled": true,
  "mailNickname": "decode2018teamsgroup",
  "securityEnabled": false,
  "visibility": "public"
}
```

PUT: https://graph.microsoft.com/beta/groups/{id}/team

```json:Body
{  
  "memberSettings": {
    "allowCreateUpdateChannels": true
  },
  "messagingSettings": {
    "allowUserEditMessages": true,
    "allowUserDeleteMessages": true
  },
  "funSettings": {
    "allowGiphy": true,
    "giphyContentRating": "strict"
  },
  "guestSettings": {
    "allowCreateUpdateChannels": false,
    "allowDeleteChannels": false 
  },
}
```

<img width="574" alt="Capture.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/214116/6ae3ee22-54d3-bca4-e2e6-e28ccce9476f.png">

**グループの取得と削除**

GET: https://graph.microsoft.com/beta/groups/{id}
DELETE: https://graph.microsoft.com/beta/groups/{id}


**グループに所有者やメンバーを追加する**
追加できるのはユーザーかグループ。

POST: https://graph.microsoft.com/beta/groups/{id}/owners/$ref
POST: https://graph.microsoft.com/beta/groups/{id}/members/$ref

```json:Body
{
  "@odata.id": "https://graph.microsoft.com/beta/directoryObjects/{id}"
}
```

**グループの削除と完全削除**
グループを削除するとディレクトリの削除済アイテムに移動されるため、そこから削除すると完全な削除となります。

DELETE: https://graph.microsoft.com/beta/groups/{id}
DELETE: https://graph.microsoft.com/beta/directory/deleteditems/{id}

**削除されたチームの取得と復元**
完全に削除していない場合は以下のとおり取得と復元が出来ます。

GET: https://graph.microsoft.com/beta/directory/deleteditems/microsoft.graph.group
POST https://graph.microsoft.com/beta/directory/deleteditems/{id}/restore

# チームリソース

グループに対して Microsoft Teams の設定を行うためのリソースです。削除はグループの削除で行います。

## 主なシナリオ

- チームの作成、更新、取得

## チームリソースの操作

いくつか代表的な操作を以下に紹介します。

**チームの取得**

GET: https://graph.microsoft.com/beta/groups/{id}/team

**チームの更新**

PATCH: https://graph.microsoft.com/beta/groups/{id}/team

```json:Body
{  
  "memberSettings": {
    "allowCreateUpdateChannels": true
  },
  "messagingSettings": {
    "allowUserEditMessages": true,
    "allowUserDeleteMessages": true
  },
  "funSettings": {
    "allowGiphy": true,
    "giphyContentRating": "strict"
  }
}
```

# 写真リソース

グループのプロファイル写真です。

## 主なシナリオ

- 写真の取得と更新

## 写真リソースの操作

いくつか代表的な操作を以下に紹介します。

**写真の取得**

GET: https://graph.microsoft.com/beta/groups/{id}/photo/$value

**写真の更新**

PUT: https://graph.microsoft.com/beta/groups/{id}/photo/$value

```text:Header
Content-Type: image/jpeg
```

```text:Body
写真のバイナリデータ
```

# チャネルリソース

グループ内のチャネルを表すリソースです。現在更新、削除はできません。

## 主なシナリオ

- チャネルの取得、作成

## チャネルリソースの操作

いくつか代表的な操作を以下に紹介します。

**チャネルの作成**

POST: https://graph.microsoft.com/beta/groups/{id}/team/channels

```json:Body
{
  "displayName": "セッションについて",
  "description": "このチャネルではセッションについて話します。"
}
```

<img width="552" alt="Capture.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/214116/3cb51361-9c11-00f6-a63d-1ef6d3fd0c7d.png">

# チャットスレッドリソース

チャネルでのチャットスレッドを表すリソースです。現在更新、削除はできません。

## 主なシナリオ

- チャットスレッドの作成

## チャットスレッドリソースの操作

**チャットスレッドの作成**
contentType は 0 がテキスト、1 が HTML となります。
POST: https://graph.microsoft.com/beta/groups/{id}/team/channels/{channel_id}/chatthreads

```json:Body
{
  "rootMessage": {
      "body": {
        "contentType": 1,
        "content": "<h1>セッションについて話しましょう！</h1>"
      }
  }
}
```

<img width="592" alt="Capture.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/214116/58e241d6-1d45-9a74-b4e2-c65329105924.png">

# チャットメッセージリソース

チャットスレッド内のメッセージです。現時点ではチャットスレッド作成時にメッセージを投稿することしかできず、他の投稿の読み取りや編集はできません。

# まとめ
Teams は SharePoint の機能や Skype for Business の機能など包括的に持つ、社内コラボレーションの協力なツールです。Teams 自体も拡張機能をもっていますが、Microsoft Graph は Teams を使う側になれるので、また違った観点での拡張ができると考えています。

[目次に戻る](https://qiita.com/kenakamu/items/6a1ca508dc093779eefa)

# 参照

[Microsoft Graph でのチームワーク操作](https://developer.microsoft.com/ja-jp/graph/docs/api-reference/beta/resources/teams_api_overview)
[Automate team lifecycles with Microsoft Teams and Graph (英語)](https://www.youtube.com/watch?v=0TVM5Wonpkg&t=613s)