Packages

Facebook provider for Agala framework

Current section

Files

Jump to
agala_facebook lib response send.ex
Raw

lib/response/send.ex

defmodule Agala.Provider.Facebook.Helpers.Send do
@api_version "2.6"
defp bootstrap(bot) do
case bot.config() do
%{bot: ^bot} = bot_params ->
{:ok,
Map.put(bot_params, :private, %{
http_opts:
(get_in(bot_params, [:provider_params, :hackney_opts]) || [])
|> Keyword.put(
:recv_timeout,
get_in(bot_params, [:provider_params, :response_timeout]) || 5000
)
})}
error ->
error
end
end
def base_url(token, path) do
"https://graph.facebook.com/v" <> @api_version <> path <> "?access_token=" <> token
end
defp body_encode(body) when is_bitstring(body), do: body
defp body_encode(body) when is_map(body), do: body |> Jason.encode!()
defp body_encode(_), do: ""
def perform_request(%Agala.Conn{
responser: bot,
response: %{method: method, payload: %{body: body, url_path: url_path} = payload}
}) do
{:ok, bot_params} = bootstrap(bot)
case HTTPoison.request(
method,
base_url(bot_params.provider_params.page_access_token, url_path),
body_encode(body),
Map.get(payload, :headers, []),
Map.get(payload, :http_opts) || Map.get(bot_params.private, :http_opts) || []
) do
{:ok, %HTTPoison.Response{body: body}} -> {:ok, Jason.decode!(body)}
error -> error
end
end
@spec message(conn :: Agala.Conn.t(), recipient_id :: String.t(), text :: String.t()) ::
Agala.Conn.t()
def message(conn, recipient_id, text) do
Map.put(conn, :response, %{
method: :post,
payload: %{
body: %{recipient: %{id: recipient_id}, message: %{text: text}},
headers: [{"Content-Type", "application/json"}],
url_path: "/me/messages"
}
})
|> perform_request()
end
end