Alexa请求拦截器-无法终止会话



是否可以让RequestInterceptor根据RequestIntercepter内部的某些逻辑中止会话?

我有一个已编码的例程,用于验证用户的有效性。如果有效性检查失败,我想向USer播放一条消息并中止会话。

我看到的是,即使我试图杀死RequestInterceptor 中的seesion,LaunchRequest仍然运行

简化版本如下

const Alexa = require('ask-sdk-core');
const requestInterceptor = {
var isUserOk = false;
if(!isUserOk){
process(handlerInput) {
return handlerInput.responseBuilder
.speak("You are inside the Request Interceptor")
.withShouldEndSession(true)
.getResponse();
}
}
}
const launchRequestHandler = {
canHandle(handlerInput) {
return (handlerInput.requestEnvelope.session.new && 
handlerInput.requestEnvelope.request.type === 'LaunchRequest');
},
handle(handlerInput) {
return handlerInput.responseBuilder
.speak("Hi, welcome to the test skill. What is your name?")
.reprompt("You did not respond. Please tell me your name")
.getResponse();
}
};
const skillBuilder = Alexa.SkillBuilders.custom();
exports.handler = skillBuilder
.addRequestHandlers(
launchRequestHandler,
)
.addRequestInterceptors(
requestInterceptor
)
.lambda();

有人能告诉我是否可以让RequestInterceptor中的逻辑终止会话并阻止LaunchRequest处理程序运行吗?

感谢

-bc

它不起作用,因为拦截器不返回响应(请注意,拦截器方法称为process(),而不是handle()(在拦截器中,与其尝试关闭会话,不如使用handlerInput设置一个名为例如validUser:的会话属性

let attributes = handlerInput.attributesManager.getSessionAttributes();
attributes.validUser = isUserOk(); //call your user check function here
handlerInput.attributesManager.setSessionAttributes(attributes);

现在创建一个launchRequestBadUserHandler,在canHandle()中,您要求会话属性为false:

const attributes = handlerInput.attributesManager.getSessionAttributes();
const isUserOk = attributes.validUser;
canHandle(handlerInput) {
return (handlerInput.requestEnvelope.session.new && 
handlerInput.requestEnvelope.request.type === 'LaunchRequest' &&
!isUserOk);

在这个处理程序handle()函数中,发送您最初为拦截器计划的响应。不要忘记在addRequestHandlers()中的原始启动请求处理程序之前调用此处理程序

最新更新