【问题标题】:Alexa Skill DynamoDB endpoint could not be reached无法访问 Alexa Skill DynamoDB 端点
【发布时间】:2016-10-24 23:51:53
【问题描述】:

我正在努力使用一项简单的 Alexa Skill 来更改我的 DynamoDB 中的一个值。我的代码基于 Amazon 提供的 ScoreKeeper 示例。当我使用服务模拟器甚至使用 Echo 进行测试时,我得到“无法调用远程端点,或者它返回的响应无效”。

这是我的内联代码。我已确保我的 Lambda 角色有权访问 DynamoDB。不知道我错过了什么。任何帮助表示赞赏!

var https = require('https');
var AWS = require("aws-sdk");


exports.handler = (event, context) => {

try {

if (event.session.new) {
  // New Session
  console.log("NEW SESSION");
}

switch (event.request.type) {

  case "LaunchRequest":
    // Launch Request
    console.log(`LAUNCH REQUEST`);
    context.succeed(
      generateResponse(
        buildSpeechletResponse("Welcome to an Alexa Skill, this is running on a deployed lambda function", true),
        {}
      )
    )
    break;

  case "IntentRequest":
    // Intent Request
    console.log(`INTENT REQUEST`);
    var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
    switch(event.request.intent.name) {
      case "IncreaseVolume":

        dynamodb.putItem({
            TableName: 'VolumeTable',
            Item: {
                DeviceID: {
                    S: this._session.user.userId
                },
                Volume: {
                    S: "5"
                }
            }
        }, function (err, data) {
            if (err) {
                console.log(err, err.stack);
            }
        });
        context.succeed(
            generateResponse(
            buildSpeechletResponse("Volume has been increased", true),
            {}
            )
        )
        break;


      default:
        throw "Invalid intent"
    }

    break;

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

  default:
    context.fail(`INVALID REQUEST TYPE: ${event.request.type}`)

}

} catch(error) { context.fail(`Exception: ${error}`) }

}

// Helpers
buildSpeechletResponse = (outputText, shouldEndSession) => {

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

}

generateResponse = (speechletResponse, sessionAttributes) => {

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

}

【问题讨论】:

  • 你解决了这个问题吗?

标签: node.js amazon-dynamodb aws-lambda alexa


【解决方案1】:

你应该这样重构你的代码:

dynamodb.putItem({
        TableName: 'VolumeTable',
        Item: {
            DeviceID: {
                S: this._session.user.userId
            },
            Volume: {
                S: "5"
            }
        }
    }, function (err, data) {
        if (err) {
            console.log(err, err.stack);
        }

        context.succeed(
            generateResponse(
            buildSpeechletResponse("Volume has been increased", true),
            {}
            );
        );
    });

【讨论】:

  • 谢谢。不幸的是,我仍然无法让远程端点工作。很奇怪。
猜你喜欢
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
相关资源
最近更新 更多