LINEbotでハマったこと

#LINEbotでハマった！

私がLINE botを作成する際にハマったことを書いていきます。
なお私は、全くの初心者なので当たり前のことにもハマったりしてます...orz

##LINEbotを作るきっかけ

天気予報とかを見る際わざわざサイトに行って確認したりアプリをインストールするのがめんどくさい
なら、いつも使うLINEで確認出来れば良くない？？
っていう単純な思考でつくりました。
あと、なんか**楽しそう(ここ重要)**

###まずは必要なもののインストール

>[Python + HerokuでLINE BOTを作ってみた](https://qiita.com/shimajiri/items/cf7ccf69d184fdb2fb26)

ここを参考にさせて頂きました。

###line developersの登録

LINEbotを使用するためにはまず、developersに登録する必要があります。

>[LINE developers](https://developers.line.biz/ja/services/messaging-api/)

こちらにアクセスして登録していきます。

そしてログインします。

恐らく、LINEのアカウントはあると思うのでそのままログインしてください。

次にプロバイダーを作成します。

プロバイダーを作成した後に、チャンネルを作成してください。

チャンネルの設定項目は

|項目|内容|
|:---|:---:|
|チャンネルアイコン(任意)|LINEのトーク画面等、（LIFFを作成していた場合は）アイコン|
|チャネル名|LINEのトーク画面等|
|チャネル説明|（LIFFを作成していた場合のみ）LIFF起動時の権限の同意画面|
|プライバシーポリシーURL（任意）| （LIFFを作成していた場合のみ）LIFF起動時の権限の同意画面|
|サービス利用規約URL（任意）| （LIFFを作成していた場合のみ）LIFF起動時の権限の同意画面|

となります。

適当に任意の部分は無視しても大丈夫です。

とりあえず、ここまでで大丈夫です。

詳しくは、公式が用意してあるドキュメントがわかりやすいです。
>[Messaging APIを始めよう](https://developers.line.biz/ja/docs/messaging-api/getting-started/)

###Heroku CLIのインストール

>[Heroku](https://devcenter.heroku.com/articles/heroku-cli#download-and-install)

こちらより、自分の環境にあったインストーラをダウンロードしてインストールしてください。

今回は、win10の64bitを使用しました。

インストールしてる間にアカウントの登録をしていきます。

>[Heroku sign-up](https://signup.heroku.com/jp)

こちらより新規アカウントを作成しておきます。

###line-bot-sdk、flaskをインストール

これは簡単で

```python
pip3 install flask
pip3 install line-bot-sdk
```
とpipでインストールするだけです。
なおPythonをインストールしていない場合は、
>[Let'sプログラミング](https://www.javadrive.jp/python/install/index1.html)
のようなサイトを参考にしてください。

###Gitのインストール

Herokuへデプロイするためにはgitを使用するのでgitをインストールしておく必要があります。

>[Git for windows](https://gitforwindows.org/)
こちらへアクセスしDownloadボタンをクリックし、インストーラをダウンロードします。

ダウンロードが終了したら、インストーラを実行します。
![29B58691-767D-4BCA-BB25-27A86F41AD21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1084345/79c43454-6b56-66de-c97a-21b8b3709037.png)
GPLライセンスが表示されるので同意してNext
![8A00E3E1-FEBC-433C-9605-4856A07C7DDD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1084345/e43b2cdb-429a-cf77-e208-53574f00c904.png)
インストール先のフォルダを指定してNext
![01383DB5-256D-4432-BDD3-8E5719E29D3B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1084345/6c7503e6-227c-99e2-af8b-ab3c0c29e0a5.png)
次にインストールするコンポーネントを選択しNext
![C6554E2C-EC82-4460-965E-9521806C82E0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1084345/df3059db-bcfc-6b3b-8322-05a80aa83054.png)
スタートメニューに登録するフォルダ名を決めてNext
作成しない場合は画面下のDon't create Start Menu folderにチェックをいれる。
![5037A423-D0E3-48C6-823D-1A4BDB9D0110.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1084345/8385800b-c858-8810-9d4a-beab6faeab6e.png)
標準のエディタを選択、デフォルトでは「Use Vim」が選択されています。特にこだわりがなければそのままNext
![67531962-5FE6-400E-8AA3-71938F47284C.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1084345/69aed849-29bb-7200-0502-07c2dfe00894.png)
OpenSSLは使用しないのでWindowsSecureの方を選択してもらえれば大丈夫です。
![87E5BECA-3779-487D-8259-6A85474ECB68.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1084345/38febd4c-5c1d-4deb-5235-8d365c2e2b09.png)
改行コードの設定です。
一応上から順に、
Checkout Windows-style, commit Unix line endings
チェックアウト時に改行コードをCRLFに変換、コミット時にはすべてLFに変換する。
Checkout as-is, commit Unix line endings
チェックアウト時に改行コードは何もしない、コミット時にはすべてLFに変換する。
Checkout as-is, commit as-is
チェックアウト時にもコミット時にも改行コードは何も変換しない。
となってます。
特にこだわりがなければ1番上でNext
![4A9A942C-A85F-4545-BC20-4E2770EE50B5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1084345/48f2ab70-3c45-2c2d-1d7f-ea7f35a08990.png)
Gitで使用するコンソールの設定です。
CMDを使用するので、下のWindowsdefault〜を選択してNext
![EAED0FAE-EE38-4C99-9C4B-C7A139B0A25C.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1084345/7e8e2633-a4cc-a285-c9ef-91b195008df2.png)
Gitでプルする際の設定です。
特にこだわりがなければ、そのままNextで大丈夫です。
![52DECC61-95AB-445A-8D2A-F0DFCD285FE5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1084345/da4c6654-6a5e-ecab-7c2c-c78b1c289e8c.png)
HTTPS経由でGitを使用する場合の、認証情報ヘルパーを選択します。使用することでユーザー名やパスワードがキャッシュされ、都度入力する手間を省くことができます。特にこだわりがなければそのままNext
![52A0E217-5914-48A7-ACDA-17A46328C62B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1084345/0db8aad3-2305-eb6f-5be1-fe76e83d4b82.png)
オプションの選択になります。好みにあわせてどうぞ。

あとはinstallをクリックして完了です。

##必要なファイルを用意する

Linebotを動かすためには
main.py
runtime.txt
requirements.txt
Procfile
の4つのファイルを用意し、全ておなじディレクトリに保存します。
ここではLinebotというフォルダに4つのファイルを入れておきます。

今回はオウム返しするbotを作ります。

```python:main.py
from flask import Flask, request, abort
import os

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

app = Flask(__name__)

#環境変数取得
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)

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

@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)
}
```

```txt:requirements.txt 
Flask==自分のバージョン
line-bot-sdk==自分のバージョン
```

```txt:runtime.txt
python-自分のバージョン
```

Procfile
web: python main.py

バージョンを確認する時は

```
flask --version
```

で確認するのが早いと思います。

##Herokuの設定

CMDにて

```
heroku login
```
を実行

ブラウザが表示されHerokuのログイン画面が出るのでログインしてブラウザを閉じると、CMD上にてログインされていることになります。

続いて

```
heroku create {自分のアプリケーション名}
```

を実行する。
この時アプリケーションの名前が他の人と被るとエラーになります。

```
heroku config:set YOUR_CHANNEL_SECRET="Channel Secretの文字列" --app {自分のアプリケーション名}
$ heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークンの文字列" --app {自分のアプリケーション名}
```

を実行

アクセストークンとchannel Secretは

Line developersより確認すること！

###webhookの設定

続いてLine developersよりwebhookの設定をします。

Herokuで作成したアプリケーション名でURLを

https://<自分のアプリケーション名>.herokuapp.com/callback

のようにします。

webhookの利用設定は利用するを選択します。

###いざデプロイ

先にCMDで、先程作成したlinebotフォルダに移動します。

```bat:cmd
cd linebot
```

続いて以下のコマンドを実行していきます。

```bat:cmd
git init
heroku git:remote -a アプリケーションの名前
git add .
git commit -am "メッセージ"
git push heroku master
```

これでデプロイは完了です。

##確認する

あとは作ったLINE botを友達追加してオウム返しするか確認しましょう
上手くできてればオウム返しされるはずです。

###ハマったところ

デプロイが上手くできなかった