class GoogleAssistant::Assistant
Constants
- InvalidInputPrompt
- InvalidIntent
- InvalidMessage
- InvalidPermission
- InvalidPermissionContext
- MissingRequestInputs
- MissingRequestIntent
Attributes
params[R]
response[R]
Public Class Methods
new(params, response)
click to toggle source
# File lib/google_assistant/assistant.rb, line 17 def initialize(params, response) @params = params @response = response end
Public Instance Methods
arguments()
click to toggle source
# File lib/google_assistant/assistant.rb, line 34 def arguments @_arguments ||= inputs[0]["arguments"].map do |argument| Argument.from(argument) end end
ask(prompt:, no_input_prompt: [])
click to toggle source
# File lib/google_assistant/assistant.rb, line 73 def ask(prompt:, no_input_prompt: []) raise InvalidInputPrompt if prompt.nil? || prompt.empty? no_input_prompt = [*no_input_prompt].compact prompt = build_input_prompt(prompt, no_input_prompt) expected_intent = build_expected_intent(StandardIntents::TEXT) build_ask_response(prompt, expected_intent) end
ask_for_permission(context:, permissions:)
click to toggle source
# File lib/google_assistant/assistant.rb, line 83 def ask_for_permission(context:, permissions:) raise InvalidPermissionContext if context.nil? || context.empty? permissions = [*permissions].compact raise InvalidPermission unless Permission.valid?(permissions) raise InvalidPermission if permissions.size == 0 prompt = build_input_prompt("placeholder for permission") expected_intent = build_expected_intent(StandardIntents::PERMISSION, permissions, context) build_ask_response(prompt, expected_intent) end
conversation()
click to toggle source
# File lib/google_assistant/assistant.rb, line 47 def conversation @_conversation ||= Conversation.new(conversation_params) end
device()
click to toggle source
# File lib/google_assistant/assistant.rb, line 55 def device @_device ||= Device.new(device_params) end
intent()
click to toggle source
# File lib/google_assistant/assistant.rb, line 30 def intent @_intent ||= Intent.new(intent_string) end
permission_granted?()
click to toggle source
# File lib/google_assistant/assistant.rb, line 40 def permission_granted? arguments.any? do |argument| argument.is_a?(PermissionArgument) && argument.permission_granted? end end
respond_to() { |self| ... }
click to toggle source
# File lib/google_assistant/assistant.rb, line 22 def respond_to(&block) yield(self) response.headers["Google-Assistant-API-Version"] = "v1" intent.call end
tell(message)
click to toggle source
# File lib/google_assistant/assistant.rb, line 59 def tell(message) raise InvalidMessage if message.nil? || message.empty? final_response = { speech_response: {} } if is_ssml?(message) final_response[:speech_response][:ssml] = message else final_response[:speech_response][:text_to_speech] = message end build_response(nil, false, nil, final_response) end
user()
click to toggle source
# File lib/google_assistant/assistant.rb, line 51 def user @_user ||= User.new(user_params) end
Private Instance Methods
build_ask_response(prompt, expected_intent)
click to toggle source
# File lib/google_assistant/assistant.rb, line 113 def build_ask_response(prompt, expected_intent) expected_inputs = [{ input_prompt: prompt, possible_intents: [expected_intent] }] build_response( conversation.dialog_state, true, expected_inputs, nil ) end
build_expected_intent(intent, permissions = nil, context = nil)
click to toggle source
# File lib/google_assistant/assistant.rb, line 138 def build_expected_intent(intent, permissions = nil, context = nil) raise InvalidIntent if intent.nil? || intent.empty? expected_intent = { intent: intent } unless context.nil? || permissions.nil? expected_intent[:input_value_spec] = { permission_value_spec: { opt_context: context, permissions: permissions } } end expected_intent end
build_input_prompt(initial_prompt, no_inputs = [])
click to toggle source
# File lib/google_assistant/assistant.rb, line 98 def build_input_prompt(initial_prompt, no_inputs = []) initial_prompts = [ { prompt_type(initial_prompt) => initial_prompt } ] no_input_prompts = no_inputs.map do |prompt| { prompt_type(prompt) => prompt } end { initial_prompts: initial_prompts, no_input_prompts: no_input_prompts } end
build_response(dialog_state, expect_user_response, expected_input, final_response)
click to toggle source
# File lib/google_assistant/assistant.rb, line 127 def build_response(dialog_state, expect_user_response, expected_input, final_response) response = {} response[:conversation_token] = dialog_state.to_json if dialog_state response[:expect_user_response] = expect_user_response response[:expected_inputs] = expected_input if expected_input response[:final_response] = final_response if !expect_user_response && final_response response end
conversation_params()
click to toggle source
# File lib/google_assistant/assistant.rb, line 173 def conversation_params params["conversation"] || {} end
device_params()
click to toggle source
# File lib/google_assistant/assistant.rb, line 181 def device_params params["device"] || {} end
inputs()
click to toggle source
# File lib/google_assistant/assistant.rb, line 163 def inputs raise MissingRequestInputs if params["inputs"].nil? params["inputs"] end
intent_string()
click to toggle source
# File lib/google_assistant/assistant.rb, line 168 def intent_string raise MissingRequestIntent if inputs[0]["intent"].nil? inputs[0]["intent"] end
is_ssml?(text)
click to toggle source
# File lib/google_assistant/assistant.rb, line 155 def is_ssml?(text) text =~ /^<speak\b[^>]*>(.*?)<\/speak>$/ end
prompt_type(text)
click to toggle source
# File lib/google_assistant/assistant.rb, line 159 def prompt_type(text) is_ssml?(text) ? :ssml : :text_to_speech end
user_params()
click to toggle source
# File lib/google_assistant/assistant.rb, line 177 def user_params params["user"] || {} end