Packages
messenger_bot
1.0.0-beta2
1.3.0
1.2.0
retired
1.1.0
retired
1.0.0
retired
1.0.0-rc.8
retired
1.0.0-rc.7
retired
1.0.0-rc.6
retired
1.0.0-rc.5
retired
1.0.0-rc.4
retired
1.0.0-rc.3
retired
1.0.0-rc.2
retired
1.0.0-rc.1
retired
1.0.0-beta9
retired
1.0.0-beta8
retired
1.0.0-beta7
retired
1.0.0-beta6
retired
1.0.0-beta5
retired
1.0.0-beta4
retired
1.0.0-beta3
retired
1.0.0-beta2
retired
1.0.0-beta10
retired
1.0.0-beta1
retired
0.9.2
retired
0.9.1
retired
0.9.0
retired
0.8.2
retired
0.8.1
retired
0.8.0
retired
0.7.3
retired
0.7.2
retired
0.7.1
retired
0.7.0
retired
0.6.0
retired
0.5.2
retired
0.5.1
retired
0.5.0
retired
0.4.0
retired
0.3.0
retired
0.2.1
retired
0.2.0
retired
0.1.0
retired
Unofficial Facebook Messenger Platform chatbot client and webhook handler
Retired package: Deprecated
Current section
Files
Jump to
Current section
Files
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 ->
attrs = :jiffy.decode(response.body, [:return_maps])
%MessengerProfileSetResponse{result: attrs["result"]}
{: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 ->
attrs = :jiffy.decode(response.body, [:return_maps])
%MessengerProfileReadResponse{data: attrs["data"]}
{: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 ->
attrs = :jiffy.decode(response.body, [:return_maps])
%MessengerProfileSetResponse{result: attrs["result"]}
{:error, err} ->
{:error, %{details: err}}
end
end
end