Current section

Files

Jump to
messenger_bot lib messenger_bot webhooks callback.ex
Raw

lib/messenger_bot/webhooks/callback.ex

defmodule MessengerBot.Webhook.Callback do
@moduledoc """
MessengerBot webhook for all callbacks
"""
alias EventBus.Model.Event
@spec process(integer(), String.t) :: {:ok, String.t}
def process(app_id, payload) do
webhook_payload = Poison.decode!(payload)
transaction_id = UUID.uuid1()
for entry <- webhook_payload["entry"] do
process_entry(transaction_id, {app_id, entry})
end
{:ok, "ok"}
end
defp process_entry(transaction_id, {app_id, entry}) do
time = entry["time"]
page_id = entry["id"]
for messaging <- entry["messaging"] do
process_messaging(transaction_id, {app_id, page_id, time, messaging})
end
end
defp process_messaging(transaction_id, {app_id, page_id, time, messaging}) do
topic = fetch_topic(messaging)
payload = %{app_id: app_id, messaging: messaging, page_id: page_id,
time: time}
event = %Event{id: UUID.uuid1(), topic: topic, data: payload,
transaction_id: transaction_id, occurred_at: time}
EventBus.notify(event)
end
defp fetch_topic(%{"delivery" => _}),
do: :mb_delivery_received
defp fetch_topic(%{"read" => _}),
do: :mb_read_received
defp fetch_topic(%{"message" => %{"is_echo" => true}}),
do: :mb_message_echo_received
defp fetch_topic(%{"message" => %{"attachments" => _}}),
do: :mb_message_attachments_received
defp fetch_topic(%{"message" => %{"quick_reply" => _}}),
do: :mb_message_quick_reply_received
defp fetch_topic(%{"message" => _}),
do: :mb_message_received
defp fetch_topic(%{"optin" => _}),
do: :mb_optin_received
defp fetch_topic(%{"postback" => _}),
do: :mb_postback_received
defp fetch_topic(%{"referral" => _}),
do: :mb_referral_received
defp fetch_topic(%{"payment" => _}),
do: :mb_payment_received
defp fetch_topic(%{"checkout_update" => _}),
do: :mb_checkout_update_received
defp fetch_topic(%{"pre_checkout" => _}),
do: :mb_pre_checkout_received
defp fetch_topic(%{"account_linking" => _}),
do: :mb_account_linking_received
defp fetch_topic(%{"policy_enforcement" => _}),
do: :mb_policy_enforcement_received
defp fetch_topic(%{"policy-enforcement" => _}),
do: :mb_policy_enforcement_received
defp fetch_topic(%{"app_roles" => _}),
do: :mb_app_roles_received
defp fetch_topic(%{"standby" => _}),
do: :mb_standby_received
defp fetch_topic(%{"pass_thread_control" => _}),
do: :mb_pass_thread_control_received
defp fetch_topic(%{"take_thread_control" => _}),
do: :mb_take_thread_control_received
defp fetch_topic(_),
do: :mb_na_received
end