README.md

# Alexa library for Phoenix

[![Build Status](https://api.travis-ci.org/gabiz/phoenix_alexa.svg)](https://travis-ci.org/gabiz/phoenix_alexa)

## Usage

Add phoenix_alexa as a dependency in your `mix.exs` file.

```elixir
def deps do
  [ { :phoenix_alexa, "~> 0.2.0" } ]
end
```

Update a route with a post request into your alexa controller. 

```elixir
  scope "/", HelloAlexa do
    pipe_through :api

    post "/", AlexaController, :post
  end

```

In the controller add a use statement for `PhoenixAlexa.Controller` and define functions for `launch_request`, `session_end_request` and `intent_request` as follows:

```elixir

defmodule HelloPhoenixAlexa.AlexaController do
  use HelloPhoenixAlexa.Web, :controller
  use PhoenixAlexa.Controller, :post  # param should match route name

  def launch_request(conn, request) do
    response = %Response{} 
        |> set_output_speech(%TextOutputSpeech{text: "Welcome to the Horoscope."}) 

    conn
      |> set_response(response)
  end

  def session_end_request(conn, request) do
    conn
  end

  def intent_request(conn, "GetHoroscope", request) do
    response = case request.request.intent.slots["Sign"]["value"] do
      "Libra" ->
        card = %SimpleCard{}
          |> set_title("Get Horoscope")
          |> set_content("You are going to have an unexpected event today.")

        %Response{} 
          |> set_output_speech(%TextOutputSpeech{text: "You are going to have an unexpected event today."}) 
          |> set_card(card)
          |> set_session_attributes(%{my_key: "my_data"})
          |> set_should_end_session(true)
      _ ->
        %Response{} 
          |> set_output_speech(%TextOutputSpeech{text: "You are going to meet an interesting person."}) 
          |> set_should_end_session(true)
    end

    conn |> set_response(response)
  end
end

```

To authenticate that the request corresponds to your Alexa application add the ValidateApplicationId plug to your router as follows:

```elixir
  pipeline :api do
    plug :accepts, ["json"]
    plug ValidateApplicationId, "amzn1.echo-sdk-ams.app.05dcb1a4-cb45-46c5-a30e-bb3033a0770a"
  end
```