【LINE WORKS版Trello Bot】トークBotを含む非公開トークルームの作成方法

こんばんは、@0yanです。
LINE WORKS版のTrello Botについては、過去に以下の記事を書きました。

**【過去記事】**
1. [PythonでLINE WORKS版 Trello Botを作るまでのお話](https://qiita.com/0yan/items/cd9a292d5c81c32a847d)
2. [LINE WORKS用Trello BotをHerokuにデプロイするまで](https://qiita.com/0yan/items/492ca08bb3bfde32dab8)
3. [【備忘録】PythonによるLINE WORKS版Trello Botの実装（PyPI lineworks インストールVer.）](https://qiita.com/0yan/items/b112024cfe9eed443795)

しかし、他部署からの要請でその課専用のTrello Botを作ろうとしたところ、「あれ？どうやってトークBotを含む非公開トークルーム作ればいいんだっけ・・・？」とわからなくなってしまいました（要するに忘れた）。

恐らく、上記記事をご覧になられる方は、**特定のメンバーで共有しているTrelloボードの更新通知を受け取りたいはず（非公開トークルームを作りたいはず）**なので、今回はその記事を書きたいと思います。


# 前提条件
- LINE WORKS API情報取得済（参考：[API 認証の準備](https://developers.worksmobile.com/jp/document/1002002?lang=ja)）
- Trello API情報取得済（参考：[【備忘録】Trello Webhook関連](https://qiita.com/0yan/items/8e697992a6cd85f1500c)）

#　環境
- Windows 10
- Python 3.7.3（Anaconda）
- GitHub
- Heroku


# ライブラリ
- flask 1.1.1
- gunicorn 19.9.0
- lineworks 0.0.5
- py-trello 0.15.0


# Trello Botの作成
過去記事3と同様の手順で
1. コーディング
2. GitHub経由でHerokuにデプロイ
3. Trello Webhookの作成
までを行います。

トークBotの通知先が特定の個人であれば、Heroku環境変数「ACCOUNT_ID」にその個人のアカウントIDを入れればOKですが、トークBotの通知先が非公開トークルームの場合は以下の作業を行います。


### トークBotの通知先が非公開トークルームの場合
##### ①ソースコードの修正
以下のコードは上述のコーディングで書いたコードです。
`create_room()`の変数`account_ids`に代入するリスト内要素「任意のアカウントID」に、作成する非公開トークルームのメンバーとなる方のアカウントID（～@ドメイン名）を入力します。
また、`create_room()`の変数`res`に代入する関数`talkbot.create_room()`の引数「任意のトークルーム名」に、非公開トークルームの表示名を入力します。

```python:app.py
# coding: utf-8

import os

from flask import Flask, abort, request
from lineworks.talkbot_api import TalkBotApi


app = Flask(__name__)
talkbot = TalkBotApi(
    api_id=os.environ.get('API_ID'),
    private_key=os.environ.get('PRIVATE_KEY'),
    server_api_consumer_key=os.environ.get('SERVER_API_CONSUMER_KEY'),
    server_id=os.environ.get('SERVER_ID'),
    bot_no=os.environ.get('BOT_NO'),
    account_id=os.environ.get('ACCOUNT_ID'),
    room_id=os.environ.get('ROOM_ID'),
    domain_id=os.environ.get('DOMAIN_ID')
)


@app.route('/')
def index():
    return 'Start', 200


@app.route('/webhook', methods=['GET', 'HEAD', 'POST'])
def webhook():
    if request.method == 'GET':
        return 'Start', 200
    elif request.method == 'HEAD':
        return '', 200
    elif request.method == 'POST':
        action_type = request.json['action']['display']['translationKey']
        if action_type == 'action_comment_on_card':
            card_name = request.json['action']['data']['card']['name']
            user_name = request.json['action']['memberCreator']['fullName']
            comment = request.json['action']['data']['text']
            message = user_name + "さんがコメントしました。\n【カード】" + card_name + "\n【コメント】" + comment
            talkbot.send_text_message(send_text=message)
            return '', 200
        else:
            pass
    else:
        abort(400)


@app.route('/create_room', methods=['GET'])
def create_room():
    if request.method == 'GET':
        account_ids = [
            "任意のアカウントID",
            "任意のアカウントID",
            "任意のアカウントID",
            "任意のアカウントID",
            "任意のアカウントID"
        ]
        res = talkbot.create_room(account_ids=account_ids, title="任意のトークルーム名（例：Trello Bot）")
        return res, 200
    else:
        abort(400)        
        

if __name__ == '__main__':
    app.run()
```

##### ②Trello Botを含む非公開トークルームの作成及びルームIDの取得
https://{Herokuのアプリ名}.herokuapp.com/create_room
上記URLにアクセスすると、HTTPレスポンスとしてルームIDが返ってきます（ブラウザに以下のようなルームIDが表示されます）。

```
{
  "roomId": "123456"
}
```

##### ③Herokuの環境変数にルームIDを入力
Herokuの環境変数「ROOM_ID」に、②で取得したルームIDを入力します。
なお、この時、Herokuの環境変数「ACCOUNT_ID」を削除するのを忘れないようにしてください。

##### ④テスト
Trelloのカードにコメントしてみてください。
②で指定したトークルーム名で、Trello更新通知が届きます。


# おわりに
ご覧頂きありがとうございました。
LINE WORKSが益々発展することを願っています！