Q&A

CarouselTemplate が実際の公式LINE上で表示されない問題

前提・実現したいこと

・ユーザーが「よろしくお願いします」を入力 → テキストメッセージを返信(これはできた) ・ユーザーが「わかりました」を入力 → カルーセルメッセージを返信(これができない) ・どなたかカルーセルメッセージが返信されるようにご教示お願いします

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

・エラーメッセージはありません ・実際の公式LINE上で「わかりました」を入力しても、カルーセルメッセージが送信されません

該当のソースコード

# ライブラリのインポート
from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, FollowEvent, TextMessage, TextSendMessage,
    TemplateSendMessage, CarouselTemplate, CarouselColumn, MessageAction
)

app = Flask(__name__)

# アクセストークンとWebHookHandlerの設定
line_bot_api = LineBotApi('****')
handler = WebhookHandler('****')

# アプリケーション側の設定
@app.route("/")
def test():
    return "OK"

@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:
        print("Invalid signature. Please check your channel access token/ \
            channel secret.")
        abort(400)

    return "OK"


# LINE Messanger API側の設定
@handler.add(FollowEvent)
def handle_follow(event):
    profile = line_bot_api.get_profile(event.source.user_id)
    nickname = profile.display_name

    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text="****")
    )


@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    if event.message.text == "よろしくお願いします":
        reply_message = "****"
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text=reply_message))


def handle_text_message(event):
    if event.message.text == "わかりました":
        carousel_template = CarouselTemplate(columns=[CarouselColumn(
                thumbnail_image_url="****",
                title="****",
                text="****",
                actions=[MessageAction(type="message", label="****", text="****")]),
            CarouselColumn(thumbnail_image_url="****",
                title="****",
                text="****",
                actions=[MessageAction(type="message", label="****", text="****")]),
            CarouselColumn(thumbnail_image_url="****",
                title="****",
                text="****",
                actions=[MessageAction(type="message", label="****", text="****")]),
            ])
        messages = TemplateSendMessage(
            alt_text="carousel_template",
            template=carousel_template)
        line_bot_api.reply_message(
            event.reply_token,
            messages)


if __name__ == "__main__":
    app.run()

試したこと

・「def handle_text_message(event):」の前に「@handler.add(MessageEvent, message=ImageMessage)」」で実行 → ユーザーが「わかりました」を入力しても、カルーセルメッセージが返信されません ・他にも色々と試しましたが、全てだめでした。。。エラーが表示される場合もあれば、LINE上で「わかりました」と送信しても、カルーセルメッセージが表示されません

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

・画像に関しては、指定しているURLのパスは通っており、テキストの文字上限も超えていません ・アプリケーションサーバーはFlask、サーバーはHerokuを利用しています

  • 0
  • 2
  • 1701
  • twitter facebook

あと、以下2つの文字数上限を超えた場合、文字数制限で切られるのではなく、そもそも表示されないっぽいので、注意が必要そうでした。

title="", text="",

  • 0

試行錯誤してたら自己解決しました! どうやら「def handle_text_message(event):」にしなければいけなかったのと、 「elif event.message.text == "わかりました":」にしなければいけなかったようです。

@handler.add(MessageEvent, message=TextMessage)
def handle_text_message(event):
    if event.message.text == "よろしくお願いします":
        reply_message = "****"
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text=reply_message))
    elif event.message.text == "わかりました":
  • 0
本当によろしいですか? question.vm