2017-05-12 14 views
2

Node.jsで書かれたLambda関数は、SNSに正常に公開されています。 Alexa Lambda関数のAlexaインテント内に同じ関数を置くと、コードのAlexa部分をコメントアウトした場合にのみ実行されます。AWS内からのSNSへの公開Lambda Alexa Intent、Node.js

この作品スタンドアロンラムダ関数です:

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(){}); 
}; 

私はその後、私のAlexaのラムダ関数に関数内SNSのコードを入れしようとした場合、それは実行されません。 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(); 
}; 

私はAlexaのもののすべてをコメントアウトした場合exports.handler関数では、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コード。

答えて

2

私はそれを行う正しい方法を考え出したと思います。 私はコードを投稿し、publish()関数のコールバックでは、私はAlexaのemit関数を入れました。そうすれば、アプリはSNSの公開が正常に完了するのを待ってから、残りのワークフローを続行します。 私はこれを使用して、意図に基づいてSMSを送信します。

これはAlexaの内側に更新されたコードの意図である:これは、ユーザーにプロンプ​​トを続行する前にSNSに公開を完了します

'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'); 
    })); 


    } 

関連する問題