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公開を頑張っていただきたいですね!


