Current section

Files

Jump to
messenger_bot lib messenger_bot web controllers messenger.ex
Raw

lib/messenger_bot/web/controllers/messenger.ex

defmodule MessengerBot.Web.Controller.Messenger do
@moduledoc false
import MessengerBot.Web.Controller.Base
alias MessengerBot.Web.Renderer
alias MessengerBot.Web.Service.{Callback, Setup}
@doc """
Facebook Messenger Platform Setup handler
"""
def setup(conn) do
case run_setup(conn) do
{:ok, %{"hub.challenge" => challenge}} ->
Renderer.send_ok(conn, challenge)
{status, reason} ->
Renderer.send_error(conn, {status, reason})
end
end
@doc """
Facebook Messenger Platform Webhook handler
WARNING: 'checkout_update' and 'payment_pre_checkout' events are anti-pattern
for this approach which require special response data. Thus, this package
doesn't support the 'checkout_update' and 'payment_pre_checkout' events.
"""
def callback(conn) do
conn
|> run_callback()
|> Renderer.send_ok()
end
############################################################################
# PRIVATE #
############################################################################
defp run_setup(conn) do
app = Map.get(conn.private, :app)
Setup.run(app, query_params(conn))
end
defp run_callback(conn) do
%{app: app, body: body} = Map.take(conn.private, [:app, :body])
spawn(fn -> Callback.run(app.id, body) end)
conn
end
end