Created
March 3, 2019 12:25
-
-
Save willblaschko/cc4f0019da90e8c0b388bf1ae42bca20 to your computer and use it in GitHub Desktop.
Inside the RequestHandler, override the ResponseBuilder to be able to send multiple "speak" requests to concat. This makes it easier to pass between different handlers/functions, each can add a preamble if required (e.g. "Game over..." + "Starting a new game").
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const RequestHandler = { | |
process(handlerInput) { | |
//log our request | |
console.log("REQUEST ENVELOPE = " + JSON.stringify(handlerInput.requestEnvelope)); | |
//required function taken from Alexa SDK | |
function trimOutputSpeech(speechOutput) { | |
if (!speechOutput) { | |
return ''; | |
} | |
var speech = speechOutput.trim(); | |
var length = speech.length; | |
if (speech.startsWith('<speak>') && speech.endsWith('</speak>')) { | |
return speech.substring(7, length - 8).trim(); | |
} | |
return speech; | |
} | |
//required function taken from Alexa SDK | |
function isVideoAppLaunchDirectivePresent() { | |
let responseBuilder = handlerInput.responseBuilder; | |
let response = responseBuilder.getResponse(); | |
if (!response.directives) { | |
return false; | |
} | |
for (var _i = 0, _a = response.directives; _i < _a.length; _i++) { | |
var directive = _a[_i]; | |
if (directive.type === 'VideoApp.Launch') { | |
return true; | |
} | |
} | |
return false; | |
} | |
//add support for multiple "speak" commands to make it easier to pass requests between handlers. | |
handlerInput.responseBuilder.speak = function(speechOutput, playBehavior){ | |
let responseBuilder = handlerInput.responseBuilder; | |
let response = responseBuilder.getResponse(); | |
responseBuilder.outputSpeakArray = responseBuilder.outputSpeakArray || []; | |
responseBuilder.outputSpeakArray.push(trimOutputSpeech(speechOutput+"")); | |
response.outputSpeech = { | |
type: 'SSML', | |
ssml: '<speak>' | |
+ responseBuilder.outputSpeakArray.join(" ") | |
+ '</speak>', | |
playBehavior: playBehavior, | |
}; | |
if (!playBehavior) { | |
delete response.outputSpeech.playBehavior; | |
} | |
return this; | |
}; | |
//add support for multiple "reprompt" commands to make it easier to pass requests between handlers. | |
handlerInput.responseBuilder.reprompt = function(repromptSpeechOutput, playBehavior){ | |
let responseBuilder = handlerInput.responseBuilder; | |
let response = responseBuilder.getResponse(); | |
responseBuilder.outputRepromptArray = responseBuilder.outputRepromptArray || []; | |
responseBuilder.outputRepromptArray.push(trimOutputSpeech(repromptSpeechOutput+"")); | |
response.reprompt = { | |
outputSpeech: { | |
type: 'SSML', | |
ssml: '<speak>' | |
+ responseBuilder.outputRepromptArray.join(" ") | |
+ '</speak>', | |
playBehavior: playBehavior, | |
}, | |
}; | |
if (!playBehavior) { | |
delete response.reprompt.outputSpeech.playBehavior; | |
} | |
if (!isVideoAppLaunchDirectivePresent()) { | |
response.shouldEndSession = false; | |
} | |
return this; | |
}; | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment