您当前正在考虑采用Alexa技能管理多个输出链的良好设计。例如,如果我以一个名为“昨天”的意图开始,另一个以“今天”的意图开始。我想将此信息传递给NextIntent链(是从“昨天”开始的链,还是“今天”)。
在意图之间传递信息的最佳方法是什么?
答案 0 :(得分:0)
我正在搜索会话属性
这些可以这样使用
1)我调用的第一个意图是启动链:
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest'
&& handlerInput.requestEnvelope.request.intent.name === 'BesterAutorIntent';
},
handle(handlerInput) {
try {
const speechOutput = "Ich könnte dir sagen wer der beste Autor ist, aber ich muss erst HR fragen ob ich darf";
const attributes = handlerInput.attributesManager.getSessionAttributes();
attributes.kaesebrot = "kaesebrot"
handlerInput.attributesManager.setSessionAttributes(attributes)
return handlerInput.responseBuilder
.speak(speechOutput)
.reprompt()
.withSimpleCard(defaulttext.SKILL_NAME, speechOutput)
.getResponse();
} catch (error) {
console.error(error);
}
},
};
您可以在其中将名为kaesebrot的属性设置为会话属性:
const attributes = handlerInput.attributesManager.getSessionAttributes();
attributes.kaesebrot = "kaesebrot"
handlerInput.attributesManager.setSessionAttributes(attributes)
稍后在另一个功能中,您可以像这样
let counter = 0;
const NextIntentHandler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === 'IntentRequest'
&& request.intent.name === 'AMAZON.NextIntent';
},
handle(handlerInput) {
try {
counter = counter + 1;
const attributes = handlerInput.attributesManager.getSessionAttributes();
speechOutput = counter + " TEST " + attributes.kaesebrot;
return handlerInput.responseBuilder
.speak(speechOutput)
.reprompt()
.withSimpleCard(defaulttext.SKILL_NAME, speechOutput)
.getResponse();
} catch (error) {
console.error(error);
}
},
};
答案 1 :(得分:0)
Tobi的回答很好。
我正在使用sdk v1,并且在dynamoDB上保留属性的代码如下:
exports.handler = function( event, context, callback ) {
const alexa = Alexa.handler( event, context );
alexa.dynamoDBTableName = "alexaTable";
alexa.registerHandlers( handlers );
alexa.execute();
};
...
const handlers = {
...
"AMAZON.NextIntent": function () {
console.log( "AMAZON.NextIntent: " + this.attributes.index );
}
...
}
第一次调用lambda函数时,将创建一个dynamodb表“ alexaTable”,并将自动存储和检索属性。 在上面的示例中,“索引”是从先前的意图继承的属性。
表架构由一个键和一个字段组成。
答案 2 :(得分:0)
SessionAttributes是一种在意图之间保持状态的方法,但是烤箱中有一项新功能,可以专门链接意图并传递插槽值。
这称为“意图链接”,您可以在此处查看更多信息: https://developer.amazon.com/blogs/alexa/post/9ffdbddb-948a-4eff-8408-7e210282ed38/intent-chaining-for-alexa-skill
意图链允许您的技能代码从任何意图(包括LaunchRequest)开始对话框管理。只要交互模型具有对话模型,就可以链接到任何自定义意图。
例如,在YesterdayIntent中,您将在响应构建器中执行以下操作:
handlerInput.responseBuilder.addDelegateDirective({
name: 'TodayIntent',
confirmationStatus: 'NONE',
slots: {} // the slot values to pass go here
})