#リッチメニューとは
「LINE公式アカウントの機能の一つ「リッチメニュー」は、トーク画面の下部に大きく表示されるメニューです。画面を大きく占有するためユーザーの注意を引きやすいほか、クリエイティブとともにリンクを設定することで予約ページやECサイトなどにユーザーを誘導することができます。」
LINE for Business(https://www.linebiz.com/jp/column/technique/20180731-01/) より引用
ざっくり言うとユーザーができる行動をテキストでやりとりするのではなくリッチメニューで
表示されているボタンを押すことで簡単に利用することできるようになるということで、どうやらbotに
導入することでより便利になりそうな予感です。
この回では、個人的なメモと他に同じようにpythonでLINE messaging APIでリッチメニューを開発したい!と
考えている方の何かヒントになればという話を書きます。
#本編
まず初めに、今回この記事を参考にリッチメニューを作成しました。
LINE Messaging APIのリッチメニューをPythonで操作する
だいたいはこの記事通りに作成していくと問題なくリッチメニューを作成することができます。
ここから苦戦したことは、
・どのように連携させるかがわからない
・json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)が発生してしまいリッチメニューの登録を行うことができない
ということが大きく分けて2つありました。
##どのように連携させるかがわからない
参考にさせてもらった記事通りにソースコードを書き、これまで作成してきたbotのソースコードに追記して
リッチメニューが使えるようになるものだと思っていました。ですが、デプロイしてみるとHTTPリクエストを同時に実行することができないと言うことで、エラーが出てしまい、bot自体も動かなくなってしまいました。
解決策としては至極簡単で、リッチメニューを登録するためのソースコード単体で実行すると言うことでした。
##json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
エラーの内容を見るにどうやらjson形式でリクエストに渡しているものが怪しいですね。
そう思い、このエラーの内容やjsonで渡している情報など調べましたが一向に解決せず。
諦めかけた時、公式リファレンスを眺めているとなにやら参考にした記事のリクエストURLが違っていることに気がつきました。どうやら、月日が経つとリクエストURLが変わっているのかもしれません。
ということで、upload_imageメソッド内のURLを以下のように変更。
https://api-data.line.me/v2/bot/richmenu/%s/content
無事に画像を登録することができました。
特定のユーザーにリッチメニューを登録する方法はget_profileメソッドを使用して、サクッとbotにオウム返し
してもらいましょう。
line_bot_api.get_profile(event.source.user_id)
#最後に
おそらくここまでの補足と参考の記事で、つまづくことなくリッチメニューの登録ができると思います。
画像の用意などはサイズを揃えないと、いつまで経っても登録できないという点にも注意です!!