Alexa技能集 - context.succeed未从AWS lambda(nodejs)执行

时间:2017-01-26 05:56:07

标签: node.js amazon-web-services aws-lambda alexa

我已经从lambda函数发出了一个“http.get”请求,并使用响应来构建回复给ASK的回复。

在下面的代码中 - 在开关情况“GetName”中,在切换情况下,“。GetNameParameter”context.succeed成功执行时,从不调用context.succeed。由于“GetName”的“http.get”请求导致了一些问题吗?如何解决这个问题。

每当我添加“http.get”请求时,context.succeed方法都不起作用,因此我无法使alexa工作。

任何人都可以帮助解决问题。

以下是我的代码:

var http = require('http');
exports.handler = (event, context, callback) => {
    // TODO implement
    if(event.session.new){
      console.log("NEW SESSION");
    }
    switch(event.request.type){
      case "LaunchRequest":
      console.log("LAUNCH REQUEST");

      context.succeed(
                  generateResponse(
                    buildSpeechletResponse("Welcome", true),
                    {}
                  )
                );

      break;

      case "IntentRequest":
        console.log("IntentRequest");

        switch(event.request.intent.name){

          case "GetName":

              var endpoint = //endpoint

            var body = ""
            http.get(endpoint, (response) => {
              response.on('data', (chunk) => { body += chunk })
              response.on('end', () => {
                var data = JSON.parse(body)
                var name = data.name
                console.log("Name: "+name);

                //Not getting executed
                context.succeed(
                  generateResponse(
                    buildSpeechletResponse(`Name is ${data}`, true),
                    {}
                  )
                )
              })
            })
            break;

          case "GetNameParameter":

            context.succeed(
                    generateResponse(
                      buildSpeechletResponse("OK, Name is "+event.request.intent.slots.Name.value, true),
                      {}
                    )
                  );
            break;

        }

      break;

      case "SessionEndedRequest":
        // Session Ended Request
        console.log(`SESSION ENDED REQUEST`);
        break;

      default:
        context.fail(`INVALID REQUEST TYPE: ${event.request.type}`);
    }
    callback(null, 'Hello from Lambda');
};

buildSpeechletResponse = (outputText, shouldEndSession) => {

  return {
    outputSpeech: {
      type: "PlainText",
      text: outputText
    },
    shouldEndSession: shouldEndSession
  };

};

generateResponse = (speechletResponse, sessionAttributes) => {

  return {
    version: "1.0",
    sessionAttributes: sessionAttributes,
    response: speechletResponse
  };

};

1 个答案:

答案 0 :(得分:0)

我明白了,回调导致了这个问题。

评论“回调(null,'你好,来自Lambda');”问题解决了。