[LINE WORKS Bot] トークルームのグループ/組織を特定する

# はじめに
グループや組織のトークルーム上からBotを経由して何かデータ連携を行いたい際に、以下のAPIを使うことでそのトークルームに紐づくグループや組織を特定できるようになりました。

**[トークルームの情報取得](https://developers.worksmobile.com/jp/docs/bot-channel-get　)** ※ 2023/7/13に追加されました

このAPIによってトークルームに関する情報を取得でき、そのトークルームがグループや組織のものである場合は、それらIDがレスポンスに含まれます。

# トークルーム情報の取得方法
[トークルームの情報取得](https://developers.worksmobile.com/jp/docs/bot-channel-get　) APIのリクエスト形式は以下の通りです。

```text
GET https://www.worksapis.com/v1.0/bots/{botId}/channels/{channelId}
```

Pathに`botId` と `channelId` を指定することで、そのトークルームの情報を取得できます。

`channelId`はトークルーム固有のIDであり、Callback eventやトークルーム画面のメニューから取得できます。

> ■ Note
> Botが参加していないトークルームの情報は取得できません。



# APIを使ってみる
グループのトークルームを作ってBotを追加し、そのトークルームのChannel IDとBotのBot IDでAPIを実行してレスポンスをみてみます。

## Botを作成
※ 既にBotがある場合はスキップしてください。

Developer ConsoleにてBotを作成、および、管理者画面にてBotを追加します。

Botの設定で「複数人のトークルームに招待可」をONとしておくことで、グループのトークルームへ招待が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241369/4da1db66-8f74-8163-5a4d-b5365863b7a7.png)

作成については以下の記事を参照ください。

https://qiita.com/mmclsntr/items/3da41a9d03d6dba16290#%E4%BB%BB%E6%84%8F-%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%83%9C%E3%83%83%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90 

## グループを作成
※ 既にグループがある場合はスキップしてください。

「トーク」から「新規作成」で「社内メンバーとトーク」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241369/61766351-21f9-f70b-5b7c-8e24862515f2.png)

「メンバー選択」画面の「グループ」タブから「グループ作成」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241369/b89bc01e-4a8c-2fbd-1909-6cd28d959dcd.png)

タイトルなどを入力し「追加」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241369/3c393d44-2cfd-a76e-83f0-d0d9611fd553.png)

グループが作成され、グループのトークルームも作成される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241369/a135667b-24f0-b04e-4c0e-09c561420e7e.png)


参考: https://help.worksmobile.com/jp/message/create-message-rooms/how-to-create-groups/

## グループにBotを追加
※ 既にBotがグループに参加している場合はスキップしてください。

グループのトークルームのメニューで「Bot招待」を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241369/fec84719-e56a-a834-8551-ecf9ca42c775.png)

対象のBotを選択し「OK」すると、Botが追加される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241369/98adaaee-9305-f2ff-68d2-5ce9f6659cff.png)

## Bot IDを取得
Developer ConsoleのBotの詳細画面から、Bot IDを取得します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241369/e9f193ef-a5b8-b551-088e-24dde2aec5bf.png)

## Channel IDを取得
グループのトークルームのChannel IDを取得します。

トークルームのメニューの「チャンネルID」から取得します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241369/a2629b4d-4fac-d795-eef4-142e21baec2f.png)


## トークルームの情報取得 APIを実行
**※ APIを実行する前に、`bot.read` または `bot` scopeを含んだアクセストークンの発行が必要です。**
アクセストークンの取得については以下を参考ください。

https://qiita.com/mmclsntr/items/3da41a9d03d6dba16290#%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E7%99%BA%E8%A1%8C--api%E3%82%92%E5%AE%9F%E8%A1%8C


取得したBot IDとChannel IDを使って、グループのトークルームの情報を取得します。

cURLでの実行例。

```shell
curl --location 'https://www.worksapis.com/v1.0/bots/{Bot ID}/channels/{Channel ID}' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {access token}'
```

実行すると、以下のような内容が返ります。

```json
{
    "domainId": 123456789,
    "channelId": "Channel ID",
    "title": "test group",
    "channelType": {
        "type": "GROUP",
        "groupId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
}
```

グループのトークルームであるため、`channelType.type` に　`GROUP` が入り、`channelType.groupId` にそのグループのGroup IDが入ります。

## 補足: 取得したGroup IDからグループ情報を取得する
上記のレスポンスの `channelType.groupId` を使ってグループ情報を取得できます。

[グループの取得](https://developers.worksmobile.com/jp/docs/group-get) APIを利用します。

```text
GET https://www.worksapis.com/v1.0/groups/{groupId}
```

**※ APIを実行する前に、`group.read` scopeを含んだアクセストークンの発行が必要です。**

## 補足: 組織のトークルームの場合
今回はグループのトークルームでしたが、組織のトークルームの場合は、以下のように `channelType.type` には `ORGUNIT` が入り、`channelType.orgUnitId` に組織のOrgUnit Idが入ります。

```json
{
    "domainId": 123456789,
    "channelId": "Channel ID",
    "title": "test orgunit",
    "channelType": {
        "type": "ORGUNIT",
        "orgUnitId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
}
```

グループと同様に [組織の取得](https://developers.worksmobile.com/jp/docs/orgunit-get) APIを使うことで組織の情報を取得できます。

# まとめ
トークルームの情報取得 APIによって、Botが入っているトークルームの詳細情報を取得できるようになりました。これでグループや組織情報と紐づけたデータ連携もやりやすくなりました。