使用 Alexa Skill 创建包含初始项目的待办事项列表



所以我正在努力创建一个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;
                }
            });
    }

我认为问题是回调在项目全部创建完成之前触发,所以我只是在调用它之前强制它们完成。

我相信有一种更好、更清洁的方法,但这正是对我有用的方法。让我知道我可以改进的地方。

最新更新