Current section

Files

Jump to
messenger_bot lib messenger_bot services messenger_profile.ex
Raw

lib/messenger_bot/services/messenger_profile.ex

defmodule MessengerBot.Service.MessengerProfile do
@moduledoc """
Facebook Messenger 'Message' API
"""
alias MessengerBot.Client
alias MessengerBot.Config
alias MessengerBot.Payload.{MessengerProfileSetRequest,
MessengerProfileSetResponse, MessengerProfileReadResponse}
@path "/messenger_profile"
@doc """
Setup get_started_button
"""
@spec setup_get_started_button(String.t, MessengerProfileSetRequest.t) ::
MessengerProfileSetResponse.t | {:error, Map.t}
def setup_get_started_button(page_id,
%MessengerProfileSetRequest{get_started: get_started} = request)
when not is_nil(get_started) do
save(page_id, request)
end
@doc """
Read get_started_button
"""
@spec read_get_started_button(String.t) ::
MessengerProfileReadResponse.t | {:error, Map.t}
def read_get_started_button(page_id) do
read(page_id, "get_started")
end
@doc """
Delete get_started_button
"""
@spec delete_get_started_button(String.t) ::
MessengerProfileSetResponse.t | {:error, Map.t}
def delete_get_started_button(page_id) do
request = %{fields: ["get_started"]}
delete(page_id, request)
end
@doc """
Setup persistent menu
"""
@spec setup_persistent_menu(String.t, MessengerProfileSetRequest.t) ::
MessengerProfileSetResponse.t | {:error, Map.t}
def setup_persistent_menu(page_id,
%MessengerProfileSetRequest{persistent_menu: persistent_menu} = request)
when not is_nil(persistent_menu) do
save(page_id, request)
end
@doc """
Read persistent menu
"""
@spec read_persistent_menu(String.t) ::
MessengerProfileReadResponse.t | {:error, Map.t}
def read_persistent_menu(page_id) do
read(page_id, "persistent_menu")
end
@doc """
Delete persistent menu
"""
@spec delete_persistent_menu(String.t) ::
MessengerProfileSetResponse.t | {:error, Map.t}
def delete_persistent_menu(page_id) do
request = %{fields: ["persistent_menu"]}
delete(page_id, request)
end
@doc """
Setup white listed domains
"""
@spec setup_whitelisted_domains(String.t, MessengerProfileSetRequest.t) ::
MessengerProfileSetResponse.t | {:error, Map.t}
def setup_whitelisted_domains(page_id, %MessengerProfileSetRequest{
whitelisted_domains: whitelisted_domains} = request)
when not is_nil(whitelisted_domains) do
save(page_id, request)
end
@doc """
White listed domains
"""
@spec whitelisted_domains(String.t) ::
MessengerProfileReadResponse.t | {:error, Map.t}
def whitelisted_domains(page_id) do
read(page_id, "whitelisted_domains")
end
@spec save(String.t, MessengerProfileSetRequest.t) ::
MessengerProfileSetResponse.t | {:error, Map.t}
defp save(page_id, %MessengerProfileSetRequest{} = request) do
page_token = Config.page_token(page_id)
case Client.post(Client.url(@path, page_token), request) do
%HTTPoison.Response{} = response ->
Poison.decode!(response.body, as: %MessengerProfileSetResponse{})
{:error, err} ->
{:error, %{details: err}}
end
end
@spec read(String.t, String.t) ::
MessengerProfileReadResponse.t | {:error, Map.t}
defp read(page_id, fields) do
page_token = Config.page_token(page_id)
url = Client.url(@path, page_token) <> "&fields=#{fields}"
case Client.get(url) do
%HTTPoison.Response{} = response ->
Poison.decode!(response.body, as: %MessengerProfileReadResponse{})
{:error, err} ->
{:error, %{details: err}}
end
end
@spec delete(String.t, Map.t) ::
MessengerProfileSetResponse.t | {:error, Map.t}
defp delete(page_id, request) do
page_token = Config.page_token(page_id)
case Client.delete(Client.url(@path, page_token), request) do
%HTTPoison.Response{} = response ->
Poison.decode!(response.body, as: %MessengerProfileSetResponse{})
{:error, err} ->
{:error, %{details: err}}
end
end
end