2017年10月23日(月)にLINEから、新APIが公開されました。
LINE@やLINE公式アカウントは、画面の下側に、リッチメニューと呼ばれるメニューを設置することが可能です。
公開されたAPIは、リッチメニューをAPI経由で設定できるようにしたものです。

1.はじめに
従来、リッチメニューは、LINE MANAGERからしか設定できませんでした。
また、設定できるメニューも、固定のものしか作ることができず、デザインも、ガイドラインに沿った形式のものしか受付ていませんでした。
(公開期間の設定項目があるため、時間によって、変動するメニューは作れました)
新APIリッチメニューは、デザインフリーでかつ、任意のタイミングで、特定のユーザーに対してのみ、メニューを変更することが可能です。
2.使い方
新APIは、下記内容で構成されています。
- リッチメニューを取得する
- リッチメニューを作成する
- リッチメニューを削除する
- ユーザーのリッチメニューのIDを取得する
- リッチメニューとユーザーをリンクする
- リッチメニューとユーザーのリンクを解除する
- リッチメニューの画像をダウンロードする
- リッチメニューの画像をアップロードする
- リッチメニューのリストを取得する
リッチメニューは、1BOTに対して、10個まで定義可能で、1つ1つのリッチメニューに、LINE上で発行された固有のIDが付与されている形で管理されています。
まず、2でリッチメニューの定義をLINE上に作成し、発行されたリッチメニューIDを取得します。8で、先ほど作成したリッチメニューIDを使って、メニュー画像をアップロードします。5と6で、リッチメニューを適用したり、隠したり、を実際に行います。
3.リッチメニューの定義を作成
リッチメニューを作成するに従って、下記のようなプログラムを作成します。
ちなみに、sizeのところを、width: 2500、height: 843とすると、縦幅が半分のリッチメニューを作成できます。
今回のAPIで作成できるリッチメニューのサイズは、この2パターンのみとなっています。
http_client = HTTPClient.new endpoint_uri = 'https://api.line.me/v2/bot/richmenu' response = http_client.post_content(endpoint_uri, { size'=> { 'width'=> 2500, 'height'=> 1686 }, 'selected'=> true, 'name'=> 'リッチメニューサンプル', 'chatBarText'=> 'チェック', 'areas'=> [ { 'bounds'=> { 'x'=> 0, 'y'=> 0, 'width'=> 1250, 'height'=> 843 }, 'action'=> { 'type'=> 'postback', 'data'=> '新商品紹介' } ・ ・ ・ } ] }.to_json, 'Content-Type' => 'application/json; charser=UTF-8', 'Authorization' => 'Bearer #{self.bot.token3}' )
作成に成功すると、下記のようなレスポンスが200番で返却されます。
{ "richMenuId": "{richMenuId}" }
このrichMenuIdが、LINE上で管理されているリッチメニューのIDとなります。
この後、このrichMenuIdに対して、画像をアップロードしていきます。
4.リッチメニューに画像をアップロード
リッチメニューの画像をアップロードするに従って、下記のようなプログラムを作成します。
エンドポイントに、3で取得したrichMenuIdを指定する仕様になっています。
また、実際にアップロードする画像は、URLでないため、Content-Type: image/jpegな、データを送る必要があります。
http_client = HTTPClient.new endpoint_uri = "https://api.line.me/v2/bot/richmenu/{3で取得したrichMenuId}/content" http_client.post_content(endpoint_uri, {画像データ}, 'Content-Type' => 'image/jpeg', 'Authorization' => "Bearer {アクセストークン}" )
もし、URLベースで画像をアップロードする場合は、下記のように指定してあげるとOKです。
open({画像のURL}) { |image| http_client = HTTPClient.new endpoint_uri = "https://api.line.me/v2/bot/richmenu/{3で取得したrichMenuId}/content" http_client.post_content(endpoint_uri, image.read, 'Content-Type' => 'image/jpeg', 'Authorization' => "Bearer {アクセストークン}" ) }
5.リッチメニューを実際に適用
リッチメニューとユーザーをリンクするに従って、下記のようなプログラムを作成します。
endpoint_uri = "https://api.line.me/v2/bot/user/{UserId}/richmenu/{richMenuId}" res = http_client.post_content(endpoint_uri, nil, 'Content-Type' => 'application/json; charser=UTF-8', 'Content-Length' => 0, 'Authorization' => "Bearer {アクセストークン}" )
上のコールを呼んだタイミングでユーザー画面にリッチメニューが表示されます。
LINEのAPI、便利になりましたね。
リッチメニューを使うことで、ユーザーのステートごとに、メニューを変えられるため、会員/非会員でメニューを変えたりすることができます。
後は、ImageMapを送った時に、リッチメニューが表示されていると、ImageMapが見えない、というユーザー様の声は多数あるため、LINEさんには、リッチメニューの表示/非表示のAPI公開を頑張っていただきたいですね!