2016-11-14 39 views
7

我正在为Alexa开发一个简单的自定义技能。我已经启动并运行,并在AWS Lambda上托管处理程序。它的工作正常,除了...Alexa技能套件(ASK)和话语

在测试用户界面中,如果我输入一个有效的话语,例如帮助,取消,游泳,运行(两个自定义话语),一切正常;但是,如果我输入无意义的话语,例如dsfhfdsjhf,则Alexa服务始终将无意义映射到意向架构中的第一个有效意图。

在我的lambda代码中,我有一个处理未知意图的处理程序;然而,意图从来不知道。这是测试界面的人工产物吗?还有其他事情发生?

感谢, 约翰

+2

我无法回答这个问题,但在使用测试用户界面和实际设备时,我遇到过类似的差异。 +1提问。我打算引导你走向Alexa技能工具包开发论坛,但看起来你已经在那里发布了这个问题。 :-) – TimHayes

+0

我在想这是测试界面的工件。你有没有尝试过在你的设备上进行测试? –

+0

@John你有没有找到解决方案? – Dhawal

回答

0

代替打字dsfhfdsjhf(这是不发音的,页面中的任何懂得语言),如果你的话语是趴或摇晃时会发生什么?

在现实世界的情况下,我不认为Alexa会不会通过dsfhfdsjhf,因此可能很难准确计划行为。

+0

这是如何没有用? – AppleBaggins

2

基于在您的方法中包含未处理的意图,听起来像您正在使用Alexa Skills Kit SDK for Node.js。您的问题不是测试界面的人为因素。是的,还有其他事情正在发生。

虽然尚未得到亚马逊的承认,但这是许多人在SDK中公认的问题。见this open issue。从个人经验到上述建议,如果您使用真实的文字或乱码没有关系,未处理的意图永远不会被调用。在解决这个问题之前,我的建议是建立一个处理程序,这个处理程序是针对你的技能的高级提示,并且为用户重申他们拥有的有效选项。把它定位为全面。希望我们会看到更好的这个SDK的继续维护。

0

所以你想将所有的垃圾输入管道到一个单一的意图。你很幸运。在继续之前,您应该了解以下几件事。

在Node.js中,如果由Alexa语音服务返回的意图在给定的MODE中不可用,则未处理的处理程序在MODE内被触发。
示例MODE将是确认模式。在许多可用的意图中,是和否是唯一被接受的意图。

var ConfirmationHandlers = Alexa.CreateStateHandler(states.CONFIRMATIONMODE, { 
    'YesIntent': function() { 
     this.handler.state = states.CLOSINGCOSTSMODE; 
     message = ` So you will be buying this house. Great! `; 
     reprompt = `Please carry on with the other intents found in the house buyer skill. `; 
     this.emit(':ask', message, reprompt); 
    }, 
    'NoIntent': function() { 
     this.handler.state = states.GENERALSEARCHMODE; 
     message = ` So you won't be buying this house. That's Ok, Continue searching for your dream house in the House buyer skill. !`; 
     reprompt = `Continue searching for your dream house in the House buyer skill.`; 
     this.emit(':ask', message, reprompt); 
    }, 
    'Unhandled': function() { 
     console.log("UNHANDLED"); 
     var reprompt = ` All other intents are disabled at this moment. Would you like to buy this house Yes or No? `; 
     this.emit(':ask', reprompt, reprompt); 
    } 
}); 

但是,在到达lambda函数之前,Alexa语音服务必须解释您的话语并将其映射到其中一个可用意图。如果你的话语是垃圾,并没有映射到任何特定的意图,它目前被映射到第一个意图。

解决方案:如果您想添加垃圾意图,应该由意向模式来处理,而不是由未处理的意图处理。要添加垃圾意图,您可以按照这篇亚马​​逊文章中的说明操作。

https://developer.amazon.com/blogs/post/Tx3IHSFQSUF3RQP/Why-a-Custom-Slot-is-the-Literal-Solution

方案3:我只是想要的一切。如上所述使用 语法的自定义插槽类型通常可满足此愿望,并使您能够通过NLP培训提高准确性。如果你仍然只想要 的一切,你可以创建一个自定义的插槽,称为“CatchAll”和相应的意图和话语:CatchAllIntent {CatchAll}。如果您使用的训练数据与LITERAL使用的 相同,则会得到相同的结果。人们通常会发现,添加更多特定场景的训练数据可提高准确性。

如果你还没有得到结果,试图设置包罗万象 值约二十2〜8字随机短语(从随机字 发电机 - 是真正随机的)。当用户说出与您的其他话语相匹配的内容时,这些意图仍将被发送。当 与其中任何一个不匹配时,它将落入CatchAll插槽。如果你走这条路线,你将失去准确性,因为你不是 充分利用Alexa的NLP,所以你需要大量测试。

未映射到你的更具体的意图之一,像YESNO任何投入,很可能会映射到这个CatchAll意图。