2017-05-12 5 views
2

Node.js에 작성된 Lambda 함수를 사용하여 SNS에 성공적으로 게시합니다. Alexa Lambda 함수에서 Alexa 의도 내에서 동일한 함수를 넣을 때 코드의 Alexa 부분을 주석 처리해야만 실행됩니다. 그때 나는 내 알렉사 람다 함수에서 함수 내에서 SNS의 코드를 삽입하려고하면, 그것은 실행되지 않습니다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(){}); 
}; 

:

작동 독립 실행 형 람다 기능입니다. 알렉사 코드의 나머지 부분은 잘 작동하지만 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; 
    alexa.resources = languageStrings; 
    alexa.registerHandlers(newSessionHandlers, memberModeHandlers); 
    alexa.execute(); 
}; 

나는에 알렉사 물건을 모두 주석 경우

은 (AWS-SDK는 파일의 상단에 포함이 예에서 생략) 작동하지 않는 코드입니다 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

나는 그것을하는 적절한 방법을 생각했다. intent 안에 코드를 게시하고 publish() 함수의 콜백에서 Alexa emit 함수를 넣습니다. 그런 식으로 앱은 나머지 워크 플로우를 계속하기 전에 SNS 게시가 성공적으로 완료되기를 기다립니다. 나는 이것을 사용하여 의도를 기반으로 SMS를 보냅니다.

이 알렉사 의도 내부의 업데이트 된 코드입니다 :

'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에 게시를 완료합니다.

관련 문제