让 Alexa 向用户询问后续问题 (NodeJS)
Let Alexa ask the user a follow up question (NodeJS)
背景
我有一个从 API 中获取一些数据的 Intent。此数据包含一个数组,我正在迭代所述数组的前 10 个条目并将结果读回给用户。然而,数组几乎总是大于 10 个条目。我使用 Lambda 作为我的后端,使用 NodeJS 作为我的语言。
请注意,我刚刚开始使用 Alexa,这是我的第一项技能。
我要存档的是下面的
当用户触发意图并且前 10 个条目已读给用户时,Alexa 应该询问“你想听下 10 个条目吗?”或类似的东西。用户应该能够回答是或否。然后它应该读取下一个条目。再次访问数组。
我正在努力解决此对话框的 Alexa 实现。
到目前为止我已经尝试过:我偶然发现了这个 post here,但是我无法让它工作并且我没有找到任何其他示例。
感谢任何帮助或进一步的指点。
你需要做的是一个叫做“Paging”的东西。
假设您有大量数据。每页包含 10 个条目。
第 1 页:1-10,第 2 页:11-20,第 3 页:21-30 等等。
当您从数据库中获取数据时,您可以设置限制,在 SQL 中,它是使用 LIMIT 实现的。但是如何根据页面索引获得这些值呢?
好吧,一个简单的计算可以帮助你:
let page = 1 //Your identifier or page index. Managed by your client frontend.
let chunk = 10
let _start = page * chunk - (chunk - 1)
let _end = start + (chunk - 1)
希望对您有所帮助:)
该教程的概念正确,但掩盖了一些事情。
1:将是和否意图添加到您的模型中。它们是“内置”意图,但您必须将它们添加到模型中(并重建它)。
2:将新的意图处理程序添加到基本技能模板底部附近的 .addRequestHandlers(...)
函数调用的列表中。这一点经常被遗忘,教程中也没有提到。
3:使用const sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
获取您存储的会话属性对象并将其分配给一个变量。更改该对象的属性,然后使用 handlerInput.attributesManager.setSessionAttributes(sessionAttributes);
保存
您可以添加任何有效的 属性 名称,值可以是字符串、数字、布尔值或对象文字。
所以假设您的启动处理程序向客户打招呼并立即阅读前 10 个项目,然后询问他们是否想再听 10 个。您可以存储 sessionAttributes.num_heard = 10
.
YesIntent 和 LaunchIntent 处理程序都应该简单地将一个 num_heard 值传递给一个函数,该函数检索接下来的 10 个项目并将其作为字符串反馈给 Alexa 说话。
每次运行 yes 意图时,您只需将 sessionAttributes.num_heard
增加 10 ,然后将其 保存为 handlerInput.attributesManager.setSessionAttributes(sessionAttributes)
。
背景
我有一个从 API 中获取一些数据的 Intent。此数据包含一个数组,我正在迭代所述数组的前 10 个条目并将结果读回给用户。然而,数组几乎总是大于 10 个条目。我使用 Lambda 作为我的后端,使用 NodeJS 作为我的语言。
请注意,我刚刚开始使用 Alexa,这是我的第一项技能。
我要存档的是下面的
当用户触发意图并且前 10 个条目已读给用户时,Alexa 应该询问“你想听下 10 个条目吗?”或类似的东西。用户应该能够回答是或否。然后它应该读取下一个条目。再次访问数组。
我正在努力解决此对话框的 Alexa 实现。
到目前为止我已经尝试过:我偶然发现了这个 post here,但是我无法让它工作并且我没有找到任何其他示例。
感谢任何帮助或进一步的指点。
你需要做的是一个叫做“Paging”的东西。 假设您有大量数据。每页包含 10 个条目。 第 1 页:1-10,第 2 页:11-20,第 3 页:21-30 等等。 当您从数据库中获取数据时,您可以设置限制,在 SQL 中,它是使用 LIMIT 实现的。但是如何根据页面索引获得这些值呢? 好吧,一个简单的计算可以帮助你:
let page = 1 //Your identifier or page index. Managed by your client frontend.
let chunk = 10
let _start = page * chunk - (chunk - 1)
let _end = start + (chunk - 1)
希望对您有所帮助:)
该教程的概念正确,但掩盖了一些事情。
1:将是和否意图添加到您的模型中。它们是“内置”意图,但您必须将它们添加到模型中(并重建它)。
2:将新的意图处理程序添加到基本技能模板底部附近的 .addRequestHandlers(...)
函数调用的列表中。这一点经常被遗忘,教程中也没有提到。
3:使用const sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
获取您存储的会话属性对象并将其分配给一个变量。更改该对象的属性,然后使用 handlerInput.attributesManager.setSessionAttributes(sessionAttributes);
您可以添加任何有效的 属性 名称,值可以是字符串、数字、布尔值或对象文字。
所以假设您的启动处理程序向客户打招呼并立即阅读前 10 个项目,然后询问他们是否想再听 10 个。您可以存储 sessionAttributes.num_heard = 10
.
YesIntent 和 LaunchIntent 处理程序都应该简单地将一个 num_heard 值传递给一个函数,该函数检索接下来的 10 个项目并将其作为字符串反馈给 Alexa 说话。
每次运行 yes 意图时,您只需将 sessionAttributes.num_heard
增加 10 ,然后将其 保存为 handlerInput.attributesManager.setSessionAttributes(sessionAttributes)
。