【问题标题】:Ask for missing DB data with Alexa使用 Alexa 请求丢失的数据库数据
【发布时间】:2018-02-19 12:28:52
【问题描述】:

我正在尝试使用 Alexa 执行以下操作:

  • 当用户说:打开 APP_NAME
  • 我正在检查 DynamoDB,看看我是否有用户的姓名
  • 如果不是,我想在告诉应用程序可以做什么之前先询问名称

我确实尝试过使用

this.emit(":delegate", "name_add");

从当你说“打开 APP_NAME”时触发的 Intent 中,这意味着我在 Hello Intent 中进行查询,检查我是否有名称,如果没有,我想触发另一个 Intent 来获取缺少数据。

但是当我使用 Delegate 时,“name_add”意图没有被触发。

我的问题

当我的意图依赖于数据库中的数据时,我发现有数据丢失,我应该如何收集这些丢失的数据?请注意,一旦这些数据在数据库中,我就不会询问用户。所以这是一次性的。

意思是我知道如何利用插槽,例如当您询问您从哪里飞往哪里时。因为这是 Alexa 每次都会问的问题。但是,当您需要一次执行此操作时怎么办?

【问题讨论】:

    标签: amazon-web-services aws-lambda alexa


    【解决方案1】:

    问题是,您不能委派新的意图。 Read about Dialog Directives here.

    请注意,当返回 Dialog 指令时,您无法更改意图,因此意图名称和插槽集必须与发送到您的技能的意图相匹配。

    因此,您将不得不重新构建您的意图。

    建议结构:
    通常,您的helloIntent(当用户打开您的技能“裸体”时:"Alexa, open mySkill." 而不是“穿衣服”:"Alexa, open mySkill and do something"),此时您要引导用户说出该做什么会触发您的主要意图。

    所以helloIntent 将简单地回复:"Hello, welcome to mySkill, you can say things like, do something, or, do something else"

    然后用户说出其中一件事情,这是您的其他意图的表达,因此触发了其中一个意图,让我们调用一个:"checkDatabase"

    现在您位于"checkDatabase" 意图内,您可以拥有一个名为name 的必需槽。此时您可以检查数据库中的用户名并自己填写空位,或者委托给 Alexa 以获取 name

    须知:
    1) 委托仅适用于所需的意图插槽。您正在委派 Alexa 来确定需要填充哪些位置以及首先引出哪些位置。她会根据您在控制台中为意图设置的所需插槽的顺序来计算这一点。

    2) this.emit(':delegate', updatedIntent);(使用 Alexa SDK)需要第二个参数 updatedIntent 是完整意图信息的对象,包括名称、插槽和确认状态 (see Intent Object here)。如果您自己填充插槽,这就是您返回“更新”意图信息的方式。

    3) 要更多地控制要引出的插槽以及特定消息,请使用ElicitSlot Directive。 在 Alexa SDK 中是:this.emit(':elicitSlot', slotToElicit, speechOutput, repromptSpeech, updatedIntent)Read about that here
    (必须使用 ElicitSlot 来引出不需要的插槽)

    【讨论】:

    • 对,但在他的情况下,我需要在每个意图中都有一个名称槽,因为用户可以按随机顺序提出任何问题 - 对吧?我的困惑是,似乎没有办法让一个地方处理“要求”这个名字,让一个代码来处理这个问题,对吧?
    • 我明白了。是的,我就是这样做的。在每个意图中放置一个名称槽并针对该槽引出问题。好消息是,这就是您需要做的所有事情,因为在您以一个意图填充插槽之后,无论是通过请求还是从数据库中获取,也将其保存在 sessionAttributes 中。这样,如果您知道名称,则只需在 Lambda 中检查一次,无论它们触发了哪个意图。每个意图只需要在控制台中准备好名称槽。
    • 这是一种解决方法。使用话语“我的名字是 {name}”创建一个意图。如果用户触发了任何意图而您还没有名字,请向他们发送“:tell”消息,要求他们说出特定的话语并包括他们的名字。比如:“请说,我的名字是,然后说出你的名字。”然后,用户说出触发您的 name_get 意图并在那里填充名称槽的完整话语。您可以将它们的 original_intent 和它们的名称都保存在 sessionAttributes 中,
    • 但就个人而言,我会在每一个意图中都使用一个名称槽,因为解决方法过于依赖于用户遵循确切的指示,并且感觉不像只是问“什么”那么自然是你的名字?”从任何意图中。
    • 没错。你告诉 Alexa 检测并请求空的 required 插槽,方法是告诉她“委托”。或者你告诉 Alexa 通过告诉她“ElicitSlot”来请求任何特定的插槽。在任何时候,您都可以自己编程填充(或清空)插槽,然后在“updatedIntent”中返回它们。
    猜你喜欢
    • 2014-03-03
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 2016-02-13
    相关资源
    最近更新 更多