class AlexaSkillResponse

Public Class Methods

new(package, debug: false, rsc: nil, whitelist: {users: nil, devices: nil}) click to toggle source
# File lib/alexa_skillresponse.rb, line 12
def initialize(package, debug: false, rsc: nil, 
               whitelist: {users: nil, devices: nil})
  
  @rscript = RScript.new(type: 'response', debug: debug)
  @package, @debug, @rsc = package, debug, rsc
  puts '@package: ' + @package.inspect if @debug
  
  @users, @devices = whitelist[:users], whitelist[:devices]
  puts '@user_list: ' + @user_list.inspect if @debug
  
end

Public Instance Methods

reload()
Alias for: reset
reset() click to toggle source
# File lib/alexa_skillresponse.rb, line 24
def reset()
  @rscript.reset
end
Also aliased as: reload
run(h) click to toggle source
# File lib/alexa_skillresponse.rb, line 30
def run(h)
  
  puts 'inside run: '.info if @debug

  userid = h[:session][:user][:userId]
  puts ('userid: ' + userid.inspect).debug if @debug
  
  deviceid = h[:context][:System][:device][:deviceId]
  puts ('deviceid: ' + userid.inspect).debug if @debug

  if @users and not @users.include? userid then
    return output('Sorry, unauthorized user.') 
  else
    user = @users[userid]
    puts ('user: ' + user.inspect).debug if @debug
  end
  
  if @devices and not @devices.include? deviceid then
    return output('Sorry, unauthorized device.') 
  else
    device = @devices[deviceid]
    puts ('device: ' + device.inspect).debug if @debug
  end

  req = h[:request]
  
  id = req[:type] == 'IntentRequest' ? req[:intent][:name] : 'welcome'
  puts 'id: ' + id.inspect if @debug

  code, _, attr = @rscript.read ['//response:' + id, @package]
  
  if @rsc then
    
    rsc = @rsc
    puts 'rsc found'.info if @debug
    
    if rsc.registry and user and device then
      
      e = rsc.registry.get_key 'hkey_apps/alexa/accounts'
      euserid = e.xpath('*/id').find {|x| x.text.to_s == userid}        

      if euserid then
        puts ('sending to the registry').info if @debug
        rsc.registry.set_key("hkey_apps/alexa/accounts/" + 
                euserid.parent.name + "/lastsession/device", device)
      end
    end
  end
  
  puts 'code:'  + code.inspect if @debug
  text, mimetype = eval(code)
  
  return ssml_output text if text =~ /<speak/

  case mimetype
  when 'application/json'
    txt_output text
  when 'application/ssml'
    ssml_output text
  else      
    txt_output text, attentive: attr[:attentive]
  end

    
end

Private Instance Methods

output(s) click to toggle source
# File lib/alexa_skillresponse.rb, line 98
def output(s)

  h = { 
    version: "1.0",
    response: {
      outputSpeech: {
        type: "PlainText",
        text: "#{s}"
      }
    }
  }
  
end
ssml_output(s) click to toggle source
# File lib/alexa_skillresponse.rb, line 112
def ssml_output(s)
  
  h = { 
    version: "1.0",
    response: {
      outputSpeech: {
        type: "SSML",
        ssml: ""
      }
    }
  }    
  
  h[:response][:outputSpeech][:ssml] = s
  
  h
end
txt_output(s='I hear you', attentive: false) click to toggle source
# File lib/alexa_skillresponse.rb, line 129
def txt_output(s='I hear you', attentive: false)

  h = { 
    version: "1.0",
    response: {
      outputSpeech: {
        type: "PlainText",
        text: ""
      }
    }
  }

  h[:response][:outputSpeech][:text] = s
  puts 'attentive: ' + attentive.inspect if @debug
  h[:response][:shouldEndSession] = (attentive == 'true') ? false : true

  h
end