class Dashbot::DashbotSDK
Public Class Methods
new(apiKey, session = nil)
click to toggle source
# File lib/dashbot.rb, line 10 def initialize(apiKey, session = nil) @apiKey = '' @session = nil @debug = false @urlRoot = 'https://tracker.dashbot.io/track' @platform = 'alexa' @source = 'gem' @version = Dashbot::VERSION if apiKey == nil or apiKey.length == 0 puts "ERROR: invalid apiKey passed" return end if @session and @session['sessionId'] == session['sessionId'] puts "Session Exists: " + @session['sessionId'] return self end # Instance variables @apiKey = apiKey @session = session end
Public Instance Methods
generateResponse(speechText)
click to toggle source
# File lib/dashbot.rb, line 57 def generateResponse(speechText) if speechText[0,7]=='<speak>' return { response:{ outputSpeech:{ type:'SSML', ssml: speechText } } } else return { response:{ outputSpeech:{ type:'Plaintext', text:speechText } } } end end
logIncoming(event, context = nil)
click to toggle source
# File lib/dashbot.rb, line 147 def logIncoming(event, context = nil) url = @urlRoot + '?apiKey=' + @apiKey + '&type=incoming&platform='+ @platform + '&v=' + @version + '-' + @source if @debug puts 'Dashbot Incoming:'+url puts event end begin event = JSON.parse(event) rescue event = event end data={ event:event, context:context } makeRequest(url,data) end
logOutgoing(event,response,context = nil)
click to toggle source
# File lib/dashbot.rb, line 169 def logOutgoing(event,response,context = nil) url = @urlRoot + '?apiKey=' + @apiKey + '&type=outgoing&platform='+ @platform + '&v=' + @version + '-' + @source if @debug puts 'Dashbot Outgoing:'+url puts event puts response end begin event = JSON.parse(event) rescue event = event end begin response = JSON.parse(response) rescue response = response end data={ event:event, response:response, context:context } makeRequest(url,data) end
makeRequest(sURL,payload)
click to toggle source
# File lib/dashbot.rb, line 132 def makeRequest(sURL,payload) begin response = RestClient::Request.execute(method: :post, url: sURL, payload: payload.to_json, headers: {content_type: :json}, timeout: 1) rescue Exception => e puts "Exception occurred: msg = " + e.message puts e.response.body puts e.backtrace.inspect end end
regenerateEvent(intent,slots)
click to toggle source
# File lib/dashbot.rb, line 36 def regenerateEvent(intent,slots) request = { type:'IntentRequest', intent: { name:intent, slots:slots } } event = { session: @session, request:request, context:{ System:{ application:@session['application'], user:@session['user'] } } } return event end
track(intent_name, intent_request, response)
click to toggle source
# File lib/dashbot.rb, line 79 def track(intent_name, intent_request, response) if(!intent_name) puts "ERROR: intent_name cannot be null" return end if @session == nil puts "ERROR: Dashbot SDK has not been initialized. Initalize() method need to have been invoked before tracking" return end event = regenerateEvent(intent_name,intent_request['intent']['slots']) begin response = JSON.parse(response) rescue response = response end #set data if response.is_a? String speechText = response elsif response and response.key?('response') and response['response'].key?('outputSpeech') speechObj = response['response']['outputSpeech'] if speechObj.key?('type') if speechObj['type'] == 'SSML' speechText = response['response']['outputSpeech']['ssml'] elsif speechObj['type'] == 'PlainText' speechText = 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 speechText = nil end responseGenerated = generateResponse(speechText) logIncoming(event) logOutgoing(event,responseGenerated) end