2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LINEWORKSAdvent Calendar 2019

Day 22

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

Last updated at Posted at 2019-12-21

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

【過去記事】

  1. PythonでLINE WORKS版 Trello Botを作るまでのお話
  2. LINE WORKS用Trello BotをHerokuにデプロイするまで
  3. 【備忘録】PythonによるLINE WORKS版Trello Botの実装(PyPI lineworks インストールVer.)

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

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

前提条件

# 環境

  • 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()の引数「任意のトークルーム名」に、非公開トークルームの表示名を入力します。

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が益々発展することを願っています!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?