gpt4 book ai didi

node.js - 从 AWS Lambda Alexa Intent、Node.js 中发布到 SNS

转载 作者:行者123 更新时间:2023-12-02 14:21:49 25 4
gpt4 key购买 nike

我有一个用 Node.js 编写的 Lambda 函数,可以成功发布到 SNS。当我将相同的函数放入 Alexa Lambda 函数的 Alexa intent 中时,只有当我注释掉代码的 Alexa 部分时,它才会执行。

这是有效的独立 Lambda 函数:

var AWS = require("aws-sdk");

exports.handler = function() {
var sns = new AWS.SNS();
var params = {
Message: "Cheese",
Subject: "Test SNS From Lambda",
TopicArn: "arn:aws:sns:us-east-1:xxxxxxx:MyTopic"
};
sns.publish(params, function(){});
};

如果我随后尝试将 SNS 代码放入 Alexa lambda 函数的函数中,它不会执行。 Alexa 代码的其余部分工作正常,但没有任何内容发布到 SNS。然而,如果我注释掉其中的 Alexa 部分,它确实有效。

这是不起作用的代码(aws-sdk 包含在文件顶部,并在此示例中省略):

exports.handler = function(event, context) {

var sns = new AWS.SNS();
var params = {
Message: "Cheese",
Subject: "Test SNS From Lambda",
TopicArn: "arn:aws:sns:us-east-1:xxxxxxx:MyTopic"
};
sns.publish(params, function(){});

const alexa = Alexa.handler(event, context);
alexa.APP_ID = APP_ID;
alexa.resources = languageStrings;
alexa.registerHandlers(newSessionHandlers, memberModeHandlers);
alexa.execute();
};

如果我注释掉exports.handler函数中的所有Alexa内容,SNS发布可以工作,但显然应用程序的其余部分会失败。

像这样,这会起作用:

exports.handler = function(event, context) {

var sns = new AWS.SNS();
var params = {
Message: "Cheese",
Subject: "Test SNS From Lambda",
TopicArn: "arn:aws:sns:us-east-1:xxxxxxx:MyTopic"
};
sns.publish(params, function(){});

/*
const alexa = Alexa.handler(event, context);
alexa.APP_ID = APP_ID;
// To enable string internationalization (i18n) features, set a resources object.
alexa.resources = languageStrings;
alexa.registerHandlers(newSessionHandlers, memberModeHandlers);
alexa.execute();
*/
};

对于这里发生的事情有什么想法吗?理想情况下,我想要做的是将 sns 发布代码放在一个单独的函数中,然后我从 Alexa 技能期间某一时刻调用的 intent 中调用该函数,但到目前为止,我无法使这个东西与 Alexa 代码一起工作.

最佳答案

我想我找到了正确的方法。在 intent 中,我发布了代码,并在publish()函数的回调中放置了Alexa的emit函数。这样,应用程序会等待 SNS 发布成功完成,然后再继续其余的工作流程。我用它来根据 intent 发送短信。

这是 Alexa intent 中更新的代码:

'MessageMemberIntent' : function () {

var sns = new AWS.SNS();
var message = "test foo";
var params = {
Message: message,
Subject: "Test SNS From Lambda",
TopicArn: "arn:aws:sns:us-east-1:xxxxxx:MyTopic"
};
sns.publish(params, (() => {
this.emit(':ask', 'Ok, sending the message to the member');
}));


}

这将在继续向用户提示之前完成向 SNS 的发布。

关于node.js - 从 AWS Lambda Alexa Intent、Node.js 中发布到 SNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43927655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com