酒とITと私

PythonのFlaskでLINEのチャットbotを作る~オウム返し~

定期的に開催している勉強会でPythonでLINEのチャットbotを作るのでそれようの手順。LINEのbotを作るためのPythonのSDKを使って、Flaskを使って、ngrokでローカルを外部に公開してなんちゃってチャットbotを作る感じ。LINEのbot用のアカウントは持っている前提なので、ない人はLINEのチャットBotを作る – まずはオウム返しらへんを参考にしながら、アカウントの作成をお願いします!

スポンサーリンク

Pythonのインストール

何はともあれPythonが入ってないと始まらんだろう!その通り!!この辺参考にしてPythonインストールしてください!笑

windows:Windows10で始めるPython3

Mac:MacにPython3をインストールし環境構築【決定版】

Flaskのインストール

今回はFlaskというPythonのフレームワークを使います。Flaskのインストールはこの辺からどうぞ。

Flask:発作的にFlask入門(Windows)

LINE bot開発用のSDKをインストール

Python用のLINE bot開発SDKはこちらのGitHubにあります。まず、仮想環境に入った状態で、line-bot-sdkをインストールします。

pip install line-bot-sdk

仮想環境に入った状態とは、↑の発作的にFlask入門(Windows)の記事で、Flaskをインストールしたフォルダでactivateを実行して、

こんな雰囲気になっているときです。(venv)の中の文字はインストールしたフォルダによって変わります。

コーディング

問題なくインストールが完了すれば、さっそくコーディングを行います。ファイルは、僕の場合は、C:\practice\flask\line_sdk_testのフォルダに作成しました。ソースはこんな感じです。GitHubほぼそのままですが、若干コメントを追加しています。

from flask import Flask, request, abort

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

app = Flask(__name__)

# 自分のLINE botのデータを設定する。
line_bot_api = LineBotApi('アクセストークン')
handler = WebhookHandler('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()

アプリケーションを実行する

さっきと同じ画像ですが、雰囲気下記のような感じで実行できます。

setするときに、Pythonファイルがカレントディレクリにないとめんどくさいので、作ったPythonファイルを置いてあるフォルダで仮想環境に入ることをお勧めします。

公開する

以前どこかで触れた気がしますが、LINEのチャットbotはアプリケーションが動くサーバーがhttpsで通信できる必要があります。ですので、今アプリが動いている環境(ここまでの手順を実行してきた環境、おそらく自分のPC)を外部にhttpsで公開する必要があります。そういったときに便利なツールがngrokです。ngrokのインストールはこちらを参照。

ngrok:ngrokの使い方(windows, mac)

この手順のVagrantfileを編集みたいなやつってやる必要あるんですかね?わいがWindowsやからいらんだけ?

まあ、とりあえず、ngrokをダウンロードして、解凍して、解凍したフォルダ内でコマンドプロンプトを立ち上げ(Windowsなら、そのフォルダを開けた状態でAlt + Dそして、cmdとフォルダの上のウィンドウに入力する)、下記のコマンドを実行します。

ngrok http 5000

これは、ngrokさん5000番のポートをhttpで解放してくださいや、という意味です。httpでやっておけば、httpsもやってくれます。5000番はFlaskのアプリケーションを実行するときにデフォルトで使うポートです。で、上記のコマンドを実行すると、こんな感じになるかと思います。

ここに出ている、https://515d5ef9.ngrok.io、というURLで、今自分のPCの5000番のポートが解放されているということになります。

LINE botへの設定

LINEのbotへのURLの設定などは、LINEのチャットBotを作る参照してください!ちなみに、Webhook URLに設定するのは、先ほどngrokで出てきたURLの後ろに/callbackを付けたものです。上の例だと、https://515d5ef9.ngrok.io/callback こんな感じになります。

以上で、PythonのFlaskでオウム返しのLINE botが完成です!