前提・実現したいこと
『LINE Messenger API を使用してリッチメニューの作成を行いたい。(Python)』
PythonでLINE Messenger APIを用い、リッチメニューを作成を試みているのですが、どうしてもRichMenu()関数を呼ぶことができません。
どなたか教えて下さい。。
発生している問題・エラーメッセージ
リッチメニューが表示されない。
エラーメッセージ
該当のソースコード
Python
1from flask import Flask, request, abort 2 3from linebot import ( 4 LineBotApi, WebhookHandler, 5) 6from linebot.exceptions import ( 7 InvalidSignatureError 8) 9from linebot.models import ( 10 FollowEvent, UnfollowEvent, MessageEvent, PostbackEvent, 11 TextMessage, TextSendMessage, TemplateSendMessage, 12 ButtonsTemplate, CarouselTemplate, CarouselColumn, 13 PostbackTemplateAction, 14 RichMenu, RichMenuArea, RichMenuBounds, RichMenuResponse, RichMenuSize,MessageAction,URIAction, 15) 16 17from time import time 18import urllib.request, json 19 20app = Flask(__name__) 21 22line_bot_api = LineBotApi('1mqtNHrV5cUgij7aIYbar+gEDVmfr0ZldHnvL+kG22mNTE2Ae/MU6wqt9E6WmUg1Qt31WUpDQsgVNqHkKhlJJJ/c6TuuphCtPhjuXnqZLo+OdcIV1bTRxULA7IW3QyUJd3gX+p9/vmNyMdTrCRQkKQdB04t89/1O/w1cDnyilFU=') 23handler = WebhookHandler('526bae9674105674aae217b7f5e37f6e') 24 25''' 26@app.route("/") 27def test(): 28 return "OK" 29''' 30 31 32@app.route("/callback", methods=['POST']) 33def callback(): 34 # get X-Line-Signature header value 35 signature = request.headers['X-Line-Signature'] 36 37 # get request body as text 38 body = request.get_data(as_text=True) 39 #app.logger.info("Request body: " + body) 40 41 # handle webhook body 42 try: 43 handler.handle(body, signature) 44 except InvalidSignatureError: 45 print("Invalid signature. Please check your channel access token/channel secret.") 46 abort(400) 47 48 return 'OK' 49 50 51#メニューの作成 52#@handler.add(FollowEvent) 53def createRichmenu(event): 54 reply_message(event, TextSendMessage(text= "ここまでは来たね。")) 55 # define a new richmenu 56 rich_menu_to_create = RichMenu( 57 size=RichMenuSize(width=2500, height=843), 58 selected=False, 59 name="Nice richmenu", 60 chat_bar_text="Tap here", 61 areas=[RichMenuArea( 62 bounds=RichMenuBounds(x=0, y=0, width=2500, height=843), 63 action=URIAction(label='Go to line.me', uri='https://line.me'))] 64 ) 65 66 reply_message(event, TextSendMessage(text= "設定もできてる!")) 67 68 rich_menu_id = line_bot_api.create_rich_menu(rich_menu=rich_menu_to_create) 69 70 reply_message(event, TextSendMessage(text= rich_menu_id)) 71 72 # upload an image for rich menu 73 path = '/Users/masaki/Desktop/開発/LINE_Bot/ugaku-menu.jpeg' 74 75 reply_message(event, TextSendMessage(text= "画像は設定できるかな?")) 76 77 with open(path, 'rb') as f: 78 line_bot_api.set_rich_menu_image(rich_menu_id, "image/jpeg", f) 79 80 # set the default rich menu 81 line_bot_api.set_default_rich_menu(rich_menu_id) 82 83 84 85#カルーセルの通知 86def show_carousel(user_id): 87 carousel_columns = [ 88 CarouselColumn( 89 text=value, 90 title=value+'の通知', 91 actions=[ 92 PostbackTemplateAction( 93 label='ON', 94 data=value+'1' 95 ), 96 PostbackTemplateAction( 97 label='OFF', 98 data=value+'0' 99 ) 100 ] 101 ) for key, value in ( 102 zip( 103 ('A', 'B', 'C', 'D', 'E'), 104 ('Binance', 'KuCoin', 'Hupbipro', 'Poloniex', 'Bittrex') 105 ) 106 ) 107 ] 108 message_template = CarouselTemplate(columns=carousel_columns) 109 line_bot_api.push_message( 110 to=user_id, 111 messages=TemplateSendMessage(alt_text='carousel template', template=message_template) 112 ) 113 114 115#通常メッセージ送信 116@handler.add(MessageEvent, message=TextMessage) 117 118def handle_message(event): 119 print("start") 120 if event.message.text == "FAQ": 121 reply_message(event, TextSendMessage(text= "何にお困りですか?以下の項目からお選びください。")) 122 123 #elif event.message.text == "button": 124 # send_button(event, event.source.user_id) 125 126 127 elif event.message.text == "menu": 128 createRichmenu(event) 129 130 elif event.message.text == "Carousel": 131 show_carousel(event.source.user_id) 132 133 else: 134 reply_message(event, TextSendMessage(text= event.message.text)) 135 136 137 138 139def reply_message(event, messages): 140 line_bot_api.reply_message( 141 event.reply_token, 142 messages = messages, 143 ) 144 145 146 147if __name__ == "__main__": 148 app.run()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー