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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Flask

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

Python

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

Q&A

1回答

7015閲覧

LINEのbotに1度に複数の返答をさせたい

pussy_pussy

総合スコア22

Flask

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

Python

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

0グッド

0クリップ

投稿2020/08/20 10:13

前提・実現したいこと

LINEbotに複数のメッセージを返信させること。PythonとFlaskを使用。
公式ドキュメントは次の通り。

messagesにArray of とあるので、array型に入れてみたが、ダメだった。
タプル型でもダメだった
#Send reply message
Sends a reply message in response to an event from a user, group, or room.

To send reply messages, you must have a reply token which is included in a webhook event object.

Webhooks are used to notify you when an event occurs. For events that you can respond to, a reply token is issued for replying to messages.

Because the reply token becomes invalid after a certain period of time, responses should be sent as soon as a message is received. Reply tokens can only be used once.

#HTTP request
POST https://api.line.me/v2/bot/message/reply

#Request headers
Content-Type
application/json

Authorization
Bearer {channel access token}

#Request body
###replyToken
String Required
Reply token received via webhook

###messages
Array of message objects Required
Messages to send
Max: 5

###notificationDisabled
Boolean Optional
true: The user doesn't receive a push notification when the message is sent.
false: The user receives a push notification when the message is sent (unless they have disabled push notifications in LINE and/or their device).
Default: false

#Response
Returns status code 200 and an empty JSON object.

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

LINEbotからの返答がない

該当のソースコード

Python3

1rom flask import Flask, request, abort 2import os 3 4from linebot import ( 5 LineBotApi, WebhookHandler 6) 7from linebot.exceptions import ( 8 InvalidSignatureError 9) 10from linebot.models import ( 11 MessageEvent, TextMessage, TextSendMessage, 12) 13 14app = Flask(__name__) 15 16# オリジナルの処理 17# line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN') 18# handler = WebhookHandler('YOUR_CHANNEL_SECRET') 19 20#環境変数取得 21YOUR_CHANNEL_ACCESS_TOKEN = 'PxQ8K7uaYUpJHNRK5PpnKIfeK5oZIAwJBMlgnKfQaRKax6oPNCHdnGo1jw71Lqan4ar7XAzQ3BWIS6POKWF23ZIhr/WjOkjV0VeozwlDmYI7ixJ3rsQG7Er2UUwKTOK1jgOfRFahTD8sKZoh/ncQagdB04t89/1O/w1cDnyilFU=' 22YOUR_CHANNEL_SECRET = 'e306c77e21315b35232da87cbefc45ad' 23 24line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN) 25handler = WebhookHandler(YOUR_CHANNEL_SECRET) 26 27@app.route("/callback", methods=['POST']) 28# the region of Flask. 29def callback(): 30 # get X-Line-Signature header value 31 signature = request.headers['X-Line-Signature'] 32 33 # get request body as text 34 body = request.get_data(as_text=True) 35 app.logger.info("Request body: " + body) 36 37 # handle webhook body 38 try: 39 handler.handle(body, signature) 40 except InvalidSignatureError: 41 abort(400) 42 43 return 'OK' 44 45# when a message comes from a user 46@handler.add(MessageEvent, message=TextMessage) 47def handle_message(event): 48 line_bot_api.reply_message( 49 event.reply_token, 50 TextSendMessage(text=#ここの形が分からない) 51 ) 52 53 54if __name__ == "__main__": 55 #app.run() 56 port = int(os.getenv("PORT")) 57 app.run(host="0.0.0.0",port=port)

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

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

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

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

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

guest

回答1

0

ほぼ一年前の質問ですのですでに解決されているかもしれませんが...

複数のメッセージを返す場合にはTextSendMessageのtext引数に文字列のリストを渡すのではなく
TextSendMessageのtext引数には文字列を渡し
line_bot_api.reply_messageの引数にTextSendMessageのリストを渡すことで実装できると思います。
以下のような形で値を渡すように変更してみてください。

Python

1#NG 2line_bot_api.reply_message( 3 event.reply_token, 4 TextSendMessage(text=['メッセージ1', 'メッセージ2']) 5) 6 7#OK 8line_bot_api.reply_message( 9 event.reply_token, 10 [TextSendMessage(text='メッセージ1'), TextSendMessage(text='メッセージ2')] 11)

投稿2021/07/22 04:54

Alma-field

総合スコア108

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問