调用AWS Lambda函数时,状态代码400的InvalidRequestException

时间:2017-03-01 07:14:55

标签: amazon-web-services aws-lambda

var config = {};
config.IOT_BROKER_ENDPOINT      = "abcdefghijk.iot.us-east-1.amazonaws.com".toLowerCase();
config.IOT_BROKER_REGION        = "us-east-1";


	 config.IOT_THING_2              = "Thing1";
var AWS = require('aws-sdk');

	AWS.config.region = config.IOT_BROKER_REGION;
	AWS.config.update({accessKeyId:'xxxxxxxxxxxxxxxxxxxx', secretAccessKey:'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'});
	var iotdata = new AWS.IotData({endpoint: config.IOT_BROKER_ENDPOINT});
	
	
// namespaces

const NAMESPACE_CONTROL = "Alexa.ConnectedHome.Control";

const NAMESPACE_DISCOVERY = "Alexa.ConnectedHome.Discovery";

// discovery

const REQUEST_DISCOVER = "DiscoverAppliancesRequest";

const RESPONSE_DISCOVER = "DiscoverAppliancesResponse";

// control

const REQUEST_TURN_ON = "TurnOnRequest";

const RESPONSE_TURN_ON = "TurnOnConfirmation";

const REQUEST_TURN_OFF = "TurnOffRequest";

const RESPONSE_TURN_OFF = "TurnOffConfirmation";

// errors

const ERROR_UNSUPPORTED_OPERATION = "UnsupportedOperationError";

const ERROR_UNEXPECTED_INFO = "UnexpectedInformationReceivedError";


// entry

exports.handler = function (event, context, callback) {

  log("Received Directive", event);

  var requestedNamespace = event.header.namespace;

  var response = null;

  try {

    switch (requestedNamespace) {

      case NAMESPACE_DISCOVERY:

        response = handleDiscovery(event);

        break;

      case NAMESPACE_CONTROL:

        response = handleControl(event);

        break;

      default:

        log("Error", "Unsupported namespace: " + requestedNamespace);

        response = handleUnexpectedInfo(requestedNamespace);

        break;

    }// switch

  } catch (error) {

    log("Error", error);

  }// try-catch

  callback(null, response);

}// exports.handler


var handleDiscovery = function(event) {

  var header = createHeader(NAMESPACE_DISCOVERY, RESPONSE_DISCOVER);

  var payload = {

    "discoveredAppliances": []

  };

  return createDirective(header,payload);

}// handleDiscovery


var handleControl = function(event) {

  var response = null;

  var requestedName = event.header.name;

  switch (requestedName) {

    case REQUEST_TURN_ON :

      response = handleControlTurnOn(event);

      break;

    case REQUEST_TURN_OFF :

      response = handleControlTurnOff(event);

      break;

    default:

      log("Error", "Unsupported operation" + requestedName);

      response = handleUnsupportedOperation();

      break;     

  }// switch

  return response;

}// handleControl


var handleControlTurnOn = function(event) {
	var thingPicker= config.IOT_THING_2;
	console.log("Turning On the LED now");
	console.log("check 1");
	var update = {
					
					   "desired" : {
							"led" : 1
						}
					
				};
	console.log("check 2");
	console.log(thingPicker);
	iotdata.updateThingShadow(  {payload:JSON.stringify(update), 
	thingName: thingPicker
				}, function(err, data) {
									console.log("check 4");
								    if (err) {
									console.log("check 5");
									console.log(err);
								
									} else {
									console.log("check 6");
									console.log(data);
																								}
				});

  var header = createHeader(NAMESPACE_CONTROL,RESPONSE_TURN_ON);

  var payload = {};

  return createDirective(header,payload);

}// handleControlTurnOn


var handleControlTurnOff = function(event) {
	var thingPicker= config.IOT_THING_2;
		console.log("Turning Off the LED now");
		var update = {
					
					   "desired" : {
							"led" : 0
						}
					
				};
				console.log(thingPicker);
			iotdata.updateThingShadow({
					payload: JSON.stringify(update),
				   thingName: thingPicker
				}, function(err, data) {
					if (err) {
						console.log(err);
					} else {
						console.log(data);
					}
				}); 

  var header = createHeader(NAMESPACE_CONTROL,RESPONSE_TURN_OFF);

  var payload = {};

  return createDirective(header,payload);

}// handleControlTurnOff


var handleUnsupportedOperation = function() {

  var header = createHeader(NAMESPACE_CONTROL,ERROR_UNSUPPORTED_OPERATION);

  var payload = {};

  return createDirective(header,payload);

}// handleUnsupportedOperation


var handleUnexpectedInfo = function(fault) {

  var header = createHeader(NAMESPACE_CONTROL,ERROR_UNEXPECTED_INFO);

  var payload = {

    "faultingParameter" : fault

  };

  return createDirective(header,payload);

}// handleUnexpectedInfo


// support functions

var createMessageId = function() {

  var d = new Date().getTime();

  var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {

    var r = (d + Math.random()*16)%16 | 0;

    d = Math.floor(d/16);

    return (c=='x' ? r : (r&0x3|0x8)).toString(16);

  });

  return uuid;

}// createMessageId


var createHeader = function(namespace, name) {

  return {

    "messageId": createMessageId(),

    "namespace": namespace,

    "name": name,

    "payloadVersion": "2"

  };

}// createHeader


var createDirective = function(header, payload) {

  return {

    "header" : header,

    "payload" : payload

  };

}// createDirective


var log = function(title, msg) {

  console.log('**** ' + title + ': ' + JSON.stringify(msg));

}// log

与AWS Lambda Function相关的一段代码,它是智能家庭API,当它针对测试事件运行以打开灯时,它给出状态代码的“InvalidRequestException”:400

针对代码运行的测试事件是:`{

“标题”:{

“messageId”:“5d599a53-fe40-405f-b0ab-233611e2dc5c”,

“name”:“TurnOnRequest”,

“namespace”:“Alexa.ConnectedHome.Control”,

“payloadVersion”:“2”

},

“payload”:{

“accessToken”:“acc355t0ken”

}

}`

任何人都可以帮我解决这个异常。 提前致谢

0 个答案:

没有答案
相关问题