はじめに
LINE Messaging API:リッチメニュー、中身(JSONの内容)を書き変えた?
Yes → 新ID作成→画像アップ→alias付け替え
🔹0) 前提:トークンをクリーンに環境変数へ
export LINE_CHANNEL_ACCESS_TOKEN="XXXXXXXXXX"
echo $LINE_CHANNEL_ACCESS_TOKEN
🔹1) 新しいリッチメニューを作成(JSONから新IDを取得)
例: member用の新JSONファイル
ファイル名は任意(ex. A_member.json)。中身(areas等)を更新したものを使う
export MEMBER_JSON="A_member.json"
export MEMBER_NEW_ID="$(
curl -sS -X POST https://api.line.me/v2/bot/richmenu \
-H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d @"$MEMBER_JSON" | jq -r .richMenuId
)"
echo "MEMBER_NEW_ID=[$MEMBER_NEW_ID]"
空なら失敗
🔹2) 画像アップ(api-data.line.me に POST)
例: jpg画像(pngも可)
export MEMBER_IMG="./img/richmenu_member.jpg"
curl -sS -X POST "https://api-data.line.me/v2/bot/richmenu/$MEMBER_NEW_ID/content" \
-H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
-H "Content-Type: image/jpeg" \
--data-binary "@$MEMBER_IMG"
👉念のため 200 確認(404なら画像未設定)
curl -sS -D - -o /dev/null \
-H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
"https://api-data.line.me/v2/bot/richmenu/$MEMBER_NEW_ID/content" | sed -n '1,20p'
🔹3) alias を新IDへ付け替え(member の例)
新規作成(aliasがまだ無い場合):
jq -n --arg id "$MEMBER_NEW_ID" \
'{richMenuAliasId:"member", richMenuId:$id}' \
| curl -sS -X POST "https://api.line.me/v2/bot/richmenu/alias" \
-H "Authorization: Bearer '"$LINE_CHANNEL_ACCESS_TOKEN"'" \
-H "Content-Type: application/json" \
-d @- | jq .
張り替え(aliasが既にある場合):
jq -n --arg id "$MEMBER_NEW_ID" '{"richMenuId":$id}' \
| curl -sS -X POST "https://api.line.me/v2/bot/richmenu/alias/member" \
-H "Authorization: Bearer '"$LINE_CHANNEL_ACCESS_TOKEN"'" \
-H "Content-Type: application/json" \
-d @- | jq .
🔹4) alias の指し先を確認(200/JSONが返ればOK)
curl -sS -H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
https://api.line.me/v2/bot/richmenu/alias/member | jq .
🔹5)(必要なら)旧IDのクリーンアップ
# 旧IDを把握している場合のみ。誤削除注意!
export MEMBER_OLD_ID="richmenu-...(以前のID)"
curl -sS -X DELETE "https://api.line.me/v2/bot/richmenu/$MEMBER_OLD_ID" \
-H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN"
💡alias → richMenuId を取得
export A_ID="$(curl -sS -H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
https://api.line.me/v2/bot/richmenu/alias/member | jq -r .richMenuId)"
export B_ID="$(curl -sS -H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
https://api.line.me/v2/bot/richmenu/alias/exec | jq -r .richMenuId)"
export C_ID="$(curl -sS -H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
https://api.line.me/v2/bot/richmenu/alias/exec-ctrl | jq -r .richMenuId)"
echo "A_ID=[$A_ID] B_ID=[$B_ID] C_ID=[$C_ID]"
💡richmenuリスト → name と richMenuId を取得(*旧IDの削除候補が見つかる)
curl -sS -H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" https://api.line.me/v2/bot/richmenu/list | jq -r '.richmenus[] | "\(.name) \(.richMenuId)"'
🔹 Bexec / Cexec-ctrl 版(置き換え例)
member → exec / exec-ctrl に読み替えるだけです。
✅exec
1
export EXEC_JSON="B_exec.json"
export EXEC_NEW_ID="$(
curl -sS -X POST https://api.line.me/v2/bot/richmenu \
-H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d @"$EXEC_JSON" | jq -r .richMenuId
)"
echo "EXEC_NEW_ID=[$EXEC_NEW_ID]"
2
export EXEC_IMG="./img/richmenu_exec.jpg"
curl -sS -X POST "https://api-data.line.me/v2/bot/richmenu/$EXEC_NEW_ID/content" \
-H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
-H "Content-Type: image/jpeg" \
--data-binary "@$EXEC_IMG"
3 張り替え(aliasが既にある場合):
curl -sS -D - -o /dev/null \
-H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
"https://api-data.line.me/v2/bot/richmenu/$EXEC_NEW_ID/content" | sed -n '1,20p'
4
jq -n --arg id "$EXEC_NEW_ID" '{"richMenuId":$id}' \
| curl -sS -X POST "https://api.line.me/v2/bot/richmenu/alias/exec" \
-H "Authorization: Bearer '"$LINE_CHANNEL_ACCESS_TOKEN"'" \
-H "Content-Type: application/json" \
-d @- | jq .
5
curl -sS -H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
https://api.line.me/v2/bot/richmenu/alias/exec | jq .
✅exec_ctrl
1
export EXEC_CTRL_JSON="C_exec_ctrl.json"
export EXEC_CTRL_NEW_ID="$(
curl -sS -X POST https://api.line.me/v2/bot/richmenu \
-H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d @"$EXEC_CTRL_JSON" | jq -r .richMenuId
)"
echo "EXEC_CTRL_NEW_ID=[$EXEC_CTRL_NEW_ID]"
2
export EXEC_CTRL_IMG="./img/richmenu_exec_ctrl.jpg"
curl -sS -X POST "https://api-data.line.me/v2/bot/richmenu/$EXEC_CTRL_NEW_ID/content" \
-H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
-H "Content-Type: image/jpeg" \
--data-binary "@$EXEC_CTRL_IMG"
3 張り替え(aliasが既にある場合):
curl -sS -D - -o /dev/null \
-H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
"https://api-data.line.me/v2/bot/richmenu/$EXEC_CTRL_NEW_ID/content" | sed -n '1,20p'
4
jq -n --arg id "$EXEC_CTRL_NEW_ID" '{"richMenuId":$id}' \
| curl -sS -X POST "https://api.line.me/v2/bot/richmenu/alias/exec_ctrl" \
-H "Authorization: Bearer '"$LINE_CHANNEL_ACCESS_TOKEN"'" \
-H "Content-Type: application/json" \
-d @- | jq .
5
curl -sS -H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
https://api.line.me/v2/bot/richmenu/alias/exec_ctrl | jq .
(記入以上)