Current section
Files
Jump to
Current section
Files
lib/wit/client.ex
defmodule Wit.Client do
@moduledoc """
WIT AI integration for intent handling and NLP
"""
@token Application.get_env(:virtuoso, :wit_server_access_token)
@message_url "https://api.wit.ai/message?"
@api_version "20171201"
@doc"""
Requests a Wit AI NLP analysis. Returns a response object.
"""
def get(text) do
options = [params: %{
"q" => URI.encode(text),
"v" => @api_version,
}]
headers = ["Authorization": "Bearer #{@token}", "Accept": "Application/json; Charset=utf-8"]
url = @message_url
|> create_url(options |> hd |> elem(1))
response =
url
|> HTTPoison.get!(headers)
{:ok, response}
end
@doc """
Creates a request URL according to Wit specs
"""
defp create_url(endpoint, %{} = params) do
params
|> Map.keys
|> Enum.reverse
|> Enum.reduce(endpoint, fn(key, url) ->
_append_to_url(url, key, Map.get(params, key))
end)
end
defp _append_to_url(url, _key, ""), do: url
defp _append_to_url(url, key, param), do: "#{url}&#{key}=#{param}"
end