wit 3.4.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES.md +14 -0
- data/README.md +30 -42
- data/examples/basic.rb +18 -0
- data/examples/joke.rb +22 -15
- data/examples/quickstart.rb +25 -20
- data/lib/wit.rb +120 -74
- data/wit.gemspec +1 -1
- metadata +4 -4
- data/examples/template.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8238be41a9a6f12e9b5ca05aa47e2df2bb174de7
|
4
|
+
data.tar.gz: 2cb886d831857aaffa697a17443714db24a38214
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0777a1f0a9ca34416275ac36080a2caf8563edba3960d8e269a193106e5c03b1c5b18e21b9f6de01a806b884f65ac11d70a2fd4858343e1659f61baadc79f150
|
7
|
+
data.tar.gz: 7612bc8d01ba0499ea9a374251fbe2d9a8b1f884d9f1dde14d4fd64b90024585880ac49e6ebfee02afc0fedd10952f62b69a5a654d04cdc6ade03f1b4a2bc831
|
data/CHANGES.md
CHANGED
@@ -1,6 +1,20 @@
|
|
1
|
+
## v4.0.0
|
2
|
+
|
3
|
+
After a lot of internal dogfooding and bot building, we decided to change the API in a backwards-incompatible way. The changes are described below and aim to simplify user code and accommodate upcoming features.
|
4
|
+
|
5
|
+
See `./examples` to see how to use the new API.
|
6
|
+
|
7
|
+
### Breaking changes
|
8
|
+
|
9
|
+
- `say` renamed to `send` to reflect that it deals with more than just text
|
10
|
+
- Removed built-in actions `merge` and `error`
|
11
|
+
- Actions signature simplified with `request` and `response` arguments
|
12
|
+
- INFO level replaces LOG level
|
13
|
+
|
1
14
|
## v3.4
|
2
15
|
|
3
16
|
- allows for overriding API version, by setting `WIT_API_VERSION`
|
17
|
+
- `interactive()` mode
|
4
18
|
- warns instead of throwing when validating actions
|
5
19
|
|
6
20
|
### breaking
|
data/README.md
CHANGED
@@ -38,50 +38,30 @@ See the `examples` folder for more examples.
|
|
38
38
|
|
39
39
|
### Wit class
|
40
40
|
|
41
|
-
The Wit constructor takes the following
|
42
|
-
*
|
43
|
-
*
|
41
|
+
The Wit constructor takes a `Hash` with the following symbol keys:
|
42
|
+
* `:access_token` - the access token of your Wit instance
|
43
|
+
* `:actions` - the `Hash` with your actions
|
44
44
|
|
45
45
|
The `actions` `Hash` has action names as keys, and action implementations as values.
|
46
46
|
Action names are symbols, and action implementations are lambda functions (not `Proc`).
|
47
|
-
You need to provide at least an implementation for the special actions `:say`, `:merge` and `:error`.
|
48
47
|
|
49
|
-
A minimal
|
48
|
+
A minimal example looks like this:
|
50
49
|
```ruby
|
50
|
+
require 'wit'
|
51
|
+
|
51
52
|
actions = {
|
52
|
-
:
|
53
|
-
|
53
|
+
send: -> (request, response) {
|
54
|
+
puts("sending... #{response['text']}")
|
54
55
|
},
|
55
|
-
:
|
56
|
-
return context
|
57
|
-
},
|
58
|
-
:error => -> (session_id, context, error) {
|
59
|
-
p error.message
|
56
|
+
my_action: -> (request) {
|
57
|
+
return request['context']
|
60
58
|
},
|
61
59
|
}
|
62
|
-
```
|
63
|
-
|
64
|
-
A custom action takes the following parameters:
|
65
|
-
* `session_id` - a unique identifier describing the user session
|
66
|
-
* `context` - the `Hash` representing the session state
|
67
|
-
|
68
|
-
Example:
|
69
|
-
```ruby
|
70
|
-
require 'wit'
|
71
|
-
client = Wit.new access_token, actions
|
72
|
-
```
|
73
|
-
|
74
|
-
### Logging
|
75
|
-
|
76
|
-
Default logging is to `STDOUT` with `INFO` level.
|
77
60
|
|
78
|
-
|
79
|
-
```ruby
|
80
|
-
Wit.logger.level = Logger::WARN
|
61
|
+
client = Wit.new(access_token: access_token, actions: actions)
|
81
62
|
```
|
82
|
-
See the [Logger class](http://ruby-doc.org/stdlib-2.1.0/libdoc/logger/rdoc/Logger.html) docs for more information.
|
83
63
|
|
84
|
-
### message
|
64
|
+
### .message()
|
85
65
|
|
86
66
|
The Wit [message API](https://wit.ai/docs/http/20160330#get-intent-via-text-link).
|
87
67
|
|
@@ -90,11 +70,11 @@ Takes the following parameters:
|
|
90
70
|
|
91
71
|
Example:
|
92
72
|
```ruby
|
93
|
-
|
94
|
-
|
73
|
+
rsp = client.message('what is the weather in London?')
|
74
|
+
puts("Yay, got Wit.ai response: #{rsp}")
|
95
75
|
```
|
96
76
|
|
97
|
-
### run_actions
|
77
|
+
### .run_actions()
|
98
78
|
|
99
79
|
A higher-level method to the Wit converse API.
|
100
80
|
|
@@ -108,13 +88,13 @@ Example:
|
|
108
88
|
```ruby
|
109
89
|
session = 'my-user-session-42'
|
110
90
|
context0 = {}
|
111
|
-
context1 = client.run_actions
|
91
|
+
context1 = client.run_actions(session, 'what is the weather in London?', context0)
|
112
92
|
p "The session state is now: #{context1}"
|
113
|
-
context2 = client.run_actions
|
93
|
+
context2 = client.run_actions(session, 'and in Brussels?', context1)
|
114
94
|
p "The session state is now: #{context2}"
|
115
95
|
```
|
116
96
|
|
117
|
-
### converse
|
97
|
+
### .converse()
|
118
98
|
|
119
99
|
The low-level Wit [converse API](https://wit.ai/docs/http/20160330#converse-link).
|
120
100
|
|
@@ -125,12 +105,11 @@ Takes the following parameters:
|
|
125
105
|
|
126
106
|
Example:
|
127
107
|
```ruby
|
128
|
-
|
129
|
-
|
108
|
+
rsp = client.converse('my-user-session-42', 'what is the weather in London?', {})
|
109
|
+
puts("Yay, got Wit.ai response: #{rsp}")
|
130
110
|
```
|
131
111
|
|
132
|
-
|
133
|
-
### interactive
|
112
|
+
### .interactive()
|
134
113
|
|
135
114
|
Starts an interactive conversation with your bot.
|
136
115
|
|
@@ -141,6 +120,15 @@ client.interactive
|
|
141
120
|
|
142
121
|
See the [docs](https://wit.ai/docs) for more information.
|
143
122
|
|
123
|
+
### Logging
|
124
|
+
|
125
|
+
Default logging is to `STDOUT` with `INFO` level.
|
126
|
+
|
127
|
+
You can setup your logging level as follows:
|
128
|
+
```ruby
|
129
|
+
Wit.logger.level = Logger::WARN
|
130
|
+
```
|
131
|
+
See the [Logger class](http://ruby-doc.org/stdlib-2.1.0/libdoc/logger/rdoc/Logger.html) docs for more information.
|
144
132
|
|
145
133
|
## Thanks
|
146
134
|
|
data/examples/basic.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'wit'
|
2
|
+
|
3
|
+
if ARGV.length == 0
|
4
|
+
puts("usage: #{$0} <wit-access-token>")
|
5
|
+
exit 1
|
6
|
+
end
|
7
|
+
|
8
|
+
access_token = ARGV[0]
|
9
|
+
ARGV.shift
|
10
|
+
|
11
|
+
actions = {
|
12
|
+
send: -> (request, response) {
|
13
|
+
puts("sending... #{response['text']}")
|
14
|
+
},
|
15
|
+
}
|
16
|
+
|
17
|
+
client = Wit.new(access_token: access_token, actions: actions)
|
18
|
+
client.interactive
|
data/examples/joke.rb
CHANGED
@@ -1,10 +1,16 @@
|
|
1
1
|
require 'wit'
|
2
2
|
|
3
|
+
if ARGV.length == 0
|
4
|
+
puts("usage: #{$0} <wit-access-token>")
|
5
|
+
exit 1
|
6
|
+
end
|
7
|
+
|
8
|
+
access_token = ARGV[0]
|
9
|
+
ARGV.shift
|
10
|
+
|
3
11
|
# Joke example
|
4
12
|
# See https://wit.ai/patapizza/example-joke
|
5
13
|
|
6
|
-
access_token = 'YOUR_ACCESS_TOKEN'
|
7
|
-
|
8
14
|
def first_entity_value(entities, entity)
|
9
15
|
return nil unless entities.has_key? entity
|
10
16
|
val = entities[entity][0]['value']
|
@@ -27,27 +33,28 @@ all_jokes = {
|
|
27
33
|
}
|
28
34
|
|
29
35
|
actions = {
|
30
|
-
:
|
31
|
-
|
36
|
+
send: -> (request, response) {
|
37
|
+
puts("sending... #{response['text']}")
|
32
38
|
},
|
33
|
-
:
|
39
|
+
merge: -> (request) {
|
40
|
+
context = request['context']
|
41
|
+
entities = request['entities']
|
42
|
+
|
34
43
|
context.delete 'joke'
|
35
44
|
context.delete 'ack'
|
36
|
-
category = first_entity_value
|
45
|
+
category = first_entity_value(entities, 'category')
|
37
46
|
context['category'] = category unless category.nil?
|
38
|
-
sentiment = first_entity_value
|
47
|
+
sentiment = first_entity_value(entities, 'sentiment')
|
39
48
|
context['ack'] = sentiment == 'positive' ? 'Glad you liked it.' : 'Hmm.' unless sentiment.nil?
|
40
49
|
return context
|
41
50
|
},
|
42
|
-
:
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
context['joke'] = all_jokes[context['cat'] || 'default'].sample
|
51
|
+
:'select-joke' => -> (request) {
|
52
|
+
context = request['context']
|
53
|
+
|
54
|
+
context['joke'] = all_jokes[context['category'] || 'default'].sample
|
47
55
|
return context
|
48
56
|
},
|
49
57
|
}
|
50
|
-
client = Wit.new access_token, actions
|
51
58
|
|
52
|
-
|
53
|
-
client.
|
59
|
+
client = Wit.new(access_token: access_token, actions: actions)
|
60
|
+
client.interactive
|
data/examples/quickstart.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
require 'wit'
|
2
2
|
|
3
|
-
|
4
|
-
#
|
5
|
-
|
6
|
-
access_token = ARGV.shift
|
7
|
-
unless access_token
|
8
|
-
puts 'usage: ruby examples/quickstart.rb <access-token>'
|
9
|
-
exit
|
3
|
+
if ARGV.length == 0
|
4
|
+
puts("usage: #{$0} <wit-access-token>")
|
5
|
+
exit 1
|
10
6
|
end
|
11
7
|
|
8
|
+
access_token = ARGV[0]
|
9
|
+
ARGV.shift
|
10
|
+
|
11
|
+
# Quickstart example
|
12
|
+
# See https://wit.ai/ar7hur/Quickstart
|
13
|
+
|
12
14
|
def first_entity_value(entities, entity)
|
13
15
|
return nil unless entities.has_key? entity
|
14
16
|
val = entities[entity][0]['value']
|
@@ -17,21 +19,24 @@ def first_entity_value(entities, entity)
|
|
17
19
|
end
|
18
20
|
|
19
21
|
actions = {
|
20
|
-
:
|
21
|
-
|
22
|
+
send: -> (request, response) {
|
23
|
+
puts("sending... #{response['text']}")
|
22
24
|
},
|
23
|
-
:
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
25
|
+
getForecast: -> (request) {
|
26
|
+
context = request['context']
|
27
|
+
entities = request['entities']
|
28
|
+
|
29
|
+
loc = first_entity_value(entities, 'location')
|
30
|
+
if loc
|
31
|
+
context['forecast'] = 'sunny'
|
32
|
+
else
|
33
|
+
context['missingLocation'] = true
|
34
|
+
context.delete('forecast')
|
35
|
+
end
|
36
|
+
|
33
37
|
return context
|
34
38
|
},
|
35
39
|
}
|
36
|
-
|
40
|
+
|
41
|
+
client = Wit.new(access_token: access_token, actions: actions)
|
37
42
|
client.interactive
|
data/lib/wit.rb
CHANGED
@@ -6,149 +6,195 @@ require 'securerandom'
|
|
6
6
|
WIT_API_HOST = ENV['WIT_URL'] || 'https://api.wit.ai'
|
7
7
|
WIT_API_VERSION = ENV['WIT_API_VERSION'] || '20160516'
|
8
8
|
DEFAULT_MAX_STEPS = 5
|
9
|
+
LEARN_MORE = 'Learn more at https://wit.ai/docs/quickstart'
|
9
10
|
|
10
11
|
class WitException < Exception
|
11
12
|
end
|
12
13
|
|
13
|
-
def req(access_token, meth_class, path, params={}, payload={})
|
14
|
+
def req(logger, access_token, meth_class, path, params={}, payload={})
|
14
15
|
uri = URI(WIT_API_HOST + path)
|
15
|
-
uri.query = URI.encode_www_form
|
16
|
+
uri.query = URI.encode_www_form(params)
|
16
17
|
|
17
|
-
|
18
|
+
logger.debug("#{meth_class} #{uri}")
|
19
|
+
|
20
|
+
request = meth_class.new(uri)
|
18
21
|
request['authorization'] = 'Bearer ' + access_token
|
19
22
|
request['accept'] = 'application/vnd.wit.' + WIT_API_VERSION + '+json'
|
20
23
|
request.add_field 'Content-Type', 'application/json'
|
21
24
|
request.body = payload.to_json
|
22
25
|
|
23
|
-
Net::HTTP.start
|
24
|
-
rsp = http.request
|
25
|
-
|
26
|
-
|
27
|
-
|
26
|
+
Net::HTTP.start(uri.host, uri.port, {:use_ssl => uri.scheme == 'https'}) do |http|
|
27
|
+
rsp = http.request(request)
|
28
|
+
if rsp.code.to_i != 200
|
29
|
+
raise WitException.new("HTTP error code=#{rsp.code}")
|
30
|
+
end
|
31
|
+
json = JSON.parse(rsp.body)
|
32
|
+
if json.has_key?('error')
|
33
|
+
raise WitException.new("Wit responded with an error: #{json['error']}")
|
34
|
+
end
|
35
|
+
logger.debug("#{meth_class} #{uri} #{json}")
|
28
36
|
json
|
29
37
|
end
|
30
38
|
end
|
31
39
|
|
32
|
-
def validate_actions(actions)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
40
|
+
def validate_actions(logger, actions)
|
41
|
+
[:send].each do |action|
|
42
|
+
if !actions.has_key?(action)
|
43
|
+
logger.warn "The #{action} action is missing. #{LEARN_MORE}"
|
44
|
+
end
|
37
45
|
end
|
38
46
|
actions.each_pair do |k, v|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
47
|
+
if !k.is_a?(Symbol)
|
48
|
+
logger.warn "The '#{k}' action name should be a symbol"
|
49
|
+
end
|
50
|
+
if !(v.respond_to?(:call) && v.lambda?)
|
51
|
+
logger.warn "The '#{k}' action should be a lambda function"
|
52
|
+
end
|
53
|
+
if k == :send && v.arity != 2
|
54
|
+
logger.warn "The \'send\' action should take 2 arguments: request and response. #{LEARN_MORE}"
|
55
|
+
end
|
56
|
+
if k != :send && v.arity != 1
|
57
|
+
logger.warn "The '#{k}' action should take 1 argument: request. #{LEARN_MORE}"
|
58
|
+
end
|
45
59
|
end
|
46
60
|
return actions
|
47
61
|
end
|
48
62
|
|
49
63
|
class Wit
|
50
|
-
|
51
|
-
|
64
|
+
def initialize(opts = {})
|
65
|
+
@access_token = opts[:access_token]
|
52
66
|
|
53
|
-
|
54
|
-
@logger
|
55
|
-
$stdout.sync = true
|
56
|
-
Logger.new(STDOUT)
|
57
|
-
end.tap { |logger| logger.level = Logger::INFO }
|
67
|
+
if opts[:logger]
|
68
|
+
@logger = opts[:logger]
|
58
69
|
end
|
59
|
-
end
|
60
70
|
|
61
|
-
|
62
|
-
|
63
|
-
|
71
|
+
if opts[:actions]
|
72
|
+
@actions = validate_actions(logger, opts[:actions])
|
73
|
+
end
|
64
74
|
end
|
65
75
|
|
66
76
|
def logger
|
67
|
-
|
77
|
+
@logger ||= begin
|
78
|
+
x = Logger.new(STDOUT)
|
79
|
+
x.level = Logger::INFO
|
80
|
+
x
|
81
|
+
end
|
68
82
|
end
|
69
83
|
|
70
84
|
def message(msg)
|
71
|
-
logger.debug "Message request: msg=#{msg}"
|
72
85
|
params = {}
|
73
86
|
params[:q] = msg unless msg.nil?
|
74
|
-
res = req @access_token, Net::HTTP::Get, '/message', params
|
75
|
-
logger.debug "Message response: #{res}"
|
87
|
+
res = req(logger, @access_token, Net::HTTP::Get, '/message', params)
|
76
88
|
return res
|
77
89
|
end
|
78
90
|
|
79
91
|
def converse(session_id, msg, context={})
|
80
|
-
|
81
|
-
|
92
|
+
if !context.is_a?(Hash)
|
93
|
+
raise WitException.new('context should be a Hash')
|
94
|
+
end
|
82
95
|
params = {}
|
83
96
|
params[:q] = msg unless msg.nil?
|
84
97
|
params[:session_id] = session_id
|
85
|
-
res = req @access_token, Net::HTTP::Post, '/converse', params, context
|
86
|
-
logger.debug "Converse response: #{res}"
|
98
|
+
res = req(logger, @access_token, Net::HTTP::Post, '/converse', params, context)
|
87
99
|
return res
|
88
100
|
end
|
89
101
|
|
90
|
-
def
|
91
|
-
|
102
|
+
def __run_actions(session_id, message, context, i)
|
103
|
+
if i <= 0
|
104
|
+
raise WitException.new('Max steps reached, stopping.')
|
105
|
+
end
|
106
|
+
json = converse(session_id, message, context)
|
107
|
+
if json['type'].nil?
|
108
|
+
raise WitException.new('Couldn\'t find type in Wit response')
|
109
|
+
end
|
92
110
|
|
93
|
-
|
94
|
-
|
111
|
+
logger.debug("Context: #{context}")
|
112
|
+
logger.debug("Response type: #{json['type']}")
|
95
113
|
|
96
|
-
|
114
|
+
# backwards-compatibility with API version 20160516
|
115
|
+
if json['type'] == 'merge'
|
116
|
+
json['type'] = 'action'
|
117
|
+
json['action'] = 'merge'
|
118
|
+
end
|
97
119
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
120
|
+
if json['type'] == 'error'
|
121
|
+
raise WitException.new('Oops, I don\'t know what to do.')
|
122
|
+
end
|
123
|
+
|
124
|
+
if json['type'] == 'stop'
|
125
|
+
return context
|
126
|
+
end
|
127
|
+
|
128
|
+
request = {
|
129
|
+
'session_id' => session_id,
|
130
|
+
'context' => context.clone,
|
131
|
+
'text' => message,
|
132
|
+
'entities' => json['entities']
|
133
|
+
}
|
134
|
+
if json['type'] == 'msg'
|
135
|
+
throw_if_action_missing(:send)
|
136
|
+
response = {
|
137
|
+
'text' => json['msg'],
|
138
|
+
'quickreplies' => json['quickreplies'],
|
139
|
+
}
|
140
|
+
@actions[:send].call(request, response)
|
141
|
+
elsif json['type'] == 'action'
|
142
|
+
action = json['action'].to_sym
|
143
|
+
throw_if_action_missing(action)
|
144
|
+
context = @actions[action].call(request)
|
117
145
|
if context.nil?
|
118
|
-
logger.warn
|
146
|
+
logger.warn('missing context - did you forget to return it?')
|
119
147
|
context = {}
|
120
148
|
end
|
121
|
-
elsif type == 'error'
|
122
|
-
raise WitException.new 'unknown action: error' unless @actions.has_key? :error
|
123
|
-
logger.info 'Executing error'
|
124
|
-
@actions[:error].call session_id, context.clone, WitException.new('Oops, I don\'t know what to do.')
|
125
149
|
else
|
126
|
-
raise WitException.new
|
150
|
+
raise WitException.new("unknown type: #{json['type']}")
|
127
151
|
end
|
128
|
-
|
152
|
+
|
153
|
+
return __run_actions(session_id, nil, context, i - 1)
|
129
154
|
end
|
130
155
|
|
131
156
|
def run_actions(session_id, message, context={}, max_steps=DEFAULT_MAX_STEPS)
|
132
|
-
|
133
|
-
|
157
|
+
if !@actions
|
158
|
+
throw_must_have_actions
|
159
|
+
end
|
160
|
+
if !context.is_a?(Hash)
|
161
|
+
raise WitException.new('context should be a Hash')
|
162
|
+
end
|
163
|
+
return __run_actions(session_id, message, context, max_steps)
|
134
164
|
end
|
135
165
|
|
136
166
|
def interactive(context={}, max_steps=DEFAULT_MAX_STEPS)
|
137
|
-
|
167
|
+
if !@actions
|
168
|
+
throw_must_have_actions
|
169
|
+
end
|
138
170
|
|
171
|
+
session_id = SecureRandom.uuid
|
139
172
|
while true
|
140
173
|
print '> '
|
141
174
|
msg = gets.strip
|
175
|
+
if msg == ''
|
176
|
+
next
|
177
|
+
end
|
142
178
|
|
143
179
|
begin
|
144
180
|
context = run_actions(session_id, msg, context, max_steps)
|
145
181
|
rescue WitException => exp
|
146
|
-
|
182
|
+
logger.error("error: #{exp.message}")
|
147
183
|
end
|
148
184
|
end
|
149
185
|
rescue Interrupt => _exp
|
150
186
|
puts
|
151
187
|
end
|
152
188
|
|
153
|
-
|
189
|
+
def throw_if_action_missing(action_name)
|
190
|
+
if !@actions.has_key?(action_name)
|
191
|
+
raise WitException.new("unknown action: #{action_name}")
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def throw_must_have_actions()
|
196
|
+
raise WitException.new('You must provide the `actions` parameter to be able to use runActions. ' + LEARN_MORE)
|
197
|
+
end
|
198
|
+
|
199
|
+
private :__run_actions
|
154
200
|
end
|
data/wit.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- The Wit Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Ruby SDK for Wit.ai
|
14
14
|
email: help@wit.ai
|
@@ -21,9 +21,9 @@ files:
|
|
21
21
|
- Gemfile
|
22
22
|
- LICENSE
|
23
23
|
- README.md
|
24
|
+
- examples/basic.rb
|
24
25
|
- examples/joke.rb
|
25
26
|
- examples/quickstart.rb
|
26
|
-
- examples/template.rb
|
27
27
|
- lib/wit.rb
|
28
28
|
- wit.gemspec
|
29
29
|
homepage: https://wit.ai
|
@@ -46,7 +46,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
46
46
|
version: '0'
|
47
47
|
requirements: []
|
48
48
|
rubyforge_project:
|
49
|
-
rubygems_version: 2.
|
49
|
+
rubygems_version: 2.5.1
|
50
50
|
signing_key:
|
51
51
|
specification_version: 4
|
52
52
|
summary: Ruby SDK for Wit.ai
|
data/examples/template.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'wit'
|
2
|
-
|
3
|
-
access_token = 'YOUR_ACCESS_TOKEN'
|
4
|
-
|
5
|
-
actions = {
|
6
|
-
:say => -> (session_id, context, msg) {
|
7
|
-
p msg
|
8
|
-
},
|
9
|
-
:merge => -> (session_id, context, entities, msg) {
|
10
|
-
return context
|
11
|
-
},
|
12
|
-
:error => -> (session_id, context, error) {
|
13
|
-
p error.message
|
14
|
-
},
|
15
|
-
}
|
16
|
-
client = Wit.new access_token, actions
|
17
|
-
|
18
|
-
session_id = 'my-user-id-42'
|
19
|
-
client.run_actions session_id, 'your message', {}
|