README.md

[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/hyperium/hyper/master/LICENSE)

# Wit
Elixir client for the Wit API. Wit is the natural language engine for creating Bots.

## Installation

If [available in Hex](https://hex.pm/docs/publish), the package can be installed as:

  1. Add elixir_wit to your list of dependencies in `mix.exs`:

        def deps do
          [{:elixir_wit, "~> 0.0.1"}]
        end

## Usage

### 1. Create action module
To handle the different actions from the Wit.ai API you have to create a module that implements the default callbacks and also custom actions if you have any.

The custom actions can be created by `defaction` macro. It expected to have two parameters i.e. `session` which is the session id and the `context` which contains the context of the conversation. **The name of the custom action should match the one registered in Wit.**

```
defmodule WeatherActions do
  use Wit.Actions

  def say(session, context, message) do
    # Send the message to the user
  end

  def merge(session, context, message) do
    context # Return the updated context
  end

  def error(session, context, error) do
    # Handle error
  end

  defaction fetch_weather(session, context) do
    context # Return the updated context
  end
end

```

### 2. Call the run action
After you have create the action module you can call the Wit using the module which will keep on calling the wit `/converse` API until the API returns `stop`.

```
Wit.run_actions(access_token, session_id, WeatherActions, "What is the weather?")
```

You can also use `interactive\4` which creates an interactive session with your model in Wit.

## Low Level APIs
The client also provides the functions to call the low level `message` and `converse` API.