当前位置: 首页 > 知识库问答 >
问题:

阿列克谢技能在developer.amazon工作,但不在设备上?

阳长恨
2023-03-14

好的,这需要详细说明:首先,当我问“出发地点”的意图时,developer.amazon.com它工作得很好。当我使用真正的设备时,它称之为“unHandledIntent”。其次,当它被重新提示时,它确实工作,比如:“嘿,阿列克谢,问调用名。”在它回复未处理的消息之前,不要说任何话。然后我可以正常地说出话语,它会有反应。第三也是最后一点,它正在与“便利位置”的意图一起工作。我不确定发生了什么或者有什么不同。这是代码。谢谢!

var doc = require('dynamodb-doc');
var db = new doc.DynamoDB();
var Alexa = require('alexa-sdk');

exports.handler = function(event, context) {
    var alexa = Alexa.handler(event, context);
var handlers = {
        'sessionStartedRequest' : function(){
            this.emit(':talk', "welcome.")
        },
        'AMAZON.StopIntent': function() {
            this.emit(':tell', "Goodbye!");
        },
        'AMAZON.CancelIntent': function() {
            this.emit(':tell', "Goodbye!");
        },
        'Unhandled': function() {
            this.emit(':ask', "I'm sorry. I didn't get that. Could you repeat it?", "Ask me a question.");
        },
        'SessionEndedRequest': function() {
            this.emit(":tell", "Goodbye!");
        },
'DepartmentLocationIntent': function () {
            var name = "";

            if (this.event.request.intent.slots.department.value) {
                name = this.event.request.intent.slots.department.value.toLowerCase().trim();
            }

            var key = {
                'name': name
            };
            var tableName = "Department";
            var params = {
                TableName: tableName,
                Key: key,
                ProjectionExpression: 'loc'
            };

            db.getItem(params, function (err, data) {
                //alexa.emit(":tell", name);
                if (err) {
                    console.log(err);
                    //alexa.emit(':tell', "Sorry! I did not catch that!");
                    alexa.emit(':tell', err);
                } else {
                    var loc = JSON.stringify(data.Item.loc);
                    alexa.emit(':tell', "The " + name + " department is in " + loc);
                }
            }, context.done);
        },

        'FacilityLocationIntent': function() {
            var name = "";
            if (this.event.request.intent.slots.facility.value) {
                name = this.event.request.intent.slots.facility.value.toLowerCase().trim();
            }
            var key = {
                'name': name
            };
            var tableName = "Facility";
            var params = {
                TableName: tableName,
                Key: key,
                ProjectionExpression: 'loc'
            };
            db.getItem(params, function(err, data) {
                if (err) {
                    console.log(err);
                    alexa.emit(':tell', "Sorry! This facility does not exist!");
                } else {
                    var response = JSON.stringify(data.Item.loc);
                    alexa.emit(':tell', name + " is located in " + response);
                }
            }, context.done);
}
};

    alexa.registerHandlers(handlers);
    alexa.execute();
};

`

共有1个答案

叶煌
2023-03-14

贝迪尔

我不知道您是否仍在寻求解决方案,但我认为您的问题在于代码的嵌套。试着把东西和出口分开。正如AWS lambda指南所说,它更清洁、更易于使用。所以试试这个:

exports.handler = function(event, context, callback){
  var alexa = Alexa.handler(event, context, callback);
  alexa.registerHandlers(handlers);
  alexa.execute();
};

然后在不同的操纵者下面

var handlers = {
        'sessionStartedRequest' : function(){
            this.emit(':talk', "welcome.")
        },
        'AMAZON.StopIntent': function() {
            this.emit(':tell', "Goodbye!");
        },
        'AMAZON.CancelIntent': function() {
            this.emit(':tell', "Goodbye!");
        },
        'Unhandled': function() {
            this.emit(':ask', "I'm sorry. I didn't get that. Could you repeat it?", "Ask me a question.");
        },
        'SessionEndedRequest': function() {
            this.emit(":tell", "Goodbye!");
        },
'DepartmentLocationIntent': function () {
            var name = "";

            if (this.event.request.intent.slots.department.value) {
                name = this.event.request.intent.slots.department.value.toLowerCase().trim();
            }

            var key = {
                'name': name
            };
            var tableName = "Department";
            var params = {
                TableName: tableName,
                Key: key,
                ProjectionExpression: 'loc'
            };

            db.getItem(params, function (err, data) {
                //alexa.emit(":tell", name);
                if (err) {
                    console.log(err);
                    //alexa.emit(':tell', "Sorry! I did not catch that!");
                    alexa.emit(':tell', err);
                } else {
                    var loc = JSON.stringify(data.Item.loc);
                    alexa.emit(':tell', "The " + name + " department is in " + loc);
                }
            }, context.done);
        },

        'FacilityLocationIntent': function() {
            var name = "";
            if (this.event.request.intent.slots.facility.value) {
                name = this.event.request.intent.slots.facility.value.toLowerCase().trim();
            }
            var key = {
                'name': name
            };
            var tableName = "Facility";
            var params = {
                TableName: tableName,
                Key: key,
                ProjectionExpression: 'loc'
            };
            db.getItem(params, function(err, data) {
                if (err) {
                    console.log(err);
                    alexa.emit(':tell', "Sorry! This facility does not exist!");
                } else {
                    var response = JSON.stringify(data.Item.loc);
                    alexa.emit(':tell', name + " is located in " + response);
                }
            }, context.done);
        }
    };

希望这能解决你的问题。

 类似资料:
  • 我是android新手,我能够在kotlin中为我的应用程序设置firebase。如果我在Nexus 5X API 27 emulator中运行该应用程序,我就能够获取数据库,但当我在实际设备三星S5(Google play Services V 12.5.29,android V 5.0)中运行该应用程序时,我无法获得addValueEventListener回调。 Gradle文件: 我知道这

  • 使用Amazon Alexa,可以通过两种方式调用技能的意图: “Alexa start[技能名称]。”然后继续询问该技能的具体意图 与谷歌助理我只知道调用的行动: "好的谷歌对话[动作名]。"然后继续询问该动作的具体意图。 是否有等效的调用来直接从Google助手的操作中调用特定意图?

  • 我尝试从Alexa实现设备控制。我创建了智能家居技能并成功添加了用户授权。我可以打开/关闭我的设备。我明白,我只能使用自定义技能添加新命令(如停止、播放最后一个视频、获取状态等)。但基于这些知识,我仍然无法理解。我可以使用其他命令控制设备吗?例如,“Alexa,请经理播放卧室电视上一段视频”或“Alexa,请经理获取厨房摄像头状态”。

  • 阿列克谢的新技能。开发一个应用程序,其中Alexa技能的状态由语音交互以外的其他方式决定。比如说,这是一种气象技能。我知道我可以从技能意图处理程序访问天气服务来检索“天气状态”,但是我想知道是否有一种方法——在这个例子中——气象站,将天气状态发布到技能并拥有技能将其存储为(全局、独立于用户的)状态变量。这将使我不必构建第二个网络服务,在那里我将维护状态信息。 我已经看到了技能的信息传递能力,但我不

  • 我有一个网站,必须响应移动电话。我用我的桌面创建了它。当我调整浏览器窗口时,它在手机上工作得很好,但当我在我真正的手机上检查它:三星Galaxy S2时,它对手机视图没有反应。 会有什么问题吗?

  • 这个小部件在模拟器4.1.2上工作得很好,当安装在真正的设备上时,它甚至不会显示在小部件列表上,就像安装了一样,但我不能让它正常工作。 下面是manifest.xml 和小部件提供程序