所以我正在努力创建一个Alexa技能,用户可以说:"Alexa,问______我应该带什么物品去旅行?"她会回答"你应该带x,y,z。我在你的Alexa应用程序中用这些项目做了一个待办事项清单"。
我希望技能能够制作一个创建列表的待办事项列表,并用Alexa建议的一些项目填充它。这是我到目前为止所拥有的:
const Alexa = require('alexa-sdk');
const moment = require('moment-timezone');
function createList(intentName, accessToken, itemArray, callback) {
var date = moment().tz("America/New_York").format('l');
var lms = new Alexa.services.ListManagementService();
var listId;
var listObject = {
'name': intentName + " " + date,
"state": "active"
};
lms.createList(listObject, accessToken, (data) => {
console.log(data.listId);
for (listItem in itemArray) {
var listItemObject = {
'value': itemArray[listItem],
'status': 'active'
};
console.log(listItemObject);
lms.createListItem(data.listId, listItemObject, accessToken);
}
callback();
})
}
编辑:
当我运行技能时,将创建列表,但不实例化任何列表项。它说"项目未定义"。为了创建列表并在同一步骤中创建列表项,我需要做什么?
我一直在修补并找到一个解决方案,让我得到我需要的东西。
function createList(intentName, accessToken, itemArray, callback) {
var date = moment().tz("America/New_York").format('l');
var lms = new Alexa.services.ListManagementService();
var listId;
var count = 0;
var listObject = {
'name': intentName + " " + date,
"state": "active"
}
lms.createList(listObject, accessToken)
.then((data) => {
console.log(JSON.stringify(data));
itemArray.forEach(function (item) {
var listItemObject = {
'value': item,
'status': 'active'
}
lms.createListItem(data.listId, listItemObject, accessToken)
.then(count++);
});
if (count == itemArray.length) {
callback();
}
});
.catch((error) => {
console.log("Error caught: " + error.message);
var resError = JSON.parse(error.message)
switch (resError.type) {
case "NameConflict":
callback();
break;
default:
break;
}
});
}
我认为问题是回调在项目全部创建完成之前触发,所以我只是在调用它之前强制它们完成。
我相信有一种更好、更清洁的方法,但这正是对我有用的方法。让我知道我可以改进的地方。