class AlexaRubykit::Response
Attributes
card[RW]
intents[RW]
reprompt[RW]
request[RW]
response[RW]
response_object[RW]
session[RW]
session_attributes[RW]
speech[RW]
version[RW]
Public Class Methods
new(request=nil, version='1.0')
click to toggle source
Every response needs a shouldendsession and a version attribute We initialize version to 1.0, use add_version to set your own.
# File lib/alexa_rubykit/response.rb, line 13 def initialize(request=nil, version='1.0') @session_attributes = Hash.new @version = version @request = request @intents = request.intent if request && request.type == "INTENT_REQUEST" @directives = [] end
Public Instance Methods
add_audio_url(url, token='', offset=0)
click to toggle source
# File lib/alexa_rubykit/response.rb, line 35 def add_audio_url(url, token='', offset=0) @directives << { 'type' => 'AudioPlayer.Play', 'playBehavior' => 'REPLACE_ALL', 'audioItem' => { 'stream' => { 'token' => token, 'url' => url, 'offsetInMilliseconds' => offset } } } end
add_card(type = nil, title = nil , subtitle = nil, content = nil)
click to toggle source
“type”: “string”,
"title": "string", "subtitle": "string", "content": "string"
# File lib/alexa_rubykit/response.rb, line 86 def add_card(type = nil, title = nil , subtitle = nil, content = nil) # A Card must have a type which the default is Simple. @card = Hash.new() @card[:type] = type || 'Simple' @card[:title] = title unless title.nil? @card[:subtitle] = subtitle unless subtitle.nil? @card[:content] = content unless content.nil? @card end
add_hash_card(card)
click to toggle source
The JSON Spec says order shouldn't matter.
# File lib/alexa_rubykit/response.rb, line 97 def add_hash_card(card) card[:type] = 'Simple' if card[:type].nil? @card = card @card end
add_reprompt(speech_text, ssml = false)
click to toggle source
# File lib/alexa_rubykit/response.rb, line 72 def add_reprompt(speech_text, ssml = false) if ssml @reprompt = { "outputSpeech" => { :type => 'SSML', :ssml => check_ssml(speech_text) } } else @reprompt = { "outputSpeech" => { :type => 'PlainText', :text => speech_text } } end @reprompt end
add_session_attribute(key, value)
click to toggle source
Adds a key,value pair to the session object.
# File lib/alexa_rubykit/response.rb, line 22 def add_session_attribute(key, value) @session_attributes[key.to_sym] = value end
add_speech(speech_text, ssml = false)
click to toggle source
# File lib/alexa_rubykit/response.rb, line 26 def add_speech(speech_text, ssml = false) if ssml @speech = { :type => 'SSML', :ssml => check_ssml(speech_text) } else @speech = { :type => 'PlainText', :text => speech_text } end @speech end
build_response(session_end = true)
click to toggle source
Builds a response. Takes the version, response and should_end_session variables and builds a JSON object.
# File lib/alexa_rubykit/response.rb, line 139 def build_response(session_end = true) response_object = build_response_object(session_end) response = Hash.new response[:version] = @version response[:sessionAttributes] = @session_attributes unless @session_attributes.empty? response[:response] = response_object response.to_json end
build_response_object(session_end = true)
click to toggle source
The response object (with outputspeech, cards and session end) Should rename this, but Amazon picked their names. The only mandatory field is end_session which we default to true.
# File lib/alexa_rubykit/response.rb, line 127 def build_response_object(session_end = true) @response = Hash.new @response[:outputSpeech] = @speech unless @speech.nil? @response[:directives] = @directives unless @directives.empty? @response[:card] = @card unless @card.nil? @response[:reprompt] = @reprompt unless session_end && @reprompt.nil? @response[:shouldEndSession] = session_end @response end
build_session()
click to toggle source
Creates a session object. We pretty much only use this in testing.
# File lib/alexa_rubykit/response.rb, line 117 def build_session # If it's empty assume user doesn't need session attributes. @session_attributes = Hash.new if @session_attributes.nil? @session = { :sessionAttributes => @session_attributes } @session end
confirm_dialog_intent()
click to toggle source
# File lib/alexa_rubykit/response.rb, line 61 def confirm_dialog_intent @directives = [Dialog.confirm_intent_directive(intents)] end
confirm_dialog_slot(slot)
click to toggle source
# File lib/alexa_rubykit/response.rb, line 57 def confirm_dialog_slot(slot) @directives = [Dialog.confirm_slot_directive(slot, intents)] end
delegate_dialog_response()
click to toggle source
# File lib/alexa_rubykit/response.rb, line 49 def delegate_dialog_response @directives = [Dialog.delegate_directive(intents)] end
elicit_dialog_response(slot)
click to toggle source
# File lib/alexa_rubykit/response.rb, line 53 def elicit_dialog_response(slot) @directives = [Dialog.elicit_slot_directive(slot, intents)] end
modify_slot(name, value, confirmation_status)
click to toggle source
# File lib/alexa_rubykit/response.rb, line 65 def modify_slot(name, value, confirmation_status) raise SlotNotFound if @intents['slots'][name].nil? @intents['slots'][name]['value'] = value @intents['slots'][name]['confirmationStatus'] = confirmation_status end
say_response(speech, end_session = true, ssml = false)
click to toggle source
Adds a speech to the object, also returns a outputspeech object.
# File lib/alexa_rubykit/response.rb, line 104 def say_response(speech, end_session = true, ssml = false) output_speech = add_speech(speech,ssml) { :outputSpeech => output_speech, :shouldEndSession => end_session } end
say_response_with_reprompt(speech, reprompt_speech, end_session = true, speech_ssml = false, reprompt_ssml = false)
click to toggle source
Incorporates reprompt in the SDK 2015-05
# File lib/alexa_rubykit/response.rb, line 110 def say_response_with_reprompt(speech, reprompt_speech, end_session = true, speech_ssml = false, reprompt_ssml = false) output_speech = add_speech(speech,speech_ssml) reprompt_speech = add_reprompt(reprompt_speech,reprompt_ssml) { :outputSpeech => output_speech, :reprompt => reprompt_speech, :shouldEndSession => end_session } end
to_s()
click to toggle source
Outputs the version, session object and the response object.
# File lib/alexa_rubykit/response.rb, line 149 def to_s "Version => #{@version}, SessionObj => #{@session}, Response => #{@response}" end
Private Instance Methods
check_ssml(ssml_string)
click to toggle source
# File lib/alexa_rubykit/response.rb, line 155 def check_ssml(ssml_string) ssml_string = ssml_string.strip[0..6] == "<speak>" ? ssml_string : "<speak>" + ssml_string ssml_string.strip[-8..1] == "</speak>" ? ssml_string : ssml_string + "</speak>" end