【问题标题】:Publishing to SNS from within AWS Lambda Alexa Intent, Node.js从 AWS Lambda Alexa Intent、Node.js 发布到 SNS
【发布时间】:2017-10-11 04:17:28
【问题描述】:

我有一个用 Node.js 编写的 Lambda 函数,可以成功发布到 SNS。 当我将相同的函数放入 Alexa Lambda 函数中的 Alexa 意图时,只有在我注释掉代码的 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();
};

如果我在 export.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 技能期间被调用的意图调用该函数,但到目前为止,我无法使这个东西与 Alexa 代码一起工作.

【问题讨论】:

    标签: node.js aws-lambda amazon-sns alexa alexa-skills-kit


    【解决方案1】:

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

    这是 Alexa 意图中的更新代码:

    '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 的发布。

    【讨论】:

      猜你喜欢
      • 2015-11-16
      • 2019-01-28
      • 2016-04-02
      • 2021-10-18
      • 2017-12-28
      • 2019-11-09
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多