我想要完成以下场景: Alexa和用户之间的一个小对话,有以下两个意图:
NameIntent
:“我的名字是{name}
"其中{name}
为AMAZON.US_FIRST_NAME
,插槽设置为必需并定义了提示符。
ActivityIntent
:“我喜欢{activity}
"在这里,它变得更加困难。我为{activity}
定制了一个插槽,并为它定义了一些值,比如“钓鱼、运动”等等,但显然还有更多的答案。如果我现在回复一些我没有定义的东西(例如“飞镖”),Alexa总是回到最初的意图,因为它似乎是一个名字。
示例:
->:“欢迎光临,你叫什么名字?”我的名字是LaunchRequest。
-> NameIntent:“欢迎彼得。你喜欢做什么?”-> ->:“欢迎飞镖。你喜欢做什么?”
我只是想让Alexa接受用户说的任何值,在Dialogflow中,这只需使用{any}实体即可完成。我在alexa博客上关注了this blog article,在那里他们似乎能够捕捉到你给它起的任何昵称,即使是没有定义的昵称,这也是我想在这里完成的。
Alexa :我如何使用Alexa捕获任何类型的输入,超出我在技能构建器中定义的任何短语?我怎样才能确保这个短语的意图是正确的呢?
我对此感到有点沮丧,特别是当您使用ElicitSlotDirectives
专门询问用户一个插槽时,它会跳转到一个完全不同的意图。
2个意图处理程序的代码:
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();
},
};
发布于 2018-05-05 20:36:23
似乎Alexa在将活动话语与您的ActivityIntent
相关联时遇到了问题,而是再次调用NameIntent
。依靠亚马逊来找出基于插槽类型的使用意图对我来说并不是一直有效。如果你张贴你的意图代码,那将会非常有帮助。
看看来自亚马逊here和Amazon's Voice Design Guide的JavaScript示例可能会有所帮助。
https://stackoverflow.com/questions/50177168
复制相似问题