Alexa skill 2 intents 和 open slot

Alexa skill 2 intents and open slot

A​​lexa 是否有可能在我在样本话语中有类似这样的打开插槽时做出正确反应?

MyNameIsIntent {firstname}
ProjektIntent {projekt}

现在她总是回到 MyNameIsIntent,即使她问一个关于 ProjektIntent 的问题

糟糕的谈话:

Alexa: Welcome, what is your name?
Me: Frank
Alexa Hi Frank, Tell me what project is interesting for you?
Me: Teleshoping
Alexa: Hi Teleshoping, Tell me what project is interesting for you?

我是 Alexa 的新手,如果 Alexa 有可能回答正确的问题,你能给我一个提示吗?我试着用会话属性来做,但它不起作用

那样的语音文件是行不通的。 Alexa 使用话语的文本 - 除了插槽名称之外的东西,你有 none - 选择一个意图。

因此,不幸的是,您无法将交互设计为仅允许 'Teleshoping' 的响应。相反,用户必须说“我对 Teleshoping 感兴趣”(您需要告诉他们这样说),示例话语将是“我对 {projekt} 感兴趣”。

为了进一步说明 Tom 的回答,Alexa 无法判断 "teleshoping" 这个词是您的名字还是项目。 如果您像 Tom 提到的那样使用更长的话语,例如 "my name is {firstname}" 和 "I want to {projekt}",那么 Alexa 将毫无困难地辨别。 您还可以通过填写插槽值来帮助 Alexa 区分差异,但这假设您知道可能的项目值是什么。 名字可以使用内置 AMAZON.US_FIRST_NAME 插槽类型。

您可以使用状态对相同的意图做出不同的反应,具体取决于您的应用程序的状态。

查看官方文档https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs#making-skill-state-management-simpler

你像这样创建一个 StateHandlers 字典(在 Node.js 4.3 中):

var askNameStateHandlers = Alexa.CreateStateHandler("askNameState", 
    {
         "MyIntent": function () { /* ... */ }
        // more handlers ...
    });

然后你像这样注册你的处理程序,假设你有一个没有状态的处理程序字典 defaultHandlers 和两个具有特定状态的处理程序 askNameStateHandlersaskProjectStateHandlers:

exports.handler = function(event, context, callback) {
    var alexa = Alexa.handler(event, context);
    alexa.registerHandlers(defaultHandlers, askNameStateHandlers, askProjectStateHandlers);
    alexa.execute();
};

要更改应用程序的状态,只需在处理函数中像这样分配它:

this.handler.state = "askNameState";

alexa-sdk 然后会根据您的应用程序状态调用正确的处理程序。

https://github.com/alexa/skill-sample-nodejs-highlowgame

中还有一个完整的示例实现

请注意,这样一来,您将只有一个意图 MyIntent 接受两个问题的答案,决定您的哪些函数应该仅根据应用程序状态处理结果。