Python
Heroku
linebot

HerokuでLINE BOT(python)を動かしてみた

HerokuでLINE BOT(python)を動かしてみました。

公式で公開しているLINE BOTのサンプル(Flask Echo)をHerokuで動かしました。
https://github.com/line/line-bot-sdk-python
https://github.com/line/line-bot-sdk-python/tree/master/examples/flask-echo

LINE BOTを友だち登録してメッセージを送るとそのままメッセージが返ってくるサンプルです。
b.png

環境

CentOS7.2
heroku-cli/6.15.17
git version 1.8.3.1

前提

LINE@とHerokuのアカウントが必要です。

LINE@アカウントを作成。
https://at.line.me/jp/
ここから新規プロバイダー作成してチャンネル(Message API)を選択。
https://developers.line.me/console/
LINE Messaging APIのドキュメントです。
https://developers.line.me/ja/docs/messaging-api/overview/

Herokuアカウントを作成。
https://www.heroku.com/
デプロイするとここにアプリケーションが登録されます。
https://dashboard.heroku.com/apps

Heroku CLI(旧heroku toolbalt)インストール

公式サイトの手順でインストールします。CentOSなのでStandaloneでインストールしました。
https://devcenter.heroku.com/articles/heroku-cli#standalone

$ wget https://cli-assets.heroku.com/heroku-cli/channels/stable/heroku-cli-linux-x64.tar.gz -O heroku.tar.gz
$ tar -xvzf heroku.tar.gz
$ mkdir -p /usr/local/lib /usr/local/bin
$ sudo mv heroku-cli-v* /usr/local/lib/heroku
$ sudo ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku

実装

ここからサンプルコードをダウンロードしておきます。
https://github.com/line/line-bot-sdk-python

このようなディレクトリ構成になるように作成していきます。

heroku-line-bot
├── Procfile
├── main.py
└── requirements.txt

アプリケーションのディレクトリを作成する。
今回はアプリケーションの名前を「heroku-line-bot」として説明します。

$ mkdir heroku-line-bot
$ cd heroku-line-bot

作成したディレクトリに「Procfile」を作成します。

Procfile
web: python main.py

ダウンロードしたサンプルコードの「app_with_handler.py」をコピーして「main.py」にファイル名を変更します。
https://github.com/line/line-bot-sdk-python/blob/master/examples/flask-echo/app_with_handler.py

末尾の「if __name__ == __main__":」以下の行を次のように変更します。

app_with_handler.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)
main.py(抜粋)
if __name__ == "__main__":
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)

「requirements.txt」を作成します。

requirements.txt
line-bot-sdk
flask

作り終わったらコミットします。

$ git init
$ git add .
$ git commit -m "create new"

デプロイ

Herokuに「heroku-line-bot」アプリケーションを作成します。
すでに同じ名前が使われていたら適当な名前に変更して下さい。

Channel基本設定の「Channel Secret」と「アクセストークン」をHerokuの環境変数に設定します。
https://developers.line.me/console/

Herokuにpushします。

$ heroku login
$ heroku create heroku-line-bot
$ heroku config:set LINE_CHANNEL_SECRET="<Channel Secret>"
$ heroku config:set LINE_CHANNEL_ACCESS_TOKEN="<アクセストークン>"
$ git push heroku master

Webhook登録

Channel基本設定のWebhook URLにHerokuにデプロイしたアプリケーションのURL
https://heroku-line-bot.herokuapp.com/callback」を登録します。
※アプリケーションの名前を変更していたらURLも変わるので注意して下さい。
https://developers.line.me/console/

動作確認

Channel基本設定のQRコードを読み込んで友だち登録したらメッセージを送ります。
送ったメッセージが返ってきたら成功です。
https://developers.line.me/console/

うまくいかなかったらログを確認してみましょう。

$ heroku logs --tail

Herokuのアプリケーションを削除するときは次のようにします。

$ heroku apps:destroy --app heroku-line-bot --confirm heroku-line-bot

参考

以下のサイトを参考にさせていただきました。

LINE Messaging API + Python + Heroku でLINE Botを作る
http://cppx.hatenablog.com/entry/2017/10/31/165128