我想完成以下场景: Alexa与用户之间的小对话,具有以下2个意图:
NameIntent
:"我的名字是{name}
" 其中{name}
为AMAZON.US_FIRST_NAME
且需要插槽并定义提示。
ActivityIntent
:"我喜欢{activity}
" 这里变得更加困难。我为{activity}
制作了一个自定义广告位,并为其定义了一些值,例如"钓鱼,体育"等等,但显然有更多的答案。如果我现在回答我没有定义的东西(例如"飞镖"),Alexa总会回到第一个意图,因为它似乎是一个名字。
示例:
LaunchRequest:"欢迎。你叫什么名字?" - >我的名字是彼得
NameIntent:"欢迎彼得。你喜欢做什么?" - >飞镖 - > "欢迎飞镖。你喜欢做什么?"
我只想让Alexa接受用户在那里说的任何价值,在Dialogflow中,只需使用 {any} 实体即可。 我跟踪了来自alexa博客的this blog article,在那里他们似乎能够捕获你扔给它的任何昵称,甚至是那些没有被定义的昵称,这就是我想在这里完成的。
问题:如何使用Alexa捕获任何类型的输入,除了我在技能构建器中定义的任何内容之外的短语?如何确保此短语指向正确的意图?
我对此感到有点沮丧,特别是如果你使用ElicitSlotDirectives
专门向用户询问一个插槽,然后它跳转到一个完全不同的意图。
2个intent处理程序的代码:
const NameIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest'
&& handlerInput.requestEnvelope.request.intent.name === 'NameIntent';
},
handle(handlerInput) {
const { intent } = handlerInput.requestEnvelope.request;
const name = intent.slots.name.value;
const speechText = `Welcome ${name}. What is your favourite activity?`;
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.withShouldEndSession(false)
.getResponse();
},
};
const ActivityIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest'
&& handlerInput.requestEnvelope.request.intent.name === 'ActivityIntent';
},
handle(handlerInput) {
const { intent } = handlerInput.requestEnvelope.request;
const activity = intent.slots.activity.value;
const speechText = `You like ${activity}.`;
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.withShouldEndSession(false)
.getResponse();
},
};
答案 0 :(得分:0)
似乎Alexa无法将活动话语与您的[Vue warn]: Property or method "fruits" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.
found in
---> <FruitList> at src/components/FruitList.vue
<App> at src/App.vue
<Root>
相关联,而是再次调用ActivityIntent
。依靠亚马逊来确定基于插槽类型的使用意图对我来说并不是很好。如果你发布了非常有帮助的意图代码。
查看来自亚马逊here和Amazon's Voice Design Guide的JavaScript示例可能会有所帮助。
答案 1 :(得分:0)
您可以考虑使用AMAZON.LITERAL
内置自定义插槽类型。此插槽类型传递所说的单词而不进行任何转换。虽然官方文件建议不要使用它。它也被停止了一次。来自官方文档。
注意:虽然您可以使用AMAZON.LITERAL提交新的和更新的英语(美国)技能,但在大多数情况下,自定义插槽类型比AMAZON.LITERAL提供更高的准确性。因此,我们建议您尽可能考虑迁移到自定义插槽类型。请注意,除英语(美国)以外的任何语言均不支持AMAZON.LITERAL。
在此处详细了解AMAZON.LITERAL
。
https://developer.amazon.com/docs/custom-skills/literal-slot-type-reference.html