class Alexa::IntentHandlers::Base

Attributes

context[RW]

Public Class Methods

_required_slot_names() click to toggle source

Lets you set required_slot_names per subclass

class IntentHandlers::NewIntent < IntentHandlers::Base

required_slot_names :Function, :CareerLevel

end

handler = IntentHandlers::NewIntent.new handler.required_slot_names # => [:Function, :CareerLevel]

# File lib/alexa/intent_handlers/base.rb, line 18
def _required_slot_names
  @_required_slot_names ||= []
end
inherited(subclass) click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 5
def inherited(subclass)
  subclass.instance_variable_set("@_required_slot_names", _required_slot_names.clone)
end
new(alexa_context) click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 29
def initialize(alexa_context)
  @context = alexa_context
end
required_slot_names(*names) click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 22
def required_slot_names(*names)
  @_required_slot_names = names.map(&:to_s)
end

Public Instance Methods

handle() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 37
def handle
  raise "Override .handle"
end
intent_usage_count() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 57
def intent_usage_count
  @_usage_count ||= context.user.usage_count_for(intent_name: request.intent_name)
end
request() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 33
def request
  context.request
end
response() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 45
def response
  @_response ||= Alexa::Response.new(intent: self)
end
say_welcome?() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 49
def say_welcome?
  @say_welcome == true
end
session() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 41
def session
  request.session
end
slots() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 53
def slots
  request.slots
end

Protected Instance Methods

audio_supported?() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 140
def audio_supported?
  context.device.audio_supported?
end
bye_response() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 128
def bye_response
  @_bye_response ||= Alexa::Responses::Bye.new(intent: self)
end
delegate_response() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 124
def delegate_response
  @_delegate_response ||= Alexa::Responses::Delegate.new
end
dialog_complete?() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 98
def dialog_complete?
  dialog_state == "COMPLETED"
end
dialog_state() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 106
def dialog_state
  request.dialog_state
end
empty_slots() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 72
def empty_slots
  @_empty_slots ||= slots.select { |name, slot| slot.value.nil? }
end
has_all_slots?() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 63
def has_all_slots?
  empty_slots.empty?
end
has_required_slots?() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 67
def has_required_slots?
  non_empty_slot_names = non_empty_slots.map { |_, s| s.name }
  (required_slot_names - non_empty_slot_names).empty?
end
has_unmatched_slots?() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 102
def has_unmatched_slots?
  unmatched_slots.any?
end
intent_confirmed?() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 88
def intent_confirmed?
  # TODO: Move this to Alexa::Request
  request.params["request"]["intent"]["confirmationStatus"] == "CONFIRMED"
end
intent_denied?() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 93
def intent_denied?
  # TODO: Move this to Alexa::Request
  request.params["request"]["intent"]["confirmationStatus"] == "DENIED"
end
non_empty_slots() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 76
def non_empty_slots
  @_non_empty_slots ||= slots.select { |name, slot| !slot.value.nil? }
end
required_slot_names() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 84
def required_slot_names
  self.class._required_slot_names
end
say_welcome!() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 132
def say_welcome!
  @say_welcome = true
end
sorry_response() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 110
def sorry_response
  {
    "version": "1.0",
    sessionAttributes: session,
    "response": {
      "outputSpeech": {
        "type": "PlainText",
        "ssml": "Sorry! Looks like I couldn't process your request, may be try something else?"
      },
      "shouldEndSession": false
    }
  }
end
unmatched_slots() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 80
def unmatched_slots
  @_unmatched_slots ||= slots.select { |_, slot| slot.bad_match? }
end
video_supported?() click to toggle source
# File lib/alexa/intent_handlers/base.rb, line 136
def video_supported?
  context.device.video_supported?
end