Current section
Files
Jump to
Current section
Files
lib/inmarsat_api.ex
defmodule InmarsatApi do
@moduledoc """
Documentation for `InmarsatApi`.
"""
@base_url "https://api.inmarsat.com/v1/idp/gateway/rest"
@doc """
Returns an array of errors definitions supported by the MGS.
Inmarsat recommends calling this during client initialisation and periodically to maintain an up to date
dictionary of all API error codes.
"""
def get_error_codes do
do_request(["info_errors.json"])
end
@doc """
Returns a string with error description of the provided error code
"""
def get_error_code_description(error_id) do
{:ok, errors_list} = get_error_codes()
desc = for %{"ID" => id, "Description" => description, "Name" => name} when id == error_id <- errors_list do
description
end
hd desc
end
@doc """
This operation returns the Message Gateway System (MGS) time in modified UTC format.
"""
def get_info_utc_time do
do_request(["info_utc_time.json"])
end
@doc """
Returns the version of the Message Gateway System (MGS) software.
"""
def get_info_version do
do_request(["info_version.json"])
end
@doc """
Returns a list of broadcast ID metadata.
"""
def get_broadcast_info(params) do
params = filter_params(params, [:access_id, :password])
path = ["get_broadcast_infos.json"]
do_request(path, params)
end
@doc """
Retrieves delivery statuses of up to 100 Mobile-Terminated messages. You can query specific known message IDs or based on a datetime range.
"""
def get_forward_statuses(params) do
params = filter_params(params, [:access_id, :password, :start_utc, :end_utc, :fwIDs])
path = ["get_forward_statuses.json"]
do_request(path, params)
end
@doc """
Returns a list of metadata about the modems assigned to the Mailbox. page_size can be up to 1000 records.
Records are sorted by Mobile ID. The first call sets sinceMobile parameter to an empty string, and all subsequent calls set it to the last MobileID of the previous call's result.
"""
def get_mobiles_paged(params) do
params = filter_params(params, [:access_id, :password, :page_size, :since_mobile])
path = ["get_mobiles_paged.json"]
do_request(path, params)
end
@doc """
Retrieves Mobile-Originated messages (up to 500) based on a high water mark referencing either a start-time or previously retrieved unique message ID.
Inmarsat recommends using start_utc as the reference, mitigating temporary outage of the client or server.
Inmarsat retains messages for retrieval up to 5 days from transmission.
Note: calling this API does not generate satellite data charges.
"""
def get_return_messages(params) do
params = filter_params(params, [:access_id, :password, :from_id, :start_utc, :include_raw_payload, :include_type])
path = ["get_return_messages.json"]
do_request(path, params)
end
@doc """
Retrieves up to 100 Forward message records based on the specified list.
"""
def get_forward_messages(params) do
params = filter_params(params, [:access_id, :password, :fwIDs])
path = ["get_forward_messages.json"]
do_request(path, params)
end
@doc """
Submits one or more Mobile-Terminated messages to the MGS to deliver. A maximum of 100 ForwardMessages can be submitted with each call. The maximum size of each forward message is:
10,000 bytes for modems not in low power mode (i.e. wakeupPeriod = None)
5,000 bytes for modems with low power mode enabled.
"""
def submit_messages(message) do
path = ["submit_messages.json"]
url = construct_url(path)
case HTTPoison.post(url, message) do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
case Poison.decode(body) do
{:ok, decoded} -> {:ok, decoded}
{:error, error} -> {:error, error}
end
{:ok, %HTTPoison.Response{status_code: status_code}} ->
{:error, status_code}
{:error, error} ->
{:error, error}
end
end
defp do_request(path) do
do_request(path, [])
end
defp do_request(path, params) do
url = construct_url(path, params)
case HTTPoison.get(url) do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
case Poison.decode(body) do
{:ok, decoded} -> {:ok, decoded}
{:error, error} -> {:error, error}
end
{:ok, %HTTPoison.Response{status_code: status_code}} ->
{:error, status_code}
{:error, error} ->
{:error, error}
end
end
defp construct_url(dir) when is_binary(dir) do
@base_url <> "/" <> dir
end
defp construct_url(dirs) when is_list(dirs) do
@base_url <> "/" <> Enum.join(dirs, "/")
end
defp construct_url(dirs, params) do
construct_url(dirs) <> "/?" <> URI.encode_query(params)
end
defp filter_params(params, allowed_params) do
Keyword.take(params, allowed_params)
end
end