class VoiceLabs::VoiceInsights

Public Class Methods

new(appToken, session) click to toggle source
# File lib/voicelabs.rb, line 14
def initialize(appToken, session)  
  
  if session == nil or appToken == nil or appToken.length == 0
    puts "ERROR: invalid session or appToken passed"
    return
  end

  if !session.key?("user") or !session["user"].key?("userId")
    puts "ERROR: Cannot find User details in the session object"
    return
  end

  if !session.key?("sessionId")
    puts "ERROR: No sessionId found in session object"
    return
  end

  if @session and @session['sessionId'] == session['sessionId']
    puts "Session Exists: " + @session['sessionId']
    return self
  end

  # Instance variables
  @appToken = appToken  
  @session = session 

  p = Hash.new
  p['app_token'] = appToken
  p['user_hashed_id'] = Digest::MD5.hexdigest(session['user']['userId'])
  p['session_id'] = session['sessionId'];
  p['event_type'] = 'INITIALIZE'
  p['data'] = nil

  sendVLEvent(p)

end

Public Instance Methods

sendVLEvent(payload) click to toggle source

utility method of posting event data to voicelabs

# File lib/voicelabs.rb, line 111
def sendVLEvent(payload) 
  begin
    # puts "payload: " + payload.to_json
    sURL = "https://api.voicelabs.co/events?auth_token=" + @appToken + "&sdk=ruby_0.0.1"

    response = RestClient::Request.execute(method: :post, 
                                url: sURL,
                                payload: payload.to_json, 
                                headers: {content_type: :json},
                                timeout: 1)
    puts "response: " + response.to_json

  rescue Exception => e
    puts "Exception occurred: msg = " + e.message
    puts e.backtrace.inspect
  end

end
track(intent_name, intent_request, response) click to toggle source
# File lib/voicelabs.rb, line 51
def track(intent_name, intent_request, response)  

  if(!intent_name)
      puts "ERROR: intent_name cannot be null"
      return
  end

  if @session == nil
      puts "ERROR: Voice Insights has not been initialized. Initalize() method need to have been invoked before tracking"
      return
  end
        
  p =  Hash.new
  p['app_token'] = @appToken
  p['user_hashed_id'] = Digest::MD5.hexdigest(@session['user']['userId'])
  p['session_id'] = @session['sessionId'];
  p['event_type'] = 'SPEECH'
  p['intent'] = intent_name
  p['data'] = {}
  
  #set intent_request
  if intent_request.is_a?(Hash) and intent_request.key?('intent') and intent_request['intent'].key?('slots')
      p['data']['metadata'] = intent_request['intent']['slots']
  else
      p['data']['metadata'] = nil
  end
  
  #set data
  if response.is_a? String
      p['data']['speech'] = response

  elsif response and response.key?('response') and response['response'].key?('outputSpeech')

      speechObj = response['response']['outputSpeech']

      if speechObj.key?('type')
          
          if speechObj['type'] == 'SSML'
              p['data']['speech'] = response['response']['outputSpeech']['ssml']

          elsif speechObj['type'] == 'PlainText'
              p['data']['speech'] = response['response']['outputSpeech']['text']

          else
              puts "ERROR: passed a response object with an unknown Type"
          end

      else
          puts "ERROR: passed a response object thats not an Alexa response"
      end

  else
      p['data']['speech'] = nil
  end

  resp = sendVLEvent(p)             
  return resp    
end