Edited at

Heroku + Python(Flask)でオウム返しLINE bot

More than 1 year has passed since last update.


はじめに

LINEのMessaging APIを使ってとあるLINE botを作りたかったので、手始めとしてオウム返しのbotを作ってみました。


環境


  • Heroku

  • Python 3.6.4

  • Flask 0.12.2


前提


手順


Heroku設定ファイルの作成


  • Herokuで実行するコマンドを記述


Procfile

web: python parrot.py



  • 必要なパッケージを記述


requirements.txt

Flask==0.12.2

line-bot-sdk==1.5.0


  • 言語とバージョンを記述


runtime.txt

python-3.6.4



Herokuに環境変数の追加


  • Herokuへのログイン


terminal

$ heroku login

heroku: Enter your login credentials
Email:
Password:


  • アプリケーションの作成


terminal

$ heroku create <app_name>

Creating ⬢ <app_name>... done
https://<app_name>.herokuapp.com/ | https://git.heroku.com/<app_name>


  • 環境変数の追加


terminal

#チャンネル情報のアクセストークンを使用

$ heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="<Access Token>" --app <app_name>

#チャンネル情報のChannel Secretを使用
$ heroku config:set YOUR_CHANNEL_SECRET="<Channel Secret>" --app <app_name>



Webhookの設定

Channel基本設定からWebhookの設定を行います。

webhook.png


オウム返し用のコード作成

line-bot-sdk-pythonの使い方に書かれているコードを使用します。追加したHerokuの環境変数を使用、ポートの指定をしています。


parrot.py

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__)

#LINE Access Token
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
#LINE Channel Secret
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"))
app.run(host="0.0.0.0", port=port)



Herokuへのデプロイ


terminal

#初期化

$ git init

#コミットするファイルの追加
$ git add .

#コミット
$ git commit -m "first commit"

#デプロイ
$ git push heroku master



テスト

ちゃんと返してくれました。


まとめ

とりあえず動くものまでは完成しました。

次回以降で発展させていこうと思います。


参考