こんにちは、@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を取り出し、それをメンバーに送信(=返信)しました。
これ(↓)がイメージです。
イメージ図
メッセージの転送自体は、BotにCallback URL(今回はローカルサーバーを外部公開するためにngrokで生成したURL)を指定するだけなのでとても楽でした。
手順
- Flaskでローカルサーバーを構築後、ngrokで外部公開(参考:【備忘録】ngrokの使い方)
- LINE WORKS Developer Consoleで、BotのCallback URLに1で得たURL/callbackを指定※httpsを使用
- テスト(メンバーから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の指定場所
ローカルサーバーの外部公開が終わった後、Botに適当なテキストメッセージを送信し、返信メッセージ(BOT_NO)が来たら、Callback URLに指定したサーバーへのメッセージ転送(=受信)とBotからのメッセージ送信(=返信)は成功です。