LoginSignup
2
2

More than 3 years have passed since last update.

Pythonでオウム返しをするLinebotのエラー対応

Posted at

はじめに

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
サイトに載っているコピペで構わないと思います。
特に書き換えは必要なくいけました。

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

と打つと、下記のファイルが作成されます。

Procfile
web: python main.py

これに気づくのに何時間かかったか。。。

次に、requirements
これは、requirements.txtです。
テキストエディタで下記のように作成します。

requirements.txt
Flask==1.1.1
line-bot-sdk==1.15.0

最後に、runtime
これも、runtime.txtです。
テキストエディタで下記のように作成します。

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

を入力するとエラー回避できました。

image.png

総括

エラーに関して、ファイルを準備する段階でタイプミスがほとんどでした。
ファイルを準備する際には、細心の注意を払い、大文字小文字などのスペルミスに注意して準備してください。

初めての投稿で、へたくそでしたが
最後までお読みいただきありがとうございました。
もう少し、きちんと書くべきでした。

この記事が少しでも誰かのお役に立てれば幸いです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2