こんばんは、@0yanです。
LINE WORKS版のTrello Botについては、過去に以下の記事を書きました。
【過去記事】
- PythonでLINE WORKS版 Trello Botを作るまでのお話
- LINE WORKS用Trello BotをHerokuにデプロイするまで
- 【備忘録】PythonによるLINE WORKS版Trello Botの実装(PyPI lineworks インストールVer.)
しかし、他部署からの要請でその課専用のTrello Botを作ろうとしたところ、「あれ?どうやってトークBotを含む非公開トークルーム作ればいいんだっけ・・・?」とわからなくなってしまいました(要するに忘れた)。
恐らく、上記記事をご覧になられる方は、**特定のメンバーで共有しているTrelloボードの更新通知を受け取りたいはず(非公開トークルームを作りたいはず)**なので、今回はその記事を書きたいと思います。
前提条件
- LINE WORKS API情報取得済(参考:API 認証の準備)
- Trello API情報取得済(参考:【備忘録】Trello Webhook関連)
# 環境
- 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と同様の手順で
- コーディング
- GitHub経由でHerokuにデプロイ
- Trello Webhookの作成
までを行います。
トークBotの通知先が特定の個人であれば、Heroku環境変数「ACCOUNT_ID」にその個人のアカウントIDを入れればOKですが、トークBotの通知先が非公開トークルームの場合は以下の作業を行います。
トークBotの通知先が非公開トークルームの場合
①ソースコードの修正
以下のコードは上述のコーディングで書いたコードです。
create_room()
の変数account_ids
に代入するリスト内要素「任意のアカウントID」に、作成する非公開トークルームのメンバーとなる方のアカウントID(~@ドメイン名)を入力します。
また、create_room()
の変数res
に代入する関数talkbot.create_room()
の引数「任意のトークルーム名」に、非公開トークルームの表示名を入力します。
# 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が益々発展することを願っています!