LINEユーザーにリンク済みのリッチメニューを一括で置き換え・解除するAPIが新しくなりました

LINEユーザーにリンク済みのリッチメニューを一括で置き換え・解除するAPIが新しくなりました。これまでの方法との違いや、実際に実行してみて気付いたことを共有したいと思います。
2023.07.07

はじめに

2023年7月4日、Messaging APIに「ユーザーにリンク済みのリッチメニューを一括で置き換え・解除するエンドポイント」が追加されました。

Messaging APIにおいて、ユーザーにリンク済みのリッチメニューを一括で置き換えたり、解除したりできるようになりました

今までは以前紹介したLINEユーザーIDを指定してリッチメニューを切り替える方法で実現していましたが、追加されたエンドポイントを利用することでLINEユーザーIDが不要となります。

切り替え手順の変更点

これまでの切り替え手順

  1. リッチメニューを作成
  2. デフォルトのリッチメニューを新しいものに切り替え
  3. 切り替え対象のLINEユーザーIDのリストを取得
  4. 新しいリッチメニューIDと、LINEユーザーIDのリストを指定して切り替え

新しい切り替え手順

  1. リッチメニューを作成
  2. デフォルトのリッチメニューを新しいものに切り替え
  3. 切り替え前のリッチメニューIDと、新しいリッチメニューIDを指定して切り替え

新しい切り替え手順は、切り替え対象のリッチメニューIDを指定する方法に変わったことで、LINEユーザーIDのリストを取得・指定する手順が無くなりました。新しい手順を使う場合は、リッチメニュー作成時に返却されるリッチメニューIDを大切に保管しておきましょう。

新しい手順で切り替えてみた

実際に新しい手順でリッチメニューを切り替えてみました。事前に以下のリッチメニューが、複数のLINEユーザーIDに設定されている状態にしています。

切り替え前のリッチメニュー

リッチメニュー画像は、LINEキャンパスで無料配布されている画像を使用しています。

切替えはこちらのエンドポイントにリクエストします。

POST https://api.line.me/v2/bot/richmenu/batch

リクエストヘッダーにAuthorizationを指定して、リクエストボディに次の内容を指定します。

{
  "operations": [
    {
      "type": "link",
      "from": "richmenu-aaaaaaaaaaaaaaaaaaaaaaa",
      "to": "richmenu-bbbbbbbbbbbbbbbbbbbbbbb"
    }
  ]
}

typeにlinkを指定し、fromに切り替え前のリッチメニューID、toに切り替え後のリッチメニューIDを指定します。するとfromのリッチメニューが表示されていた複数ユーザーのリッチメニューが次の通りに切り替わりました。

切り替え後のリッチメニュー

とてもシンプルな手順で切り替えられるようになりました。なお、デフォルトのリッチメニューのみ設定している場合は、デフォルトを変更をすれば全ユーザーのリッチメニューが切り替わります。この新しい手順を実施する必要はありません。

リッチメニュー切り替えに関連する機能

今回のタイミングで同時に追加されたエンドポイントについても紹介します。

リッチメニュー切り替えリクエストの検証

リッチメニューの一括操作のリクエストを検証する

リクエストボディの operations の内容を検証してくれます。その他、指定したリッチメニューが存在しない場合や、指定したリッチメニューに画像が設定されていない場合も検証してくれます。このあたりの作業実施漏れは、よくある作業ミスなので非常にありがたい機能です。(今まで何度、画像を設定し忘れたことか・・・)

リッチメニュー切り替えリクエストの状況の確認

リッチメニューの一括操作の進行状況を取得する

GET https://api.line.me/v2/bot/richmenu/progress/batch?requestId={request_id}

こちらのエンドポイントに、リッチメニュー切り替えのレスポンスヘッダーに含まれている requestId を指定することで進行状況を確認出来ます。処理がエラーになった場合は、後述する機能で安全にリトライ可能です。

リッチメニュー切り替えのリトライ

新しい一括切り替え機能には安全にリトライするための機能が備わっています。一括切り替えのリクエストボディに resumeRequestKey プロパティを指定することで実現可能です。resumeRequestKey を利用する場合は、初回リクエスト時に resumeRequestKey を指定しておく必要があります。リトライ時に同じキーを指定することで失敗したユーザーからリトライ可能です。

まとめ

以前の方法では、LINEユーザーIDとリッチメニューIDの関連付けをDBなどで保持しておく必要がありましたが、新しい方法ではこれが不要となります。非常にありがたい仕組みです。今後は新しい方法一択で良いと思いますし、LINEユーザーIDの管理が必要なくなるのでLINEのポリシーにも準拠しやすくなりますね。