0

背景

我正在编写 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}

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

我试过的

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

GetMonthIntent Month {month}
GetMovieIntent Movie {movie}

问题

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

4

3 回答 3

1

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

你可以定义:

  • State_Launch
  • State_Month
  • 状态_电影

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

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

于 2017-03-20T23:32:34.697 回答
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

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

于 2017-03-13T14:48:52.623 回答
0

当我创建“谁先上?棒球短剧”技能时,我遇到了同样的问题。我通过以下方式处理了这个:

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

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

于 2017-03-14T12:03:24.910 回答