【问题标题】:'any' type like behaviour in Alexa custom SlotsAlexa 自定义插槽中的“任何”类型的行为
【发布时间】:2018-06-11 08:11:28
【问题描述】:

我想完成以下场景: Alexa 和用户之间的小对话,包含以下 2 个 Intent:

  • NameIntent: "我叫{name}"

其中{name}AMAZON.US_FIRST_NAME,并且需要指定插槽并定义提示。

  • ActivityIntent: "我喜欢{activity}"

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

例子:

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

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

我只想让 Alexa 接受用户在那里说的任何值,在 Dialogflow 中,这只需使用 {any} 实体即可完成。 我关注了来自 alexa 博客的this blog article,在那里他们似乎能够捕捉到你给它的任何昵称,甚至是那些没有定义的昵称,这就是我想要在这里完成的。

问题:如何使用 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();
    },
};

【问题讨论】:

    标签: alexa alexa-skills-kit alexa-slot


    【解决方案1】:

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

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

    【讨论】:

    • 我已经添加了代码。似乎真的不可能让它接受除定义的值之外的其他值,这与我链接的博客文章相反。
    • 我也检查了这个例子,同样的问题也存在,即如果使用了提供的值以外的任何东西,技能就会中止。我无法相信要简单地得到用户所说的内容是如此困难。
    【解决方案2】:

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

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

    在此处了解有关AMAZON.LITERAL 的更多信息。 https://developer.amazon.com/docs/custom-skills/literal-slot-type-reference.html

    【讨论】:

    • 这个最终会被移除,不应该被使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多