【问题标题】:Single term answer to Alexa SkillAlexa Skill 的单项回答
【发布时间】:2017-03-21 07:32:34
【问题描述】:

背景

我正在编写一个 Alexa Skill 并希望从用户那里获得一些信息。

例如以下对话:

Alexa: What month were you born at?
User: April
Alexa: Good. And what was your favorite movie?
User: April

问题

鉴于以下话语:

GetMonthIntent {month}
GetMovieIntent {movie}

一旦用户第二次回答AprilGetMonthIntent 可能会被触发。

我尝试过的

要求用户指定条信息通过使用以下话语提供:

GetMonthIntent Month {month}
GetMovieIntent Movie {movie}

问题

根据当前上下文,让 Alexa 等待单个术语答案的正确方法是什么?

【问题讨论】:

    标签: alexa-skills-kit alexa-slot


    【解决方案1】:

    与此处的其他答案一样,您应该在这里查看最新的 Node.JS 库,它处理开箱即用的状态: https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs#making-skill-state-management-simpler

    你可以定义:

    • State_Launch
    • State_Month
    • State_Movie

    如果在错误状态下调用 GetMovieIntent 或 GetMonthIntent(等)意图以外的任何内容,则返回正确的错误响应。

    您必须在服务器端进行数据验证,以确保“月份”是有效的,而且电影更难验证,除非您有一个预期值列表。也就是说,如果您想解析它们以供重复使用。

    【讨论】:

      【解决方案2】:

      很遗憾,没有解决方案。无法指定解释用户回复的“上下文”,因此您必须告诉用户“您最喜欢的电影是什么?请说“我最喜欢的电影是”,然后是电影的名称”。

      以下是我认为可以解决您的问题的两个 ASK 功能请求:
      https://forums.developer.amazon.com/content/idea/41062/creating-something-to-help-with-more-structured-qu.html
      https://forums.developer.amazon.com/content/idea/55525/allow-a-response-to-specify-a-set-of-expected-inte.html

      我个人认为这是相当重要的,所以我投票给了那些,但它们并不接近顶部。

      【讨论】:

        【解决方案3】:

        我在创建“谁先上?棒球短剧”技能时遇到了同样的问题。我是这样处理的:

        1. 为 Alexa 给出的每个响应创建一个序列号
        2. 将此号码写入响应中的“会话”。
        3. 然后,Alexa 在下一个请求中将会话传回给您的技能。
        4. 从请求中读取序列号以了解上一个问题是什么。
        5. 如果给定的意图可能是多个问题的答案(例如,在您的情况下是月份和电影),则使用序列号来确定它是哪一个。

        这应该可以让您了解如何处理重复的答案。该会话非常易于使用。其他选项包括将 userId 和状态写入 DynamoDB 等数据库,但我发现会话在大多数情况下都有效。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-09-19
          • 2020-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-07
          • 1970-01-01
          相关资源
          最近更新 更多