Alexa技能2意图和开放槽

时间:2017-03-30 13:28:16

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

当我在样本中发表类似的事情时,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可能回答正确的问题,你能给我一个小费吗?我尝试使用会话属性来执行此操作但不起作用

3 个答案:

答案 0 :(得分:2)

这样的话语文件不起作用。 Alexa使用话语的文本 - 除了你没有的插槽名称之外的东西 - 选择意图。

所以,遗憾的是,你不能设计你的交互以允许只是'Teleshoping'的响应。相反,用户将不得不说“我对Teleshoping感兴趣”(你需要告诉他们这样说),样本话语将是“我对{projekt}感兴趣”。 / p>

答案 1 :(得分:1)

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

有关官方文档,请参阅https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs#making-skill-state-management-simpler

您可以像这样创建一个StateHandler字典(在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接受两个问题的答案,决定哪些函数应该仅根据应用程序状态处理结果。

答案 2 :(得分:0)

只是为了给汤姆的答案增加一点进一步的澄清,Alexa无法判断“" teleshoping"是你的名字或项目。 如果汤姆提到你使用更长的话语,例如"我的名字是{firstname}"和#34;我想{projekt}"然后Alexa将毫无困难地辨别。 您还可以通过填写槽值来帮助Alexa区分,但这假设您知道可能的projekt值。 firstname可以使用内置的AMAZON.US_FIRST_NAME slottype。