#はじめに
QiitaやWEB上には、オウム返しLinebotの作り方は、たくさんあります。
参考
https://qiita.com/kro/items/67f7510b36945eb9689b
https://www.casleyconsulting.co.jp/blog/engineer/3028/
これらを参考に進めれば、基本作成完了しますが、
Herokuデプロイ時にエラーがたびたび発生し、私が初心者であるが故、エラー解消が結構大変でした。
なので、私が遭遇したエラーについて、対処法を記述していきます。
#開発環境
OS:Widows10
Python3.7.6
Flask1.1.1
line-bot-sdk1.15.0
#準備するファイル群
まず、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__)
app.debug = False
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():
signature = request.headers['X-Line-Signature']
body = request.get_data(as_text=True)
app.logger.info("Request body: " + 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__":
port = int(os.getenv("PORT"))
app.run(host="0.0.0.0", port=port)
次に、Procfile
ここで、かなり時間を食ってしまいました。
まず、ProcfileはProcfile.txtはダメで、拡張子は付けません。
普段、テキストエディタを使用する人は、下記コードを打って、txtファイルで保存してしまいがちです。
作り方は、ターミナルを開いて、
$ echo web: python main.py > Procfile
と打つと、下記のファイルが作成されます。
web: python main.py
これに気づくのに何時間かかったか。。。
次に、requirements
これは、requirements.txtです。
テキストエディタで下記のように作成します。
Flask==1.1.1
line-bot-sdk==1.15.0
最後に、runtime
これも、runtime.txtです。
テキストエディタで下記のように作成します。
python-3.7.6
これらのファイルを一つのフォルダにまとめれば、準備は完了です。
#デプロイ
LinemessagingAPI,Heroku,Gitのインストールや登録等は省略します。
ターミナルを開いて、先ほどのファイル群が存在するフォルダに移動します。
今回は、line_botというフォルダを作成しました。
$cd C:\Users\user\line_bot
デプロイします。
$ git init
$ git add .
$ git commit -m "new commit"
$ git push heroku master
#エラーについて
fatal: 'heroku' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
私の場合、アクセストークンと、チャンネルシークレットの入力がうまくできていなかったため、下記を実行
$ heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークンの欄の文字列" --app アプリケーション名
$ heroku config:set YOUR_CHANNEL_SECRET="Channel Secretの欄の文字列" --app アプリケーション名
Setting YOUR_CHANNEL_ACCESS_TOKEN and restarting ⬢ アプリケーション名... done, v13
YOUR_CHANNEL_ACCESS_TOKEN:
アクセストークンの欄の文字列
このように表示されれば登録されています。
次に、
Scaling dynos... !
! Couldn't find that process type (web).
この場合、
heroku ps:scale web=1
を入力するとエラー回避できました。
#総括
エラーに関して、ファイルを準備する段階でタイプミスがほとんどでした。
ファイルを準備する際には、細心の注意を払い、大文字小文字などのスペルミスに注意して準備してください。
初めての投稿で、へたくそでしたが
最後までお読みいただきありがとうございました。
もう少し、きちんと書くべきでした。
この記事が少しでも誰かのお役に立てれば幸いです。