我创建了一个名为“ BuyDog” 的技能,其调用名称为 “ dog app”
这意味着,只有在听到调用名称之后,我才能使用内部定义的意图。 (对吗?)
然后我将带有插槽的意图定义为:
"what is {dog} price."
"Tell me the price of {dog}."
插槽{dog}
的插槽类型为“ DogType”。。我已将该插槽标记为满足该要求
然后,我已将端点添加到AWS lambda函数中,在该函数中,我使用了node.js中的factskills项目的蓝图代码,并做了一些小的改动以查看其工作原理。
const GET_DOG_PRICE_MESSAGE = "Here's your pricing: ";
const data = [
'You need to pay $2000.',
'You need to pay Rs2000.',
'You need to pay $5000.',
'You need to pay INR 3000.',
];
const handlers = {
//some handlers.......................
'DogIntent': function () {
const factArr = data;
const factIndex = Math.floor(Math.random() * factArr.length);
const randomFact = factArr[factIndex];
const speechOutput = GET_DOG_PRICE_MESSAGE + randomFact;
}
//some handlers.......................
};
根据我期望的about代码
我说:“ Alexa开放狗应用程序”
应该准备好听意图“ {dog}的价格是什么。” 和另一个意图。相反,它表示来自node.js代码的data[]
数组的随机字符串。在讲完Intent之后,我期望得到这种响应,因为完成Intent需要插槽。
以及何时
我说:“打开狗应用程序,然后告诉我XXXX的价格。”
它询问“哪个品种” (这是我定义的问题),但是它可以很好地显示价格
Alexa说:“这是您的价格:您需要支付5000美元。”
(或数据数组中的其他值)用于任何XXXX(即狗或非狗类型)。 为什么Alexa不确认单词是否在插槽集中?
以及何时
我说:“打开狗皮”。
我希望alexa不理解这个问题,但是它给了我关于吠叫的事实。 为什么?这是怎么发生的?
Alexa是否具有默认的一组技能?例如搜索google / amazon等...
我很困惑。请帮助我了解发生了什么事?
答案 0 :(得分:1)
如果没有完整的代码来确切地了解正在发生的事情并提供代码答案,我希望仅对您的问题/问题的解释将为您指明正确的方向。
我说:“ Alexa开放狗应用程序”
它应该已经准备好倾听意图了……
您期望Alexa会听,但实际上,Alexa会打开您的技能,并希望您在这一点上得到一个普遍的欢迎。 Alexa将向您的Lambda发送 Launch Request 。这与IntentRequest
不同,因此您可以通过检查request.type
来确定。通常发现:
this.event.request.type === 'LaunchRequest'
我建议您向Lambda添加一些日志记录,并使用 CloudWatch 查看来自Alexa的传入请求:
console.log("ALEXA REQUEST= " + event)
我说:“打开狗应用程序,然后告诉我XXXX的价格。”
为什么Alexa不确认单词是否在插槽集中?
Alexa不会将slot
限制为slotType
中设置的插槽值。您提供的slotType
值用作指导,但其他值也可以接受。
在Lambda函数中,由您决定是否验证这些插槽值,以确保将其设置为您接受的值。有很多方法可以做到这一点,因此只需从检测插槽中已装满即可开始。通常发现:
this.event.request.intent.slots.{slotName}.value;
如果您选择在slotType
中设置同义词,那么Alexa还将提供她建议的广告位值分辨率。例如,您可以将“ Rotty”作为“ Rottweiler”的同义词,Alexa会将“ Rotty”填充到广告位中,但也建议您将其解析为“ Rottweiler”。
var resolutionsArray = this.event.request.intent.slots.{slotName}.resolutions.resolutionsPerAuthority;
再次使用console.log
和CloudWatch查看Alexa接受并填充的插槽值。
我说:“打开狗皮”。
我以为alexa不会理解这个问题,但这给了我一个关于吠叫的事实。
您必须在技能之外进行此操作,Alexa将在其中进行任何输入并尝试识别已启用的技能,或者以她对默认功能的最佳猜测进行处理。
Alexa确实具有默认的内置功能(不是真正的技能)来回答一般性问题,并且变得有趣而友善。您可以在这里查看她自己可以做的事情: Alexa - Things To Try
所以我的猜测是,Alexa认为您正在询问有关狗吠的问题,因此提供了答案。您可以尝试问她“什么是狗叫”,看看她的回答是否与“打开狗叫”完全相同,只是为了证实这些怀疑。
要真正了解开发Alexa技能,您应该花时间使非常熟悉此文档: Alexa Request and Response JSON Formats
答案 1 :(得分:0)
您没有发布很多代码,因此很难准确说明您的意思,但是通常在处理不完整事件时,您可能会遇到这样的不完整偶数处理程序:
<ExpandGroup singleOpen={true}>
<ExpandPanel id={'bloc-01'}/>
<ExpandPanel id={'bloc-02'}/>
<ExpandPanel id={'bloc-03'}/>
<ExpandPanel id={'bloc-04'}/>
<ExpandPanel id={'bloc-05'}/>
</ExpandGroup>
通常在lambda的index.js文件中,将此处理程序添加到实际处理程序的上方 这可能无法解决您的所有问题,但是当用户没有提及狗时,它将帮助您处理事件。