alexa_ruby 1.0.4 → 1.1.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/Gemfile.lock +1 -1
- data/README.md +169 -18
- data/lib/alexa_ruby/request/base_request/session.rb +9 -1
- data/lib/alexa_ruby/response/response.rb +1 -0
- data/lib/alexa_ruby/version.rb +1 -1
- data/lib/alexa_ruby.rb +1 -1
- metadata +3 -3
- /data/lib/alexa_ruby/request/base_request/{context/user.rb → user.rb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 614cfabdfe8ff5b456181b71845955ef4f42cc70
|
4
|
+
data.tar.gz: 272c62255de2f0ffe5ad774fa3cb87a331e6253d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca93f9950a01cb3dcbf3337ba4e669d8b7de7aa9af49cc3d9800ef3205286a04fd6a459838026ada39b1e2dc6be877df869061018863824f2aca5bd730d8f035
|
7
|
+
data.tar.gz: 16a2a33ca5ec93c3af3a0c7cd519dd4d3ec89871ef2afa907a4b659055ee05cb54db0825a87ee165dd24e31c334b397c459bae2596e113077faa069485508629
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -31,6 +31,7 @@ $ gem install alexa_ruby
|
|
31
31
|
|
32
32
|
|Resource|URL|
|
33
33
|
|---|---|
|
34
|
+
|Amazon Alexa Skill Kit docs|[https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-interface-reference](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-interface-reference)|
|
34
35
|
|Rubydoc|[http://www.rubydoc.info/gems/alexa_ruby](http://www.rubydoc.info/gems/alexa_ruby)|
|
35
36
|
|Source|[https://github.com/mulev/alexa-ruby](https://github.com/mulev/alexa-ruby)|
|
36
37
|
|Bugs|[https://github.com/mulev/alexa-ruby/issues](https://github.com/mulev/alexa-ruby/issues)|
|
@@ -38,33 +39,183 @@ $ gem install alexa_ruby
|
|
38
39
|
## Usage
|
39
40
|
|
40
41
|
Gem provides a possibility to easily handle requests from Amazon Alexa service and build responses to given requests.
|
41
|
-
|
42
|
+
|
43
|
+
### Getting started
|
44
|
+
|
45
|
+
AlexaRuby usage is quite simple, to start you need to require gem in your ruby
|
46
|
+
file and pass it JSON request from Amazon Alexa service.
|
47
|
+
Here and below all examples will be based on Roda routing tree framework, but
|
48
|
+
you can use any other -- AlexaRuby is a framework independent gem.
|
42
49
|
|
43
50
|
```ruby
|
51
|
+
require 'roda'
|
44
52
|
require 'alexa_ruby'
|
45
53
|
|
46
|
-
|
47
|
-
|
54
|
+
class App < Roda
|
55
|
+
route do |r|
|
56
|
+
r.post do
|
57
|
+
r.on 'alexa' do
|
58
|
+
alexa = AlexaRuby.new(r.body.read)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
```
|
64
|
+
|
65
|
+
After initializing new AlexaRuby instance you will have a possibility to access
|
66
|
+
all parameters of the received request.
|
67
|
+
|
68
|
+
#### General request parameters
|
69
|
+
|
70
|
+
|Access path|Description|
|
71
|
+
|---|---|
|
72
|
+
|alexa.request.json|given JSON request|
|
73
|
+
|alexa.request.version|request version, typically "1.0"|
|
74
|
+
|alexa.request.type|request type, can be :launch, :intent, :session_ended or :audio_player|
|
75
|
+
|alexa.request.id|request ID|
|
76
|
+
|alexa.request.timestamp|request timestamp|
|
77
|
+
|alexa.request.locale|request locale|
|
78
|
+
|
79
|
+
#### Session parameters
|
80
|
+
|
81
|
+
Notice that user data exists in two scopes -- session and context.
|
82
|
+
|
83
|
+
|Access path|Description|
|
84
|
+
|---|---|
|
85
|
+
|alexa.request.session.id|session ID|
|
86
|
+
|alexa.request.session.attributes|array with all session attributes|
|
87
|
+
|alexa.request.session.end_reason|session end reason, can be :user_quit, :processing_error or :user_idle|
|
88
|
+
|alexa.request.session.error|hash with session error info|
|
89
|
+
|alexa.request.session.state|current session state, can be :new, :old or :ended|
|
90
|
+
|alexa.request.session.user.id|skill user ID|
|
91
|
+
|alexa.request.session.user.access_token|user access token if account linking is enabled and user is authenticated|
|
92
|
+
|alexa.request.session.user.permissions_token|user permissions token|
|
93
|
+
|
94
|
+
#### Context parameters
|
95
|
+
|
96
|
+
Notice that user data exists in two scopes -- session and context.
|
97
|
+
|
98
|
+
|Access path|Description|
|
99
|
+
|---|---|
|
100
|
+
|alexa.request.context.app_id|Alexa application ID|
|
101
|
+
|alexa.request.context.api_endpoint|Alexa API endpoint|
|
102
|
+
|alexa.request.context.user.id|skill user ID|
|
103
|
+
|alexa.request.context.user.access_token|user access token if account linking is enabled and user is authenticated|
|
104
|
+
|alexa.request.context.user.permissions_token|user permissions token|
|
105
|
+
|alexa.request.context.device.id|user device ID|
|
106
|
+
|alexa.request.context.device.interfaces|interfaces, supported by user device|
|
107
|
+
|
108
|
+
#### Intent request parameters
|
109
|
+
|
110
|
+
|Access path|Description|
|
111
|
+
|---|---|
|
112
|
+
|alexa.request.intent_name|given intent name|
|
113
|
+
|alexa.request.dialog_state|state of dialog with user, can be :started, :in_progress or :completed|
|
114
|
+
|alexa.request.confirmation_status|user confirmation status, can be :unknown, :confirmed or :denied|
|
115
|
+
|alexa.request.slots|array with all slots from intent|
|
116
|
+
|
117
|
+
#### Audio player request parameters
|
118
|
+
|
119
|
+
|Access path|Description|
|
120
|
+
|---|---|
|
121
|
+
|alexa.request.playback_state|current playback state|
|
122
|
+
|alexa.request.playback_offset|current playback offset in milliseconds|
|
123
|
+
|alexa.request.error_type|playback error type|
|
124
|
+
|alexa.request.error_message|playback error message explaining error|
|
125
|
+
|alexa.request.error_playback_token|audio player token of failed playback|
|
126
|
+
|alexa.request.error_player_activity|audio player activity in moment of failure|
|
127
|
+
|
128
|
+
### Building response
|
129
|
+
|
130
|
+
To build a response take your freshly initialized `alexa` and start using `alexa.response` methods.
|
131
|
+
|
132
|
+
#### Add session attributes
|
133
|
+
|
134
|
+
It is possible to add one attribute to session scope:
|
135
|
+
|
136
|
+
```ruby
|
137
|
+
alexa.response.add_session_attribute('key', 'value')
|
138
|
+
```
|
139
|
+
|
140
|
+
Exception will be raised if attribute already exists in the session scope.
|
141
|
+
If you want to overwrite it, call:
|
142
|
+
|
143
|
+
```ruby
|
144
|
+
alexa.response.add_session_attribute('key', 'value_2', true)
|
145
|
+
```
|
146
|
+
|
147
|
+
You can also add a pack of attributes. To overwrite all existing ones call:
|
148
|
+
|
149
|
+
```ruby
|
150
|
+
alexa.response.add_session_attributes(key: 'value', key_2: 'value_2')
|
48
151
|
```
|
49
152
|
|
50
|
-
|
51
|
-
|
52
|
-
```
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
153
|
+
To add new attributes and save existing ones call:
|
154
|
+
|
155
|
+
```ruby
|
156
|
+
alexa.response.merge_session_attributes(key: 'value', key_2: 'value_2')
|
157
|
+
```
|
158
|
+
|
159
|
+
#### Add card
|
160
|
+
|
161
|
+
Supported card types are: Simple, Standard and LinkAccount.
|
162
|
+
|
163
|
+
```ruby
|
164
|
+
card = {
|
165
|
+
type: 'Standard', title: 'Test', content: 'test',
|
166
|
+
small_image_url: 'https://test.ru/example_small.jpg',
|
167
|
+
large_image_url: 'https://test.ru/example_large.jpg'
|
63
168
|
}
|
169
|
+
alexa.response.add_card(card)
|
170
|
+
```
|
171
|
+
|
172
|
+
#### Add audio player directive
|
173
|
+
|
174
|
+
Supported directives - AudioPlayer.Play and AudioPlayer.Stop.
|
175
|
+
To start playback call:
|
176
|
+
|
177
|
+
```ruby
|
178
|
+
params = { url: 'https://my-site.com/my-stream', token: 'test', offset: 0 }
|
179
|
+
alexa.response.add_audio_player_directive(:start, params)
|
180
|
+
```
|
64
181
|
|
182
|
+
To stop playback call:
|
183
|
+
|
184
|
+
```ruby
|
185
|
+
alexa.response.add_audio_player_directive(:stop)
|
65
186
|
```
|
66
187
|
|
67
|
-
|
188
|
+
#### Get current state of response encoded in JSON
|
189
|
+
|
190
|
+
```ruby
|
191
|
+
alexa.response.json
|
192
|
+
```
|
193
|
+
|
194
|
+
#### Add output speech to response
|
195
|
+
|
196
|
+
Ask user a question and wait for response (session will remain open):
|
197
|
+
|
198
|
+
```ruby
|
199
|
+
question = 'What can I do for you?'
|
200
|
+
|
201
|
+
alexa.response.ask(question) # will add outputSpeech node
|
202
|
+
alexa.response.ask(question, question) # outputSpeech node and reprompt node
|
203
|
+
alexa.response.ask(question, question, true) # outputSpeech node, reprompt node and both will be converted into SSML
|
204
|
+
|
205
|
+
alexa.response.ask!(question) # will add outputSpeech node and return JSON encoded response object
|
206
|
+
```
|
207
|
+
|
208
|
+
Tell something to user and end conversation (session will be closed):
|
209
|
+
|
210
|
+
```ruby
|
211
|
+
speech = 'You are awesome!'
|
212
|
+
|
213
|
+
alexa.response.tell(speech) # will add outputSpeech node
|
214
|
+
alexa.response.tell(speech, speech) # outputSpeech node and reprompt node
|
215
|
+
alexa.response.tell(speech, speech, true) # outputSpeech node, reprompt node and both will be converted into SSML
|
216
|
+
|
217
|
+
alexa.response.tell!(speech) # will add outputSpeech node and return JSON encoded response object
|
218
|
+
```
|
68
219
|
|
69
220
|
## Testing
|
70
221
|
|
@@ -89,4 +240,4 @@ All development is made only in develop branch before being merged to master.
|
|
89
240
|
|
90
241
|
## License
|
91
242
|
|
92
|
-
AlexaRuby is released under [MIT license](https://github.com/mulev/alexa-ruby/blob/master/LICENSE).
|
243
|
+
AlexaRuby is released under the [MIT license](https://github.com/mulev/alexa-ruby/blob/master/LICENSE).
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module AlexaRuby
|
2
2
|
# Amazon Alexa user session
|
3
3
|
class Session
|
4
|
-
attr_reader :id, :attributes, :end_reason, :error
|
4
|
+
attr_reader :id, :attributes, :user, :end_reason, :error
|
5
5
|
attr_accessor :state
|
6
6
|
|
7
7
|
# Initialize new Session
|
@@ -15,6 +15,7 @@ module AlexaRuby
|
|
15
15
|
@state = @session[:new] ? :new : :old
|
16
16
|
@id = @session[:sessionId]
|
17
17
|
@attributes = @session[:attributes] || {}
|
18
|
+
@user = load_user unless @session[:user].nil?
|
18
19
|
end
|
19
20
|
|
20
21
|
# Set session end reason
|
@@ -56,5 +57,12 @@ module AlexaRuby
|
|
56
57
|
def invalid_session?
|
57
58
|
@session.nil?
|
58
59
|
end
|
60
|
+
|
61
|
+
# Initialize user parameters
|
62
|
+
#
|
63
|
+
# @return [Object] new User object instance
|
64
|
+
def load_user
|
65
|
+
User.new(@session[:user])
|
66
|
+
end
|
59
67
|
end
|
60
68
|
end
|
@@ -18,6 +18,7 @@ module AlexaRuby
|
|
18
18
|
#
|
19
19
|
# @param key [String] atrribute key
|
20
20
|
# @param value [String] attribute value
|
21
|
+
# @param rewrite [Boolean] rewrite if key already exists?
|
21
22
|
# @raise [ArgumentError] if session key is already added and
|
22
23
|
# rewrite is set to false
|
23
24
|
def add_session_attribute(key, value, rewrite = false)
|
data/lib/alexa_ruby/version.rb
CHANGED
data/lib/alexa_ruby.rb
CHANGED
@@ -7,8 +7,8 @@ require 'alexa_ruby/alexa'
|
|
7
7
|
require 'alexa_ruby/request/base_request'
|
8
8
|
require 'alexa_ruby/request/base_request/context'
|
9
9
|
require 'alexa_ruby/request/base_request/context/device'
|
10
|
-
require 'alexa_ruby/request/base_request/context/user'
|
11
10
|
require 'alexa_ruby/request/base_request/session'
|
11
|
+
require 'alexa_ruby/request/base_request/user'
|
12
12
|
require 'alexa_ruby/request/audio_player_request'
|
13
13
|
require 'alexa_ruby/request/launch_request'
|
14
14
|
require 'alexa_ruby/request/intent_request'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alexa_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Mulev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -110,8 +110,8 @@ files:
|
|
110
110
|
- lib/alexa_ruby/request/base_request.rb
|
111
111
|
- lib/alexa_ruby/request/base_request/context.rb
|
112
112
|
- lib/alexa_ruby/request/base_request/context/device.rb
|
113
|
-
- lib/alexa_ruby/request/base_request/context/user.rb
|
114
113
|
- lib/alexa_ruby/request/base_request/session.rb
|
114
|
+
- lib/alexa_ruby/request/base_request/user.rb
|
115
115
|
- lib/alexa_ruby/request/intent_request.rb
|
116
116
|
- lib/alexa_ruby/request/intent_request/slot.rb
|
117
117
|
- lib/alexa_ruby/request/launch_request.rb
|
File without changes
|