Packages
messenger_bot
1.3.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
Current section
Files
Jump to
Current section
Files
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}
alias Plug.Conn
@doc """
Facebook Messenger Platform Setup handler
"""
@spec setup(Conn.t()) :: Conn.t()
def setup(conn) do
case run_setup(conn) do
{:ok, setup_params} ->
Renderer.send_ok(conn, setup_params.challenge)
{:error, error} ->
Renderer.send_error(conn, error)
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.
"""
@spec callback(Conn.t()) :: Conn.t()
def callback(conn) do
conn
|> run_callback()
|> Renderer.send_ok()
end
############################################################################
# PRIVATE #
############################################################################
defp run_setup(conn) do
params = [:app, :tx_id]
%{app: app, tx_id: tx_id} = Map.take(conn.private, params)
Setup.run(app, query_params(conn), tx_id)
end
defp run_callback(conn) do
params = [:app, :body, :tx_id]
%{app: app, body: body, tx_id: tx_id} = Map.take(conn.private, params)
spawn(fn -> Callback.run(app.id, body, tx_id) end)
conn
end
end