Packages
messenger_bot
0.4.0
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/webhooks/router.ex
defmodule MessengerBot.Webhook.Router do
@moduledoc """
Router for messenger webhooks
"""
use Plug.Router
alias MessengerBot.Webhook.Callback, as: CallbackWebhook
alias MessengerBot.Webhook.Setup, as: SetupWebhook
plug MessengerBot.Plug.Authenticate
plug :match
plug :dispatch
post _ do
call_hooks(conn)
send_ok(conn)
end
get _ do
case SetupWebhook.process(query_params(conn)) do
{:ok, challenge} -> send_resp(conn, :ok, challenge)
{:error, reason} ->
err_resp(conn, :unprocessable_entity, reason)
end
end
match _,
do: err_resp(conn, 404, %{page: "Not found!"})
defp call_hooks(conn) do
spawn(fn ->
body = conn.private[:body]
CallbackWebhook.process(body)
end)
end
defp query_params(conn) do
conn
|> fetch_query_params()
|> Map.get(:query_params, %{})
end
defp send_ok(conn) do
conn
|> put_resp_content_type("application/json")
|> send_resp(:ok, "{\"status\": \"ok\"}")
end
defp err_resp(conn, status, errors) do
conn
|> put_resp_content_type("application/json")
|> send_resp(status, Poison.encode!(%{errors: errors}))
|> halt()
end
end