我已经与Alexa实施了一个多阶段对话框。该技能迭代地要求用户提供计算所需结果的信息。一个接一个地填充各个插槽。到目前为止一切都很好。
现在我想实现HelpIntent:根据Dialog的当前状态,我希望Alexa说出不同的Help-Texts。问题是我不知道如何访问MainIntent的插槽中的数据。
我需要访问MainIntent插槽中的数据,因为这就是我在帮助文本所依赖的对话框中确定当前位置的方式。
所以简而言之:我如何在HelpIntent中处理MainIntent的插槽数据?
谢谢: - )
答案 0 :(得分:2)
您可以在mainIntent引用https://developer.amazon.com/blogs/post/Tx213D2XQIYH864/announcing-the-alexa-skills-kit-for-node-js
中的属性中存储数据槽yourfunction:function(){
this.attributes['CurrentStage'] = 5;
},
在HelpIntent中阅读StageAttribute
AMAZON.HelpIntent': function() {
const speechOutput = this.t('HELP_REPROMPT');
const reprompt = this.t('HELP_REPROMPT');
console.log("Inside HelpIntent:" + this.t('HELP_REPROMPT'));
console.log("Current Game Stage is " +this.attributes['CurrentStage']);
var iCurrStage = this.attributes['CurrentStage'];
switch(expression) {
case 1:
this.emit(':ask', "You are at Stage 1", reprompt);
break;
case 2:
this.emit(':ask', "You are at Stage 2", reprompt);
break;
default:
this.emit(':ask', "hmmm.. errror", reprompt);
break;
}
this.emit(':ask', speechOutput, reprompt);
},
答案 1 :(得分:2)
您似乎可能会使用alexa-sdk
中的Skill State Management获取您正在寻找的行为。
实质上,你需要定义一系列你的技能所处的状态,并为每个状态定义一个意图处理程序。
您可能会有一系列阶段作为您的"状态如下:
const states = {
STAGE_ONE: "_STAGEONE",
STAGE_TWO: "_STAGETWO",
STAGE_N: "_STAGE_N"
}
然后使用Alexa.CreateStateHandler
函数为每个阶段定义不同的IntentHandler,如下所示
const StageOneHandler = Alexa.CreateStateHandler(states.STAGE_ONE, {
'MainIntent': function(){ ... },
'HelpIntent': function(){ ... },
...
}
使用这种方法,你需要定义每个在该手段中每个阶段都有效的意图的行为......也就是说,如果你有4个阶段,那么你最终可能会以5 {{{ 1}}函数(每个状态一个,以及状态未设置时的一个)。每个helpintent都能够返回交互阶段唯一的响应
最后,这是用你的alexa技能注册所有状态处理程序的问题。从文档中我们有这个例子:
Amazon.HelpIntent
然后在各种处理程序中的每个exports.handler = function (event, context, callback) {
const alexa = Alexa.handler(event, context, callback);
alexa.appId = appId;
alexa.registerHandlers(StageOneHandler, StageTwoHandler,...);
alexa.execute();
};
函数中,您需要显式设置下一个状态应该是什么...例如,在收到STAGE_ONE答案后,您可以使用{{1}将新状态设置为STAGE_TWO }