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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

284閲覧

bluemix上でline botとの通信エラー

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/08/12 12:46

編集2022/01/12 10:55

前提・実現したいこと

BlueMix上でラインAPIとTalkApiを連携させようとしています。

発生している問題・エラーメッセージ

LineDevelopersのWevhook URLを入力し、接続確認ボタンを押下した時のメッセージです。

2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR -------------------------------------------------------------------------------- 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR INFO in server [server.py:51]: 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR Request body: { 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "events": [ 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR { 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "replyToken": "00000000000000000000000000000000", 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "type": "message", 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "timestamp": 1534077722092, 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "source": { 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "type": "user", 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "userId": "Udeadbeefdeadbeefdeadbeefdeadbeef" 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR }, 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "message": { 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "id": "100001", 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "type": "text", 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "text": "Hello, world" 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR } 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR }, 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR { 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "replyToken": "ffffffffffffffffffffffffffffffff", 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "type": "message", 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "timestamp": 1534077722092, 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "source": { 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "type": "user", 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "userId": "Udeadbeefdeadbeefdeadbeefdeadbeef" 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR }, 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "message": { 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "id": "100002", 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "type": "sticker", 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "packageId": "1", 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR "stickerId": "1" 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR } 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR } 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR ] 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR } 2018-08-12T21:42:02.79+0900 [APP/PROC/WEB/0] ERR -------------------------------------------------------------------------------- 2018-08-12T21:42:03.33+0900 [APP/PROC/WEB/0] ERR 198.11.228.42 - - [12/Aug/2018 12:42:03] "POST /callback HTTP/1.1" 200 - 2018-08-12T21:42:03.33+0900 [APP/PROC/WEB/0] OUT Unexpected error: <class 'linebot.exceptions.LineBotApiError'> 2018-08-12T21:42:03.33+0900 [RTR/7] OUT Dlinedialogue.mybluemix.net - [2018-08-12T12:42:02.782+0000] "POST /callback HTTP/1.1" 200 722 2 "-" "LINE-Developers/0.1" "10.107.72.243:33104" "198.23.123.249:64561" x_forwarded_for:"203.104.156.76, 10.107.72.243" x_forwarded_proto:"https" vcap_request_id:"a92670be-79f3-4551-4c0d-8e58395a33f4" response_time:0.551764923 app_id:"b948f14b-2a48-4f85-93bc-eaecac877e18" app_index:"0" x_global_transaction_id:"3912551503" true_client_ip:"-" x_b3_traceid:"49e36b24e4c6a2b1" x_b3_spanid:"49e36b24e4c6a2b1" x_b3_parentspanid:"-" 2018-08-12T21:42:03.33+0900 [RTR/7] OUT

次は、Botにメッセージを送った時のメッセージです。

2018-08-12T21:43:25.61+0900 [APP/PROC/WEB/0] ERR -------------------------------------------------------------------------------- 2018-08-12T21:43:25.61+0900 [APP/PROC/WEB/0] ERR INFO in server [server.py:51]: 2018-08-12T21:43:25.61+0900 [APP/PROC/WEB/0] ERR Request body: {"events":[{"type":"message","replyToken":"22d9d7c65f0d4cbb8b2a6a205c2713c2","source":{"userId":"U74da6e56c87fb63b5c7237adbfcccc6e","type":"user"},"timestamp":1534077804957,"message":{"type":"text","id":"8408274310456","text":"メッセージ送信"}}]} 2018-08-12T21:43:25.61+0900 [APP/PROC/WEB/0] ERR -------------------------------------------------------------------------------- 2018-08-12T21:43:25.84+0900 [APP/PROC/WEB/0] OUT Unexpected error: <class 'linebot.exceptions.LineBotApiError'> 2018-08-12T21:43:25.84+0900 [APP/PROC/WEB/0] ERR 169.55.202.148 - - [12/Aug/2018 12:43:25] "POST /callback HTTP/1.1" 200 - 2018-08-12T21:43:25.84+0900 [RTR/8] OUT Dlinedialogue.mybluemix.net - [2018-08-12T12:43:25.606+0000] "POST /callback HTTP/1.1" 200 253 2 "-" "LineBotWebhook/1.0" "10.142.73.5:10710" "198.23.123.249:64561" x_forwarded_for:"203.104.146.154, 10.142.73.5" x_forwarded_proto:"https" vcap_request_id:"a713b846-9895-4cba-4c2f-d0b49dfc12c1" response_time:0.238081235 app_id:"b948f14b-2a48-4f85-93bc-eaecac877e18" app_index:"0" x_global_transaction_id:"735602563" true_client_ip:"-" x_b3_traceid:"e42e7210efacee03" x_b3_spanid:"e42e7210efacee03" x_b3_parentspanid:"-" 2018-08-12T21:43:25.84+0900 [RTR/8] OUT

該当のソースコード

from cloudant import Cloudant from flask import Flask, render_template, request, jsonify, abort import cf_deployment_tracker import os,sys import json import urllib.request, urllib.parse from linebot import ( LineBotApi, WebhookHandler,WebhookParser ) from linebot.exceptions import ( InvalidSignatureError ) from linebot.models import ( MessageEvent, TextMessage, TextSendMessage, ) # Emit Bluemix deployment event cf_deployment_tracker.track() app = Flask(__name__) config_file = open('config.json' , 'r') config = json.load(config_file) talk_api_key = config["talkApiKey"] line_channel_token = config["lineChannelToken"] line_channel_secret = config["lineChannelSecret"] # On Bluemix, get the port number from the environment variable PORT # When running this app on the local machine, default the port to 8080 port = int(os.getenv('PORT', 8080)) line_bot_api = LineBotApi(line_channel_token) handler = WebhookHandler(line_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) parser = WebhookParser(line_channel_secret) app.logger.info("Request body: " + body) try: events = parser.parse(body, signature) for event in events: if not isinstance(event, MessageEvent): continue if not isinstance(event.message, TextMessage): continue line_bot_api.reply_message( event.reply_token, TextSendMessage(text=event.message.text) ) except: # handle all exception print("Unexpected error:", sys.exc_info()[0]) return 'OK' @handler.add(MessageEvent, message=TextMessage) def handle_message(event): data = { "apikey": talk_api_key, "query": event.message.text } data = urllib.parse.urlencode(data).encode("utf-8") with urllib.request.urlopen("https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk", data=data) as res: #response = res.read().decode("utf-8") reply_json = json.loads(res.read().decode("unicode_escape")) if reply_json['status'] == 0: reply = reply_json['results'][0]['reply'] line_bot_api.reply_message( event.reply_token, TextSendMessage(text=reply)) if __name__ == '__main__': app.run(host='0.0.0.0', port=port, debug=True)

試したこと

下記のオウム返しボットをryuta46さんのソースを参考に修正しました。

from flask import Flask, request, abort from linebot import ( LineBotApi, WebhookHandler ) from linebot.exceptions import ( InvalidSignatureError ) from linebot.models import ( MessageEvent, TextMessage, TextSendMessage, ) app = Flask(__name__) 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()

補足情報(FW/ツールのバージョンなど)

python3.6.6
Flask0.11.1
cf-deployment-tracker1.0.2
cloudant2.4.0
line-bot-sdk1.8.0

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問