2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LINE Messaging API:リッチメニューのJSON変更時の定型手順(新ID作成 → 画像アップ → alias付け替え)

Last updated at Posted at 2025-10-19

はじめに

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 版(置き換え例)

memberexec / 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 .

(記入以上)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?