对Alexa Skill的单期回答

时间:2017-03-13 08:30:57

标签: alexa-skills-kit alexa-slot

背景

我正在编写一个Alexa技能并希望从用户处获取一些信息。

以下对话例如:

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

问题

鉴于以下话语:

GetMonthIntent {month}
GetMovieIntent {movie}

用户第二次回答April后,可能会触发GetMonthIntent

我尝试了什么

要求用户使用以下话语指定哪条信息:

GetMonthIntent Month {month}
GetMovieIntent Movie {movie}

问题

根据当前情况,让Alexa等待单个学期答案的正确方法是什么?

3 个答案:

答案 0 :(得分: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(等)意图以外的任何内容,则返回正确的错误响应。

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

答案 1 :(得分:0)

不幸的是,没有解决方案。无法指定'上下文'其中应该解释用户回复,所以你必须告诉用户"你最喜欢的电影是什么?请说“我最喜欢的电影是'然后是电影的名称"。

以下是我认为可以解决您问题的两个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

就我个人而言,我认为这是相当重要的,所以我投了这些,但他们并不接近顶端。

答案 2 :(得分:0)

当我创造了“谁在第一次?棒球比赛”技能时,我遇到了同样的问题。我通过以下方式解决了这个问题:

  1. 为Alexa
  2. 指定的每个响应创建一个序列号
  3. 将此号码写入回复中的“会话”。
  4. 会话将在下一次请求中由Alexa传回您的技能。
  5. 从请求中读取序列号,以了解上一个问题是什么。
  6. 如果给定的意图可能是多个问题的答案(例如,在您的情况下为月份和电影),则使用序列号来确定它是什么。
  7. 这应该会给你如何处理重复答案的想法。会话非常容易使用。其他选项包括将userId和status写入DynamoDB等数据库,但我发现会话在大多数情况下都有效。