0

我想完成以下场景: Alexa 和用户之间的小对话,具有以下 2 个意图:

  • NameIntent:“我的名字是{name}

在哪里以及需要指定插槽并定义提示{name}AMAZON.US_FIRST_NAME

  • ActivityIntent:“我喜欢{activity}

在这里它变得更加困难。我制作{activity}了一个自定义插槽并为其定义了一些值,例如“钓鱼、运动”等,但显然还有更多的答案。如果我现在用我没有定义的东西(例如“飞镖”)做出回应,Alexa 总是会回到最初的意图,因为它似乎是一个名字。

例子:

LaunchRequest:“欢迎。你叫什么名字?” -> 我的名字是彼得

NameIntent:“欢迎彼得。你喜欢做什么?” -> 飞镖 -> “欢迎飞镖。你喜欢做什么?”

我只是想让 Alexa 接受用户在那里说的任何值,在 Dialogflow 中,这只需使用{any}实体即可完成。我关注了来自 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();
    },
};
4

2 回答 2

0

您可以考虑使用AMAZON.LITERAL内置的自定义插槽类型。此插槽类型通过口语单词而不进行任何转换。尽管官方文件建议不要使用它。它也停产过一次。来自官方文档。

注意:尽管您可以使用 AMAZON.LITERAL 提交新的和更新的英语(美国)技能,但在大多数情况下,自定义插槽类型比 AMAZON.LITERAL 提供更好的准确性。因此,我们建议您尽可能考虑迁移到自定义槽类型。请注意,除英语(美国)以外的任何语言都不支持 AMAZON.LITERAL。

在此处查找更多信息AMAZON.LITERALhttps://developer.amazon.com/docs/custom-skills/literal-slot-type-reference.html

于 2018-06-11T00:11:28.943 回答
0

似乎 Alexa 无法将活动话语与您的相关联ActivityIntent,而是NameIntent再次调用。依靠亚马逊来确定基于插槽类型的使用意图对我来说并不总是有效。如果您发布您的意图代码,那将非常有帮助。

在此处查看来自 Amazon 的 JavaScript 示例和Amazon's Voice Design Guide可能会有所帮助。

于 2018-05-05T12:36:22.900 回答