LoginSignup
2
3

More than 3 years have passed since last update.

LINE WORKSでメンバーからBotへのメッセージを受信し、Botに返信させるまで

Posted at

こんにちは、@0yanです。今日もLINE WORKS APIを勉強しました。
今日は「メンバーからBotへのメッセージを受信し、Botに返信させるまで」です。

環境

Windows 10
Python 3.6.8
ngrok
Flask 0.12.2
lineworks 0.0.2

やったこと

メンバーからのメッセージをBotで受け取り、ローカルサーバーに転送(=受信)。
受信したメッセージ(JSONデータ)のヘッダーからBot Noを取り出し、それをメンバーに送信(=返信)しました。
これ(↓)がイメージです。

イメージ図

image.png

メッセージの転送自体は、BotにCallback URL(今回はローカルサーバーを外部公開するためにngrokで生成したURL)を指定するだけなのでとても楽でした。

手順

  1. Flaskでローカルサーバーを構築後、ngrokで外部公開(参考:【備忘録】ngrokの使い方
  2. LINE WORKS Developer Consoleで、BotのCallback URLに1で得たURL/callbackを指定※httpsを使用
  3. テスト(メンバーからBotにテキストメッセージを送信)
ローカルサーバーのコード
app.py
# coding: utf-8

from flask import Flask
from flask import request
from lineworks import *


# LINE WORKS AIP情報
API_ID = ""
PRIVATE_KEY = ""
SERVER_API_CONSUMER_KEY = ""
SERVER_ID = ""
BOT_NO = ""
ACCOUNT_ID = ""
ROOM_ID = ""
DOMAIN_ID = ""


app = Flask(__name__)


talkbot = TalkBotApi(
    api_id=API_ID,
    private_key=PRIVATE_KEY,
    server_api_consumer_key=SERVER_API_CONSUMER_KEY,
    server_id=SERVER_ID,
    bot_no=BOT_NO,
    account_id=ACCOUNT_ID,
    room_id=ROOM_ID,
    domain_id=DOMAIN_ID
)


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


# POSTを正常に受け取れているかどうかの確認用
@app.route('/callback', methods=['POST'])
def callback():
    header = request.headers
    body = request.json
    if body["type"] == "message":
        talkbot.send_text_message(send_text=header["X-WORKS-BotNo"])
        return "", 200
    else:
        return "Error."


if __name__ == '__main__':
    app.run(host="127.0.0.1", port=5000)
Callback URLの指定場所

image.png

ローカルサーバーの外部公開が終わった後、Botに適当なテキストメッセージを送信し、返信メッセージ(BOT_NO)が来たら、Callback URLに指定したサーバーへのメッセージ転送(=受信)とBotからのメッセージ送信(=返信)は成功です。

参考

LINE WORKS 公式ドキュメント メッセージ受信 -Callback形式

2
3
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
3