Node.js Lambda function returns “The response is invalid” back to Alexa Service Simulator from REST call

后端 未结 2 1289
梦如初夏
梦如初夏 2020-12-21 15:52

Having issues making a REST call to an API between a node.js Lambda function and Alexa. I\'m using the request library to make the calls with an account linked skill. I\'ve

2条回答
  •  离开以前
    2020-12-21 16:28

    No, it has nothing to do with the format of speechOutput. The issue is that when the callback of the request method is executed, the reference to this is lost. To solve that, keep a reference to this before you call request (e.g. assign this to a variable called self):

    'use strict';
    var http = require('http');
    var request = require('request');
    var Alexa = require('alexa-sdk');
    var APP_ID = "amzn1.ask.skill.XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX";
    
    exports.handler = function(event, context, callback) {
        var alexa = Alexa.handler(event, context);
        alexa.appId = APP_ID;
        alexa.registerHandlers(handlers);
        alexa.execute();
    };
    
    var handlers = {
       'LaunchRequest': function () {
            this.emit(':tell', 'Hi!');
       },
    
       'ApiWelcomeIntent': function () {
            self = this
    
            request('https://some.web/api', function (error, response, body) {
                if (!error && response.statusCode == 200) {
                // from within the callback, write data to response, essentially returning it.
                    var speechOutput = JSON.stringify(body);
                    console.log(body + " :Raw output?");
                    console.log(speechOutput + ' :JSON stringified');
                    console.log(response.statusCode);
                    self.emit(':tell', speechOutput); // USE SELF HERE
                } else {
                    console.log(error + ' : ' + response.statusCode);
                    self.emit(':tell', 'There was an error'); // AND HERE AS WELL
                }
            });
        },
    
        'AMAZON.HelpIntent': function () {} //.........And other built in intents.
    
        }
    };
    

提交回复
热议问题