google_assistant 0.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 +7 -0
- data/lib/google_assistant/intent.rb +44 -0
- data/lib/google_assistant.rb +69 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 53b7d9eda7f3958b910ac571b3964ed93ca0f2f7
|
4
|
+
data.tar.gz: 6e3a8ca73808327162fa0fa842315128b3f45e84
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 31669e912fb57fb1be740489c75136f39a237d22655c63baf290335097014d8b8d6d7fc1d5bc66de4dd5e47186f5377996a24c0235ce5b0def123e346b6176af
|
7
|
+
data.tar.gz: 1ec9eb35c84bc48bff2f0167d934f9b2fece72d2986b236ea5538a58cdd77415e1db1e2579cfc52f154541d9d461b984af8e64314f1c9725ff8f9f56b7fbf364
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class GoogleAssistant
|
4
|
+
class StandardIntents
|
5
|
+
|
6
|
+
# Assistant fires MAIN intent for queries like [talk to $action].
|
7
|
+
MAIN = "assistant.intent.action.MAIN"
|
8
|
+
|
9
|
+
# Assistant fires TEXT intent when action issues ask intent.
|
10
|
+
TEXT = "assistant.intent.action.TEXT"
|
11
|
+
|
12
|
+
# Assistant fires PERMISSION intent when action invokes askForPermission.
|
13
|
+
PERMISSION = "assistant.intent.action.PERMISSION"
|
14
|
+
end
|
15
|
+
|
16
|
+
class Intent
|
17
|
+
attr_reader :intent_string
|
18
|
+
|
19
|
+
def initialize(intent_string)
|
20
|
+
@intent_string = intent_string
|
21
|
+
end
|
22
|
+
|
23
|
+
def main(&block)
|
24
|
+
intents[StandardIntents::MAIN] = block
|
25
|
+
end
|
26
|
+
|
27
|
+
def text(&block)
|
28
|
+
intents[StandardIntents::TEXT] = block
|
29
|
+
end
|
30
|
+
|
31
|
+
def call
|
32
|
+
block = intents[intent_string]
|
33
|
+
return if block.nil?
|
34
|
+
|
35
|
+
block.call
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def intents
|
41
|
+
@_intents ||= {}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Dir["#{File.dirname(__FILE__)}/google_assistant/**/*.rb"].each { |file| require file }
|
4
|
+
|
5
|
+
class GoogleAssistant
|
6
|
+
attr_reader :params
|
7
|
+
|
8
|
+
def initialize(params)
|
9
|
+
@params = params
|
10
|
+
end
|
11
|
+
|
12
|
+
def respond_to(&block)
|
13
|
+
yield(self)
|
14
|
+
|
15
|
+
intent.call
|
16
|
+
end
|
17
|
+
|
18
|
+
def intent
|
19
|
+
@_intent ||= Intent.new(intent_string)
|
20
|
+
end
|
21
|
+
|
22
|
+
def tell(message)
|
23
|
+
final_response = { speech_response: {} }
|
24
|
+
|
25
|
+
if is_ssml(message)
|
26
|
+
final_response[:speech_response][:ssml] = message
|
27
|
+
else
|
28
|
+
final_response[:speech_response][:text_to_speech] = message
|
29
|
+
end
|
30
|
+
|
31
|
+
build_response(nil, false, nil, final_response)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def build_response(conversation_token, expect_user_response, expected_input, final_response)
|
37
|
+
response = {}
|
38
|
+
|
39
|
+
response[:conversation_token] = conversation_token if conversation_token
|
40
|
+
response[:expect_user_response] = expect_user_response
|
41
|
+
response[:expected_inputs] = expected_input if expected_input
|
42
|
+
response[:final_response] = final_response if !expect_user_response && final_response
|
43
|
+
|
44
|
+
{
|
45
|
+
json: response.as_json
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def is_ssml(text)
|
50
|
+
if text.nil?
|
51
|
+
handle_error("Missing text")
|
52
|
+
return false
|
53
|
+
end
|
54
|
+
|
55
|
+
text =~ /^<speak\b[^>]*>(.*?)<\/speak>$/
|
56
|
+
end
|
57
|
+
|
58
|
+
def inputs
|
59
|
+
params["inputs"] || handle_error("Missing inputs from request body")
|
60
|
+
end
|
61
|
+
|
62
|
+
def intent_string
|
63
|
+
inputs[0]["intent"] || handle_error("Missing intent from request body")
|
64
|
+
end
|
65
|
+
|
66
|
+
def handle_error(message)
|
67
|
+
raise message
|
68
|
+
end
|
69
|
+
end
|
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: google_assistant
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Aaron Milam
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-26 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Ruby SDK for the Google Assistant API
|
14
|
+
email: armilam@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/google_assistant.rb
|
20
|
+
- lib/google_assistant/intent.rb
|
21
|
+
homepage: https://github.com/armilam/google-assistant-ruby
|
22
|
+
licenses:
|
23
|
+
- MIT
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 2.5.1
|
42
|
+
signing_key:
|
43
|
+
specification_version: 4
|
44
|
+
summary: Ruby SDK for the Google Assistant API
|
45
|
+
test_files: []
|