LINE Botの開発 (Python編)/オウム返しのBotの作成

知人がLINE Botを開発しているので便乗して勉強し始めた.備忘録的なもの.

とりあえず,最初に最も簡単なオウム返しのBotを作成する.

作成に当たり,Qiitaのこちらの記事をとても参考にさせていただいた.ここに謝意を示す.

開発環境

  • OS: Windows 10 64bit
  • 言語: Python 3.8.0
  • IDE: PyCharm
  • Paas: Heroku

行ったこと

  • LINE Developersのアカウントの作成
  • Pythonのセットアップ
  • 送信したメッセージと同一のメッセージを返すbotをPythonで実装
  • Herokuアカウントの作成とデプロイ

LINE Developersのアカウント作成

公式サイトから登録する.基本的には参考サイトの通りに登録する.

注意点としては,botのあいさつメッセージと応答メッセージを切り,Webhookはオンにする必要がある.

Pythonのセットアップ

Pythonのインストールはここでは割愛.

用いるパッケージは以下の二つ

Flask==1.1.1
line-bot-sdk==1.14.0

pipを用いるときは,

$ pip3 install flask
$ pip3 install line-bot-sdk

で,

PyCharmを用いるときはここを参照.

Pythonを用いて実装

サンプルコードがGitHubにあるが,少々いじる(コードはここと同じ)

from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)
import os

app = Flask(__name__)

#環境変数取得
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)

@app.route("/callback", methods=['POST'])
def callback():
    # get X-Line-Signature header value
    signature = request.headers['X-Line-Signature']

    # get request body as text
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)

    return 'OK'


@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))


if __name__ == "__main__":
#    app.run()
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)

Herokuアカウントの作成とデプロイ

公式サイトからアカウントを作成する.指示に従うのみなので大丈夫.

コマンドライン上でHerokuを動かすため,ここからHeroku CLIをダウンロードする.

コマンドプロンプトを起動し,Herokuを起動する.

$ heroku login

これで,ブラウザが立ち上がりログインできる.

次に,アプリを作成する.

$ heroku create <アプリの名前>

続いて,環境変数の設定(各変数はLINE Developersから見ることが可能)

$ heroku config:set YOUR_CHANNEL_SECRET="Channel Secretの欄の文字列" --app <アプリの名前>
$ heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークンの欄の文字列" --app <アプリの名前>

設定ファイルを作成.

python-3.8.0

を【runtime.txt】に書いて保存

Flask==1.1.1

line-bot-sdk==1.14.0

を【requirements.txt】に書いて保存

web: python main.py

を【Procfile】に書いて保存

次に,Herokuにデプロイ

$ git init
$ git add .
$ git commit -m "new commit"
$ git push heroku master

最後に,Webhookの設定をここから行う.Webhook送信を【利用する】にする.

Webhook URLは【https://<アプリの名前>.herokuapp.com/callback】にする.

設定の画面にQRコードがあるのでbotを友達に追加し,メッセージを送ってみる.

送ったメッセージと同じメッセージが来たらOK!