Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@0yan

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

More than 1 year has passed since last update.

こんにちは、@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
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0yan
都内のICT企業で人事兼業務自動化・効率化担当してます。10月から経営企画として社内のDX推進を担当する予定です。【PyPI】https://pypi.org/project/lineworks/ 【GitHub】http://github.com/0yan

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
2
Help us understand the problem. What is going on with this article?