こんにちは
pythonでlinebotを作ったので作り方を共有したいと思います。
環境
・Windows10
・python3.7.3
Projectの構成
まず、作るアプリのフォルダの構造を紹介します。
Project |-main.py |-Procfile(拡張子いりません) |-request.txt |_.git
最終的にこのようになります。
今の段階ではProjectフォルダのみを用意してください。
Line APIの取得
まず、Line APIを取得します。↓にアクセスしてください。
リンクにアクセスしたら「今すぐ始めよう」をクリック。

LINEアカウントでログインします。

新規プロバイダーを作成します。名前はbotの名前ではなくてもいいです。

新規チャンネルの情報を打ち込みます。これが終われば登録はいよいよ終了です。

登録が完了したら、チャンネル基本情報にいきChannel Secretとアクセストークンをメモします。(後で使います)


pythonのコードを書く
Line APIを取得したら、次にpythonのコードを書いていきます。
…の前にflaskと line-bot-sdk をインストールしましょう。
まず、Powershell(ターミナル)でProjectフォルダに移動します。そして下記のコマンドを打ち込みます。
$ pip install flask $ pip install line-bot-sdk
成功したら、いよいよコードです。エディタで下記のコードをmain.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__) #環境変数取得 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("/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", 5000)) app.run(host="0.0.0.0", port=port)
(これはいじらなくていいです。)
僕は以下を参考(コピペ)にしました。

設定ファイルの作成
以下2つの設定ファイルを作成します。
1.Procfile
echo "web: python main.py" | Out-File Procfile -Encoding ascii
Procfileは文字化けすることがたまにあるのでこの方法でやってみましょう。
2.requirements.txt
pip freeze > requirements.txt
この2つのファイルを上のmain.pyと同じ階層に入れます。
この2つのファイル以外にもう一つruntime.txtというファイルを作成せよというサイトもありますが、ぼくはなぜかエラーが出てしまったので、runtime.txtをProjectに含めずにデプロイしました。環境次第では違うかと思うので参考として載せておきます。
Project |-main.py |-Procfile(拡張子いりません) |_request.txt
という感じに置きます。
herokuにログインする
登録・ログインはこちら⬇︎を参考にやりましょう。(所要時間10分)
登録が終わったら、herokuにログインします。Powershellでherokuをインストールしたディレクトリに移動し、
$ heroku login Enter your Heroku credentials: Email: XXX@XXX Password: ***
メールアドレスとパスワードを聞かれるので先ほど設定したものを打ち込みましょう。
アプリケーションの作成
次にProjectフォルダに行きアプリケーションを製作します。
$ heroku create <アプリケーション名>
環境変数
環境変数の設定をします。
Line APIの取得で取得したChannel-secretとアクセストークンの文字列をここで使います。
$ heroku config:set YOUR_CHANNEL_SECRET="Channel Secretの欄の文字列" --app <アプリケーション名> $ heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークンの欄の文字列" --app <アプリケーション名>
デプロイする(ネットに公開する)
ProjectフォルダをHerokuにデプロイします。簡単にいうとサーバーにアップしてだれでも使える状態にするということです。ここが最後の難関です。
HerokuにデプロイするにはGitのコマンドを使ってやる必要があります。
今回使うGitコマンドは「git init」「git add ~」「git commit -m “”」「git push」です。以下のようにしてデプロイしていきます。
$ git init $ git add . $ git commit -m "new commit" $ git push heroku master
簡単に説明すると、
まずgit initで.gitというフォルダ(リポジトリという)を作りデプロイしたいフォルダをgit add ~で指定します。今回は~を「.」としました。
これは今いるディレクトリ(今回はProjectフォルダ)すべてという意味です。
つぎにgit commit -m “”でフォルダを登録します。なんでaddとcommitで分けてるんだ…という感じですがこれにはちゃんと意味があります。
最後にgit pushでHerokuにデプロイします。
masterとは今回の場合ProjectフォルダのことでHerokuにProjectをpushしますよーということだと解釈しています。(間違っていたら指摘してください)
このような形でデプロイ出来たらもうすぐそこです。
Webhook
https://developers.line.me/console/ に戻り、Webhookの設定をします。
Webhook送信:利用する
Webhook URL:https://<アプリケーション名>.herokuapp.com/callback
と変更してください。
完成!
Webhookの下の方にあるQRコードを読み込んで友達登録しましょう。みごとにオウム返しをしたら完成です。おめでとうございます。

参考URL

コメント
Нelⅼo there, I found yⲟur blog by way of Ԍoogle whilst searching
for a comρarable subject, your wеbsite came up, it seems to
be good. І’ve bo᧐kmarked it iin my gooցle bookmarks.
Hi there, just become alert to yyour weblog via Google, and located thаt іt
is really informаtive. I’m gonna bbe caresful for brussels.
I’ll be grateful if уou happen to continue this in future.
A lot οf folks can be benefited froim yoսr writing.
Cheers!
Thank you for your message!!
Your comments were very encouraging for me.