Help us understand the problem. What is going on with this article?

Python(Flask) + Heroku + LINE Messaging API でオウム返しのチャットBOTを作ってみた

はじめに

今回はPythonを使ってLINEのチャットボットを作ってみました。
WEBアプリのフレームワークとしてFlaskを使用しました。
Djangoってのが有名らしいのですが、簡単なものはFlaskのがいいらしいので、これを使ってみました。
けっこうハマって少しくじけかけたので、備忘録に残します。

環境準備

$ pip install flask
$ pip install line-bot-sdk

※FlaskとLINE BOT SDKをインストールする

LINEアプリの作成

LINE Developersにてチャネルを作成する

https://developers.line.biz/ja/
Messaging APIチャネルを作成する
※こちらは割愛します

LINEのWebhookの設定

Webhook送信を「利用する」に変更する

Webhook URLに以下を入れる

https://{アプリ名}.herokuapp.com/callback

※まだコードをデプロイしてないので接続確認で失敗するけど、問題ない

自動応答メッセージを「利用しない」に変更する

Messaging APIでのアプリ実装

サンプルコードのDL

$ git clone https://github.com/line/line-bot-sdk-python

必要なファイルを準備

app.py

サンプルコードから
「line-bot-sdk-python -> sample -> flask-echo -> app_with_handler.py」
をコピーしてきて、名前を変更する

requirements.txt

requirements.txt
$ pip freeze > requirements.txt

使用するライブラリを記載する

runtime.txt

runtime.txt
python-3.7.1

※使用しているpythonと同じバージョンで良い
※バージョンの確認方法は $ python -V

Procfile

web: python app.py

プログラムと実行方法を記載する

app.pyを一部書き換える

app.py
・・・ 省略 ・・・

if __name__ == "__main__":
    arg_parser = ArgumentParser(
        usage='Usage: python ' + __file__ + ' [--port <port>] [--help]'
    )
    arg_parser.add_argument('-p', '--port', default=8000, help='port')
    arg_parser.add_argument('-d', '--debug', default=False, help='debug')
    options = arg_parser.parse_args()

    app.run(debug=options.debug, port=options.port)

app.py
・・・ 省略 ・・・

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

herokuの設定

herokuのCLIをインストール

$ brew tap heroku/brew && brew install heroku

※herokuコマンドが使えるようになる

プロジェクトを作成

$ heroku create アプリ名

プロジェクトの利用開始

$ heroku addons:create fixie:tricycle --app アプリ名

各種トークンをHerokuの環境変数に登録

$ heroku config:set LINE_CHANNEL_SECRET="Channel Secretの欄の文字列" --app アプリ名
$ heroku config:set LINE_CHANNEL_ACCESS_TOKEN="アクセストークンの欄の文字列" --app アプリ名

環境変数の設定確認

$ heroku config

「LINE_CHANNEL_SECRET」と「LINE_CHANNEL_ACCESS_TOKEN」が正しく設定されていればOK

実装したコードのデプロイ

$ git init
$ git remote add heroku https://git.heroku.com/アプリ名.git
$ git add -A
$ git commit -m "first commit"
$ git push heroku master

所感

herokuの利用に際して、--app アプリ名がなかったことで少しハマりました。
エラー見ると、書いてるのでちゃんと読みましょうねって話ですね笑

あと、LINE側のWebhookの接続の確認でエラーになるんですけど、なんか動くっていうちょっと怪しげな状況です。
herokuのログは以下のコマンドで確認できます。

$ heroku logs --tail --app アプリ名

しかし、herokuクソ便利ですね。
さくらのレンタルサーバーで最初頑張ろうとしてたんですけど、SSLの設定は必要だし、pyenvを入れるのにちょっとコツが必要だったり、色々めんどくさかったです。

なので、モック作るぐらいのノリだったら断然herokuですね。
これからもっと積極的に使っていこうと思いました。

Why do not you register as a user and use Qiita more conveniently?
  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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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