Packages

SDK oficial Elixir da plataforma APIBrasil: WhatsApp, SMS, consultas de CPF/CNPJ, veiculos, CEP, correios, pagamentos PIX/boleto e mais.

Current section

Files

Jump to
apibrasil lib api_brasil platform devices.ex
Raw

lib/api_brasil/platform/devices.ex

defmodule ApiBrasil.Platform.Devices do
@moduledoc """
Gestão de devices (`/devices/*`).
Devices são a credencial de consumo dos serviços device-based: crie um
device com a SecretKey da API desejada e use o `device_token` retornado
como header `DeviceToken`.
alias ApiBrasil.Platform.Devices
{:ok, device} =
client
|> ApiBrasil.with_options(secret_key: "SUA_SECRET_KEY")
|> Devices.store(%{"device_name" => "meu-bot", "type" => "server"})
client = ApiBrasil.put_device_token(client, device["device_token"])
"""
use ApiBrasil.Core.Service
@doc """
Lista os devices do usuário: `GET /devices`.
`query` é opcional e vira query string (ex.: `%{"search" => "meu-bot"}`).
"""
@spec list(Client.t(), map() | keyword() | nil, keyword()) :: result()
def list(client, query \\ nil, opts \\ []) do
Service.get_query(client, "devices", query, opts)
end
@doc "Como `list/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha."
@spec list!(Client.t(), map() | keyword() | nil, keyword()) :: map()
def list!(client, query \\ nil, opts \\ []) do
Service.unwrap!(list(client, query, opts))
end
@doc """
Cria um device: `POST /devices/store`.
O body aceita `device_name`, `type` (`cellphone` | `tablet` | `computer` |
`server`), `device_key`, `server_search` e os webhooks. A SecretKey da API
(painel APIBrasil) vai no header: informe em `:secret_key` nas opções da
chamada ou configure `secret_key` no cliente — nesse caso ela é injetada
automaticamente.
"""
@spec store(Client.t(), term(), keyword()) :: result()
def store(client, body \\ nil, opts \\ []) do
Service.post(client, "devices/store", body, Service.with_secret_key(client, opts))
end
@doc "Como `store/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha."
@spec store!(Client.t(), term(), keyword()) :: map()
def store!(client, body \\ nil, opts \\ []) do
Service.unwrap!(store(client, body, opts))
end
@doc """
Detalha um device: `GET /devices/show?search={device_token}`.
`nil` (ou string vazia) usa o device configurado no cliente.
"""
@spec show(Client.t(), String.t() | nil, keyword()) :: result()
def show(client, device_token \\ nil, opts \\ []) do
query = %{"search" => resolve_token(client, device_token)}
Service.get_query(client, "devices/show", query, opts)
end
@doc "Como `show/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha."
@spec show!(Client.t(), String.t() | nil, keyword()) :: map()
def show!(client, device_token \\ nil, opts \\ []) do
Service.unwrap!(show(client, device_token, opts))
end
@doc """
Remove um device: `DELETE /devices/destroy`.
`nil` (ou string vazia) usa o device configurado no cliente.
"""
@spec destroy(Client.t(), String.t() | nil, keyword()) :: result()
def destroy(client, device_token \\ nil, opts \\ []) do
body = %{"search" => resolve_token(client, device_token)}
Service.delete(client, "devices/destroy", body, opts)
end
@doc "Como `destroy/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha."
@spec destroy!(Client.t(), String.t() | nil, keyword()) :: map()
def destroy!(client, device_token \\ nil, opts \\ []) do
Service.unwrap!(destroy(client, device_token, opts))
end
route_post(
:update,
"devices/update",
"Atualiza um device: `POST /devices/update` (body com `device_token` + campos)."
)
route_post(
:requests,
"devices/requests",
"Histórico de requisições do device: `POST /devices/requests`."
)
defp resolve_token(%Client{device_token: device_token}, token) when token in [nil, ""],
do: device_token || ""
defp resolve_token(_client, token), do: to_string(token)
end