前提・実現したいこと
Talk APIを利用したLineBotを作りたい。
webhookのverifyを実行中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Error The webhook returned an HTTP status code other than 200
該当のソースコード
Python
1import pya3rt 2 3from flask import Flask, request, abort 4 5from linebot import ( 6 LineBotApi, WebhookHandler 7) 8from linebot.exceptions import ( 9 InvalidSignatureError 10) 11from linebot.models import ( 12 MessageEvent, TextMessage, TextSendMessage, 13) 14 15app = Flask(__name__) 16 17line_bot_api = LineBotApi('hogehoge') 18handler = WebhookHandler('hogehoge2') 19 20 21@app.route("/callback", methods=['POST']) 22def callback():#コールバック関数は、ある関数Aに引数として渡す別の関数B 23 # get X-Line-Signature header value 24 signature = request.headers['X-Line-Signature']#ここでうまくいってない 25 26 # get request body as text 27 body = request.get_data(as_text=True) 28 app.logger.info("Request body: " + body) 29 30 # handle webhook body 31 try: 32 handler.handle(body, signature) 33 except InvalidSignatureError: 34 print("Invalid signature. Please check your channel access token/channel secret.") 35 abort(400) 36 return 'OK' 37 38@handler.add(MessageEvent, message=TextMessage) 39def handle_message(event): 40 # リプライを作成する 41 reply = create_reply(event.message.text) 42 line_bot_api.reply_message( 43 event.reply_token, 44 # 実際にcreate_replyの返り値をTextMessageの引数として渡してます。 45 TextSendMessage(text=reply)) 46 47def create_reply(user_text): 48 apikey = 'hogehoge3' 49 client = pya3rt.TalkClient(apikey) 50 res = client.talk(user_text) 51 return res['results'][0]['reply'] 52 53if __name__ == "__main__": 54 app.run() 55
試したこと
@app.route("/index", methods=['POST']) def index(): return 'OK'
と/callback部分を書き換えたらwebhookの認証が上手く行ったので、callback関数内に問題がありと判断し、一行ずつ実行しました。その際下記コードで
signature = request.headers['X-Line-Signature']
RuntimeError: Working outside of request context. This typically means that you attempted to use functionality that needed an active HTTP request. Consult the documentation on testing for information about how to avoid this problem.
上記エラーが出ており、ここが問題かなと考えておりますが、このエラーに対する対処法がわかりません。わからない理由としては
1)request contextの概念が理解できていない。 outsdieとは?等
2)callback関数の理解不足
かなと自分では思っております。
webの知識が全然理解できておらず、お手数をおかけしますがご教示いただけますと幸いです。
実行環境
MacOS 10.15.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/28 08:41