首页 > 解决方案 > 为了从 Dynamo 和 Lex 接收正确的数据,我应该在此代码中添加/删除什么?

问题描述

我编写了一个 lambda 函数,用于接收来自 Amazon Lex 的数据,当触发该函数时,它将转到我拥有的 DynamoDB,并将查询表以获取通过 Lex 提供的信息。但是,目前我无法让查询工作,因为它没有显示我正在寻找的结果。如何获取通过 lex 收集的信息,并将他们所说的内容与 Dynamo 中的某些信息相匹配?(dynamodb 列出了 400 多个可供他们选择的项目,其中很多是相似的)

我尝试了扫描,但这并不能满足我的需要。它不会给出测试参数中给出的正确数据。

'use strict';

const aws = require('aws-sdk');
const dynamo = new aws.DynamoDB();

module.exports.handler = function(intentRequest, context, callback) {
  console.log(intentRequest);
  dynamo.query({
    TableName:'ServiceOfferings',
    KeyConditionExpression: '#name = :searchName',
    ExpressionAttributeNames: {
      "#name": "name",
    },
    ExpressionAttributeValues: {
      ":searchName":{"S":"PCC"} //PCC is an example of what i need searched through lex. That value needs to be dynamic.
    }
  },(err, data)=>{
    console.log(data);
    callback(err, data);
  });
};

这是我从测试参数收到的响应:

Response:
{
  "Items": [],
  "Count": 0,
  "ScannedCount": 0
}

Request ID:
"ca1d95ce-161e-487d-8ca5-db80d5799724"

Function Logs:
START RequestId: ca1d95ce-161e-487d-8ca5-db80d5799724 Version: $LATEST
2019-10-03T14:59:00.139Z    ca1d95ce-161e-487d-8ca5-db80d5799724    INFO    { 'dialog-state': 'ReadyForFulfillment',
  'input-transcript': 'PCC',
  slots: { list: 'PCC' },
  'intent-name': 'getServiceOffering' }
2019-10-03T14:59:00.899Z    ca1d95ce-161e-487d-8ca5-db80d5799724    INFO    { Items: [], Count: 0, ScannedCount: 0 }
END RequestId: ca1d95ce-161e-487d-8ca5-db80d5799724
REPORT RequestId: ca1d95ce-161e-487d-8ca5-db80d5799724  Duration: 1034.16 ms    Billed Duration: 1100 ms    Memory Size: 128 MB Max Memory Used: 92 MB  Init Duration: 414.90 ms    

标签: javascriptaws-lambdaamazon-dynamodbdynamodb-queries

解决方案


替换":searchName":{"S":"PCC"}":searchName":"\"PCC\""(考虑哈希键的引号)

您还应该修复散列键 btw 上的数据条目,将 ExpressionAttributeValues 留给":searchName":"PCC"


推荐阅读