ぺーぺーSEのテックブログ

備忘録用メモサイト

RSSを購読する

LINEチャットボットをFlaskとngrokで

Flaskngrok でメッセージをオウム返しする LINE のチャットボットを作ってみた。
Heroku で公開したい場合は以下参照。

セットアップ

1
2
$ pip install Flask gunicorn line-bot-sdk
$ brew cask install ngrok

ソースコード

app.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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_api = LineBotApi('アクセストークン')
handler = WebhookHandler('Channel Secret')

@app.route("/")
def hello_world():
return "hello world!"

@app.route("/webhook", methods=['POST'])
def webhook():
# 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()

Procfile

1
web: gunicorn -b 0.0.0.0:$PORT app:app --log-file=-

requirements.txt

1
2
3
Flask==0.12.2
gunicorn==19.7.1
line-bot-sdk==1.5.0

runtime.txt

1
python-3.6.2

起動

ローカルでAP起動

1
2
3
$ FLASK_APP=app.py flask run
* Serving Flask app "app"
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

ngrokで公開

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ ngrok http 5000
ngrok by @inconshreveable (Ctrl+C to quit)

Session Status online
Version 2.2.8
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://8eeb5441.ngrok.io -> localhost:5000
Forwarding https://8eeb5441.ngrok.io -> localhost:5000

Connections ttl opn rt1 rt5 p50 p90
2 0 0.02 0.01 0.01 0.01

HTTP Requests
-------------

GET /favicon.ico 404 NOT FOUND
GET / 200 OK

なお好きなホスト名をつけたい場合は、ngrokの有料サービスを利用する必要がある模様。