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](https://qiita-image-store.s3.amazonaws.com/0/112075/4f38edfc-92fa-3bff-037b-04f85bdd049e.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

```bash:
$ 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

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

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

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

```bash:
$ 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__":`」以下の行を次のように変更します。

```py3: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)
```

```py3: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
```

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

```bash:
$ git init
$ git add .
$ git commit -m "create new"
```

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

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

Herokuにpushします。

```bash:
$ 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/

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

```bash:
$ heroku logs --tail
```

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

```bash:
$ 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