LINEリッチメニューをタブ切り替えで運用していると、ある瞬間にこうなりませんか?
- メニューは表示される
- 切り替えもできている
- でも戻れない!!!!!!
押しても反応しない。
あるいは、別のメニューに行ったきり戻ってこれない。
このとき、原因はほぼ決まっていて、
IDとaliasの混線か、aliasの中身の取り違えです。
僕の構成
今回の構成はこんな感じでした。
- リッチメニューA(メイン)
- リッチメニューB(サブ)
- richmenuswichでタブ切り替え
- aliasを使って管理
一見正しく思えますが、「正しく使っていても事故る」ポイントがありますので次のセクションで解説します。
まず確認すること①
:aliasは「存在」している?
aliasは作っただけではダメで、
「どのリッチメニューIDに紐づいているか」が全て。です。
確認ポイント👇
# alias一覧を取得
curl -sS -X GET https://api.line.me/v2/bot/richmenu/alias/list \
-H "Authorization: Bearer $TOKEN"
ここで見るべきなのはこれだけ。
- richMenuAliasId が想定どおりか
- richMenuId が 本当に切り替えたいIDか
名前があっている=中身もあっている、ではない。
確認すること②
:switch先が「alias」か「ID」か
- richMenuAliasId に IDを入れてないか
- richMenuId と 混ざってないか
を確認する。
aliasで切り替えるなら、最後までaliasで統一する。
途中でIDを使うと、戻れなくなる。
よくある事故①
:aliasは正しいが、中身が逆
僕のケースで起きやすかったのが、こちらです。
- alias名:メニューA(メイン)
- 中身の richMenuId:実は「メニューB(サブ)」
この状態で、
- メイン→ サブ は行ける
- サブ → メイン が戻れない
という 意味不明な挙動になる。
対処は単純です👇
# aliasを正しいIDに付け替える
curl -sS -X POST https://api.line.me/v2/bot/richmenu/alias/main \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"richMenuId": "正しいリッチメニューID"
}'
よくある事故②
:メインもサブも「Selected: true」
リッチメニュー作成時、
この設定を両方に入れてしまうと混乱します。
"selected": true
同時に1つしか有効になれないのに、
両方trueにしていると、
- どれがデフォルトか分からない
- 切り替え後の挙動が不安定
基本ルールはこれにしましょう〜〜!!
- デフォルトにしたい1つだけ true
- それ以外は false
別件:「全員に反映されているか不安」問題
僕が感じていた不安
これ、全員に反映されてんのかな〜〜〜〜〜??

これ、正常な不安です。
なぜなら、aliasは「裏で差し替え」されるからです。
確認する方法はこちら👇
curl -sS -X GET https://api.line.me/v2/bot/richmenu/alias/main \
-H "Authorization: Bearer $TOKEN"
ここで返ってくるrichMenuIdが正しければ、全ユーザーにそのIDが有効になっています。
結構即時で反映されます。
まとめ
戻れないときは「紐付け」を確認することが大切です!!今回の件で見るべき順番はこれでした。
- alias一覧と中身が一致しているか
- richmenuswitch が alias統一か
- selected: true が1つだけか
画面じゃなく、curlのレスポンスを見る。
これが一番早く確実な方法です。みてみてください〜!