Packages

Integrate agents from the Api.ai natural language processing service with Elixir

Current section

Files

Jump to
apiai lib client intent.ex
Raw

lib/client/intent.ex

defmodule ApiAi.Intent do
@derive Poison.Encoder
defstruct [:name, :auto, :contexts, :templates, :userSays, :responses, :priority]
def get_intent(client, intent_id) do
case ApiAi.Client.get(client, "intents/#{intent_id}") do
{:ok, %HTTPoison.Response{body: body}} ->
{:ok, body}
{:error, error} ->
{:error, error}
end
end
def delete_intent(client, intent_id) do
case ApiAi.Client.delete(client, "intents/#{intent_id}") do
{:ok, %HTTPoison.Response{body: body}} ->
{:ok, body}
{:error, error} ->
{:error, error}
end
end
def add_intent(client, name, requests, responses \\ [], contexts_in \\ [], contexts_out \\ []) do
payload = get_payload(name, requests, responses, contexts_in, contexts_out)
case ApiAi.Client.post(client, "intents", Poison.encode!(payload), :empty, false) do
{:ok, %HTTPoison.Response{body: body}} ->
{:ok, body}
{:error, error} ->
{:error, error}
end
end
def save_intent(client, intent_id, name, requests, responses \\ [], contexts_in \\ [], contexts_out \\ []) do
payload = get_payload(name, requests, responses, contexts_in, contexts_out)
case ApiAi.Client.put(client, "intents/#{intent_id}", Poison.encode!(payload), :empty, false) do
{:ok, %HTTPoison.Response{body: body}} ->
{:ok, body}
{:error, error} ->
{:error, error}
end
end
def get_payload(name, requests, responses \\ [], contexts_in \\ [], contexts_out \\ []) do
%{
name: name,
auto: true,
contexts: contexts_in,
templates: requests,
userDays: [
%{
data: requests |> Enum.chunk(1) |> Enum.map(fn [a] -> %{text: a} end)
}
],
responses: [
%{
resetContexts: false,
action: "",
affectedContexts: contexts_out |> Enum.chunk(1) |> Enum.map(fn [a] -> %{name: a, lifespan: 10} end),
parameters: [
],
messages: [
%{type: 0, speech: responses}
]
}
],
priority: 500000
}
end
end