トラブルシューティング

LINEリッチメニューのデフォルト表示はどうやって決まる?

LINEリッチメニューで複数タブの運用をし始めると、必ず一度はぶつかるこの疑問。

で、結局どれがデフォルトなの?

メイン、サブ、期間限定タブ、、、作れば作るほどどれが最初に表示されるのかわからなくなりますよね。

そして大体事故って終わりがオチ。

そもそも selected: trueって何?

リッチメニュー作成時のこの項目。

"selected": true

これは、「このリッチメニューを初期表示にする」という意味です。
重要なのは以下の点です👇

  • 同時に有効にできるのは 1つだけ
  • 複数に true を入れても、最後に作ったものが勝つ(=混乱)

僕が陥ったパターン

構成はこちら

  • メインメニュー
  • サブメニュー
  • 両方とも selected: true

一見「どっちも大事だから true」に見えるけど、これが混乱の始まり

結果として起きるのが、

  • 切り替えたはずなのに、元に戻る
  • aliasは合ってるのに挙動がおかしい
  • 「今どれが当たってる?」状態

基本ルール(これだけ守る)

selected: true は1つだけ。

運用ルールとしては、これが一番安定すると思います👇

  • 通常時のメインメニュー → true
  • サブ・期間限定用 → false
  • 切り替えは richmenuswitch に任せる

じゃあ、アカウントBの場合は?

僕のケースで出てきたのがこれ。

このアカウント、サブメニューをデフォルト表示にしたい。

この場合は単純で、

  • サブメニューだけ selected: true
  • メインメニューは false

ここでやりがちなのが、「戻る用メニューも true にしてしまう」ことです。

戻るかどうかは selected ではなく、action(switch)で制御すると良いと思います。


事故りがちな例①:IDを変えずに上書き

月替り・キャンペーン対応で、

  • 既存メニューをちょっと変えて再作成
  • 同じ名前っぽいメニューが増える

この状態で selected: true を入れると、意図せずデフォルトが切り替わります

対策は2つ。

  • デフォルト用のメニューIDは固定
  • 一時的なメニューは必ず false

事故りがちな例②:「今どれが有効?」が分からない

確認したい時は、UIじゃなくAPIを見ましょう。

curl -sS -X GET https://api.line.me/v2/bot/richmenu/list \
-H "Authorization: Bearer $TOKEN"

見るポイントはこれだけです。

  • selected: true がどれか
  • それが想定したIDか

ここが真実です。


運用で迷わないための設計メモ

  • selected: true は「初期表示専用」
  • 切り替え用途では使わない
  • 通常時の1メニューだけ true
  • それ以外は全部 false
  • 切替は alias + richmenuswitch

これで、「戻れない」「どれが当たってる?」問題が激減すると思います!

-トラブルシューティング