如何在Alexa的HelpIntent

时间:2018-01-26 11:46:42

标签: alexa alexa-skills-kit alexa-slot

我已经与Alexa实施了一个多阶段对话框。该技能迭代地要求用户提供计算所需结果的信息。一个接一个地填充各个插槽。到目前为止一切都很好。

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

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

所以简而言之:我如何在HelpIntent中处理MainIntent的插槽数据?

谢谢: - )

2 个答案:

答案 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 }