質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1279閲覧

LineBot:webhookのverify時のエラー

Ki_

総合スコア1

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/07/31 06:19

編集2020/07/31 06:23

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

webhookの検証時には特殊なリクエストが飛んでくるのでそれに対処する必要があります。

event.replyTokenが00000000000000000000000000000000のイベントがリクエストされるので、そのリクエストが来たときは、okなど適当な文字を返してしまうようにすれば検証に通ります。

おそらく、エラーはヘッダーにX-Line-Signatureがないために起こっていると思います。

signature = request.headers['X-Line-Signature']

の前に前述の処理を入れると良いでしょう。

投稿2020/08/25 18:26

Arahabica

総合スコア209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ki_

2020/08/28 08:41

教えていただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問