node.js - 在AnswerIntentHandler中运行exports.handle - node.js - Alexa技能

标签 node.js amazon-dynamodb alexa-skills-kit

我目前正在开发 Amazon Alexa Skill,它会要求用户提供颜色。用户通过语音输入颜色,Alexa 会检查颜色是否在定义的值数组中。如果是这种情况,它将返回带有 ID 的颜色名称。现在这可以按预期工作,但现在我想将此值放入 AWS DynamoDB 中。我阅读了一些有关如何使用 AWS Lambda (Runtime Node.js 8.10) 连接和写入 DynamoDB 的教程 因此,在下面的代码中,您可以看到我的 Alexa Skill 的 AnswerIntentHandler。我包括了导出。处理函数将颜色 ID 的值和颜色名称写入名为“alexa_farbe”的表中。但是,当我使用 Alexa Skill 开发人员模拟 Skill 时,代码仅给出“speechText”,并且似乎没有运行代码来写入 DynamoDB。也许无法在AnswerIntentHanlder中运行exports.handle,或者是吗?我对这个主题非常陌生,所以我不太确定这段代码中的错误在哪里。我提供了 AnswerIntentHandler 的代码,但我也可以提供 Alexa Skill 的完整代码。 我希望有人能给我提示该做什么。

const AnswerIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest'
      && handlerInput.requestEnvelope.request.intent.name ===   'AnswerIntent';
  },
  handle(handlerInput) {
    const slots = handlerInput.requestEnvelope.request.intent.slots;
const number = slots['FarbAuswahl'].value;
var numberid = slots['FarbAuswahl'].resolutions.resolutionsPerAuthority[0].values[0].value.id; /* ID der Farbe auslesen */

var speechText = 0;

 speechText = `Prima, ich stelle die Farbe ${number} mit der ID ${numberid} ein!`;


/* Ab hier Versuch in die Datenbank DynamoDB zu schreiben */

exports.handle = function(e, etx, callback) {

    var params = {
        Item: {
            ID: '${numberid}',
            Farbname: '${number}'
        },

        TableName: 'alexa_farbe'
    };

    docClient.put(params, function(err, data) {
        if(err) {
            callback(err, null);
        } else {
            callback(null, data);
        }


    });
};    

  return handlerInput.responseBuilder
  .speak(speechText)
  .withSimpleCard('Ausgewählte Farbe:', speechText)
  .getResponse();

},


};

最佳答案

您不应将代码放入 exports.handler 中。请查看this示例(DynamoDB 支持代码位于 helpers.js 文件中)。巧合的是,它也可以处理颜色。

如果您存储的数据与每个技能用户相关联(例如用户属性),则进行 DynamoDB 持久化的更简单方法是使用 ASK persistent attributes (ASK SDK 已支持)。

关于node.js - 在AnswerIntentHandler中运行exports.handle - node.js - Alexa技能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53315224/

相关文章:

javascript - 如何制作node js在线视频流

javascript - Passport "Hello World"总是失败

amazon-dynamodb - DynamoDB Multi-Tenancy - 分区键

amazon-dynamodb - 我可以使用 DynamoDB Mapper 删除项目而不先加载它吗?

alexa - 从 Lambda 函数调用 REST API

alexa-skills-kit - 如何在 Amazon Echo 中从偏移量播放 mp3 文件

Alexa,无法关联您的技能

node.js - 我可以使用express.js上传的文件名作为ID吗?

javascript - 同步上传多个文件到 s3 安全吗?

amazon-web-services - 是否可以使用带有嵌入式 DynamoDBEmbedded 的 AmazonDynamoDBAsyncClient 进行测试?