2

我已经实现了与 Alexa 的多阶段对话。该技能反复向用户询问信息以计算所需的结果。一个接一个地填满各个插槽。到目前为止,一切都很好。

现在我要实现HelpIntent:根据Dialog的当前状态,我想让Alexa说出不同的Help-Texts。问题是我不知道如何访问 MainIntent 插槽中的数据。

我需要访问 MainIntent 插槽中的数据,因为这就是我确定帮助文本所依赖的对话框中当前位置的方式。

所以简而言之:如何在 HelpIntent 中访问 MainIntent 的插槽数据?

谢谢 :-)

4

2 回答 2

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);
    },
于 2018-01-27T11:10:26.917 回答
2

似乎您可能alexa-sdk.

本质上,您需要定义您的技能可以处于的一系列状态,并为每个状态定义一个意图处理程序。

您可能有一系列阶段,因为您的“状态如下:

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 个Amazon.HelpIntent函数(每个状态一个以及未设置状态时的一个)。每个帮助意图都将能够返回交互阶段唯一的响应

最后,使用您的 alexa 技能注册所有状态处理程序。从文档中我们有这个例子:

exports.handler = function (event, context, callback) {
  const alexa = Alexa.handler(event, context, callback);
  alexa.appId = appId;

  alexa.registerHandlers(StageOneHandler, StageTwoHandler,...);
  alexa.execute();
};

然后在MainIntent各种处理程序中的每个函数中,您需要明确设置下一个状态应该是什么......例如,在收到 STAGE_ONE 答案后,您可以使用 STAGE_TWO 将新状态设置为this.handler.state = states.STAGE_TWO

于 2018-01-28T00:19:11.890 回答