Current section
Files
Jump to
Current section
Files
lib/phoenix_alexa_controller.ex
defmodule PhoenixAlexa.Controller do
defmacro __using__(method) do
quote do
import PhoenixAlexa.{Controller, Response}
alias PhoenixAlexa.{Request, Response, TextOutputSpeech, SsmlOutputSpeech}
alias PhoenixAlexa.{SimpleCard, StandardCard, LinkAccountCard}
def set_response(conn, status \\ 200, response) do
conn
|> Plug.Conn.put_resp_content_type("application/json")
|> Plug.Conn.resp(status, Poison.encode!(response))
end
def handle_request(conn, request) do
case request.request.type do
"LaunchRequest" ->
launchRequest(conn, request)
"IntentRequest" ->
intentRequest(conn, request.request.intent.name, request)
"SessionEndedRequest" ->
sessionEndedRequest(conn, request)
|> set_response(%{})
end
|> Plug.Conn.send_resp()
end
def unquote(method)(conn, params) do
case Poison.Decode.decode(params, as: %PhoenixAlexa.Request{}) do
%PhoenixAlexa.Request{} = request -> handle_request(conn, request)
_ ->
conn
|> Plug.Conn.put_resp_content_type("application/json")
|> Plug.Conn.send_resp(500, Poison.encode!(%{error: "Internal Error"}))
end
end
def launchRequest(conn, _request) do
conn |> set_response(%Response{})
end
def sessionEndedRequest(conn, request) do
conn
end
def intentRequest(conn, _, request) do
conn |> set_response(%Response{})
end
defoverridable [launchRequest: 2, intentRequest: 3, sessionEndedRequest: 2]
end
end
end