Rich menu API: create/manage rich menus, upload their images, set the default, link per-user, manage aliases, and run bulk (batch) operations.
Image up/download go through the api-data.line.me host. Build a rich menu object
with rich_menu/3 (+ size/1,2, area/2, bounds/4; actions come from
ExLine.Message.Action).
Ref: https://developers.line.biz/en/reference/messaging-api/#rich-menu
Summary
Functions
A tappable area: bounds from bounds/4, action from ExLine.Message.Action.
Runs a batch of rich menu operations (link/unlink/setDefault…). Option
:resume_request_key to resume a previous request. Ref: #batch-control-rich-menus-of-users
Gets the progress of a batch request. Ref: #get-batch-control-rich-menus-progress-status
Pixel bounds of an area.
Clears the default rich menu. Ref: #cancel-default-rich-menu
Creates a rich menu; returns {:ok, %{"richMenuId" => id}}. Ref: #create-rich-menu
Creates a rich menu alias. Ref: #create-rich-menu-alias
Deletes a rich menu. Ref: #delete-rich-menu
Deletes a rich menu alias. Ref: #delete-rich-menu-alias
Gets a rich menu. Ref: #get-rich-menu
Gets a rich menu alias. Ref: #get-rich-menu-alias-by-id
Gets the default rich menu id. Ref: #get-default-rich-menu-id
Gets the rich menu id linked to a user. Ref: #get-rich-menu-id-of-user
Downloads the rich menu image (raw bytes). Ref: #download-rich-menu-image
Links a rich menu to a user. Ref: #link-rich-menu-to-user
Links a rich menu to multiple users. Ref: #link-rich-menu-to-users
Lists rich menus. Ref: #get-rich-menu-list
Lists rich menu aliases. Ref: #get-rich-menu-alias-list
Rich menu object. size is %{width:, height:} (see size/1,2), areas is a
list from area/2. Options: :name, :chat_bar_text, :selected.
Sets the default rich menu for all users. Ref: #set-default-rich-menu
Uploads the rich menu image (content_type "image/jpeg" or "image/png").
Rich menu size. :full → 2500×1686, :compact → 2500×843.
Custom rich menu size.
Unlinks a user's rich menu. Ref: #unlink-rich-menu-from-user
Unlinks the rich menu from multiple users. Ref: #unlink-rich-menus-from-users
Updates a rich menu alias to point at rich_menu_id. Ref: #update-rich-menu-alias
Validates a rich menu object without creating it. Ref: #validate-rich-menu-object
Validates a batch request without running it. Ref: #validate-batch-control-rich-menus-of-users
Functions
A tappable area: bounds from bounds/4, action from ExLine.Message.Action.
@spec batch(ExLine.Client.t(), [map()], keyword()) :: {:ok, term()} | {:error, ExLine.Error.t()}
Runs a batch of rich menu operations (link/unlink/setDefault…). Option
:resume_request_key to resume a previous request. Ref: #batch-control-rich-menus-of-users
@spec batch_progress(ExLine.Client.t(), String.t()) :: {:ok, map()} | {:error, ExLine.Error.t()}
Gets the progress of a batch request. Ref: #get-batch-control-rich-menus-progress-status
Pixel bounds of an area.
@spec cancel_default(ExLine.Client.t()) :: {:ok, term()} | {:error, ExLine.Error.t()}
Clears the default rich menu. Ref: #cancel-default-rich-menu
@spec create(ExLine.Client.t(), map()) :: {:ok, map()} | {:error, ExLine.Error.t()}
Creates a rich menu; returns {:ok, %{"richMenuId" => id}}. Ref: #create-rich-menu
@spec create_alias(ExLine.Client.t(), String.t(), String.t()) :: {:ok, term()} | {:error, ExLine.Error.t()}
Creates a rich menu alias. Ref: #create-rich-menu-alias
@spec delete(ExLine.Client.t(), String.t()) :: {:ok, term()} | {:error, ExLine.Error.t()}
Deletes a rich menu. Ref: #delete-rich-menu
@spec delete_alias(ExLine.Client.t(), String.t()) :: {:ok, term()} | {:error, ExLine.Error.t()}
Deletes a rich menu alias. Ref: #delete-rich-menu-alias
@spec get(ExLine.Client.t(), String.t()) :: {:ok, map()} | {:error, ExLine.Error.t()}
Gets a rich menu. Ref: #get-rich-menu
@spec get_alias(ExLine.Client.t(), String.t()) :: {:ok, map()} | {:error, ExLine.Error.t()}
Gets a rich menu alias. Ref: #get-rich-menu-alias-by-id
@spec get_default(ExLine.Client.t()) :: {:ok, map()} | {:error, ExLine.Error.t()}
Gets the default rich menu id. Ref: #get-default-rich-menu-id
@spec get_for_user(ExLine.Client.t(), String.t()) :: {:ok, map()} | {:error, ExLine.Error.t()}
Gets the rich menu id linked to a user. Ref: #get-rich-menu-id-of-user
@spec get_image(ExLine.Client.t(), String.t()) :: {:ok, binary()} | {:error, ExLine.Error.t()}
Downloads the rich menu image (raw bytes). Ref: #download-rich-menu-image
@spec link(ExLine.Client.t(), String.t(), String.t()) :: {:ok, term()} | {:error, ExLine.Error.t()}
Links a rich menu to a user. Ref: #link-rich-menu-to-user
@spec link_bulk(ExLine.Client.t(), [String.t()], String.t()) :: {:ok, term()} | {:error, ExLine.Error.t()}
Links a rich menu to multiple users. Ref: #link-rich-menu-to-users
@spec list(ExLine.Client.t()) :: {:ok, map()} | {:error, ExLine.Error.t()}
Lists rich menus. Ref: #get-rich-menu-list
@spec list_aliases(ExLine.Client.t()) :: {:ok, map()} | {:error, ExLine.Error.t()}
Lists rich menu aliases. Ref: #get-rich-menu-alias-list
@spec set_default(ExLine.Client.t(), String.t()) :: {:ok, term()} | {:error, ExLine.Error.t()}
Sets the default rich menu for all users. Ref: #set-default-rich-menu
@spec set_image(ExLine.Client.t(), String.t(), binary(), String.t()) :: {:ok, term()} | {:error, ExLine.Error.t()}
Uploads the rich menu image (content_type "image/jpeg" or "image/png").
Ref: https://developers.line.biz/en/reference/messaging-api/#upload-rich-menu-image
@spec size(:full | :compact) :: map()
Rich menu size. :full → 2500×1686, :compact → 2500×843.
iex> ExLine.Api.RichMenu.size(:full)
%{width: 2500, height: 1686}
Custom rich menu size.
@spec unlink(ExLine.Client.t(), String.t()) :: {:ok, term()} | {:error, ExLine.Error.t()}
Unlinks a user's rich menu. Ref: #unlink-rich-menu-from-user
@spec unlink_bulk(ExLine.Client.t(), [String.t()]) :: {:ok, term()} | {:error, ExLine.Error.t()}
Unlinks the rich menu from multiple users. Ref: #unlink-rich-menus-from-users
@spec update_alias(ExLine.Client.t(), String.t(), String.t()) :: {:ok, term()} | {:error, ExLine.Error.t()}
Updates a rich menu alias to point at rich_menu_id. Ref: #update-rich-menu-alias
@spec validate(ExLine.Client.t(), map()) :: {:ok, term()} | {:error, ExLine.Error.t()}
Validates a rich menu object without creating it. Ref: #validate-rich-menu-object
@spec validate_batch(ExLine.Client.t(), [map()]) :: {:ok, term()} | {:error, ExLine.Error.t()}
Validates a batch request without running it. Ref: #validate-batch-control-rich-menus-of-users