0

当我在这样的示例话语中打开插槽时,Alexa 是否有可能做出正确的反应?

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 可能回答正确的问题,你能给我一个提示吗?我尝试使用会话属性来做到这一点,但它不起作用

4

3 回答 3

2

像这样的话语文件是行不通的。Alexa 使用话语的文本——除了插槽名称之外的东西,你没有这些东西——来选择一个意图。

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

于 2017-03-30T15:58:41.670 回答
1

根据应用程序的状态,您可以使用States 对相同的意图做出不同的反应。

官方文档见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和两个带有特定状态的处理程序的字典,askNameStateHandlers并且askProjectStateHandlers

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接受这两个问题的答案,仅根据应用程序状态决定您的哪个函数应处理结果。

于 2017-03-31T12:17:54.623 回答
0

为了进一步澄清汤姆的回答,Alexa 无法判断“teleshoping”这个词是您的名字还是项目。如果您使用 Tom 提到的较长的话语,例如“我的名字是 {firstname}”和“我想 {projekt}”,那么 Alexa 将毫无问题地辨别。您还可以通过填写插槽值来帮助 Alexa 区分,但这假设您知道可能的项目值是什么。firstname 可以使用内置的 AMAZON.US_FIRST_NAME 插槽类型。

于 2017-03-31T11:18:25.853 回答