【发布时间】:2018-01-03 16:44:41
【问题描述】:
我想写一个问答游戏,流程是这样的:
“Alexa,开始电影琐事。”
欢迎来到电影琐事。你需要听规则吗?
“没有。”
你想玩什么类别?喜剧、戏剧还是动画?
“喜剧。”
问题 1. 《星球大战》是哪一年发行的? A,1970。B,1977。C,1980。
“B.”
正确。你的分数是 1。问题 2...
我设法编写了意大利面条式代码来完成此任务,其中包含大量 if session.attributes.category、if session.attributes.needsRules 等内容,以及 3 页嵌套 if-elsing。
我正在使用 Node 和官方 Alexa SDK,因此我阅读了它的文档封面,但它在某些地方非常混乱和损坏(自 6 月以来一直没有工作的示例,旧 UI 的说明等等)。我的问题是:对于这样的事情,什么样的流程是“正确的”/传统的?
在我编写的代码中,我经常使用elicitSlot,这很好,因为它让我只听我希望听到的东西(例如answerType“A”、“B”、“C” )。但是elicitSlot 会导致您重新触发相同的意图。那么,是否需要让每个意图检查一个槽是否已满,如果没有,请说出一个问题并引出该槽,如果是,则设置一个会话属性,然后转发到不同的意图?
这看起来很草率。也许解决方案是定义一个askingRulesState、askingCategoryState、askingQuestionState 等,每个都只有一个处理程序。但是只有一个处理程序的状态似乎......错了?
如果我要问用户“你想玩什么类别?”之类的问题,这是否意味着我需要创建一个SetCategoryIntent?如果是这样,我将如何防止用户触发该意图,除非我希望他们触发?
我意识到这是一个有点含糊的大问题,但我真的很难将其归结为更小更清晰的问题,因为我的问题是总体上的流程让我感到迷惑。即使是最小的小费,我也会感激不尽!
【问题讨论】: