繁体   English   中英

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

[英]Run exports.handle in AnswerIntentHandler - node.js - alexa skill

我目前正在开发Amazon Alexa技能,该技能要求用户提供颜色。 用户通过语音输入颜色,然后Alexa检查颜色是否在定义的值数组中。 如果是这种情况,它将返回带有ID的颜色名称。 现在这可以按预期工作,但是现在我想将此值放入AWS DynamoDB中。 我阅读了一些有关如何使用AWS Lambda(Runtime Node.js 8.10)进行连接和写入DynamoDB的教程。因此,在以下代码中,您可以看到Alexa技能的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 请看一下这个例子(DynamoDB支持代码在helpers.js文件中)。 巧合的是,它也可以处理颜色。

如果您存储的数据与每个技能用户(例如,用户属性)相关联,则DynamoDB持久性的一种简单得多的方法是使用ASK持久性属性 (在ASK SDK中已得到支持)。

我试图编辑代码,并将整个DynamoDB发布到另一个名为dynamodb.js的文件中。 这是内容:

const AWS         = require('aws-sdk');
const docClient   = new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});

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

var params = {
    Item: { 
    date: Date.now(),
    message: "This hopefully works"

    },

    TableName: 'alexa_farbe'

};

docClient.put(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
 }
 });
};

我只想将日期和示例短语写到我的DynamoDB中。

为了触发此功能,我尝试在我的Alexa Skill的AnswerIntentHandler中实现某种“ runScript”。 但是它似乎没有触发文件。 您能给我一些建议吗,这段代码有什么问题以及如何从AnswerIntent中调用另一个node.js文件。 这是我编辑的AnswerIntent:

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;
let number = slots['FarbAuswahl'].value;
let 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!`;

 module.runScript('./some-script.js', function (err) {
  if (err) throw err;
  console.log('finished running some-script.js');
 });



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

},

};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM