You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Alexa技能调用DynamoDB数据时出现TypeError: Cannot read property 'type' of undefined

解决Alexa技能调用DynamoDB时的TypeError问题

咱们来拆解你遇到的核心问题:DynamoDB查询参数错误+Lambda响应格式不符合Alexa规范,这两个问题共同导致了TypeError: Cannot read property 'type' of undefined的报错,下面一步步帮你修复:

1. 修正DynamoDB查询参数

你当前的params把incident也塞进了Key里,但DynamoDB的Key只能包含表的主键(Partition Key)和排序键(Sort Key),incident作为普通属性绝对不能放在这里。假设你的表用date做主键、time做排序键,那正确的查询参数应该是这样:

let GetMachineStateIntent = (context, callback) => {
  // 只保留主键和排序键在Key中
  var params = {
    TableName: "updatedincident",
    Key: {
      date: "2017-03-21",
      time: "07:38"
    }
  };

  // 初始化DynamoDB客户端并执行查询
  const dynamodb = new AWS.DynamoDB.DocumentClient();
  dynamodb.get(params, (err, data) => {
    if (err) {
      console.error("查询DynamoDB出错:", err);
      callback(null, buildAlexaResponse("抱歉,获取事件记录时遇到了问题"));
      return;
    }

    // 根据查询结果返回对应响应
    if (data.Item) {
      const incidentContent = data.Item.incident;
      callback(null, buildAlexaResponse(`查询到的事件是:${incidentContent}`));
    } else {
      callback(null, buildAlexaResponse("没有找到对应时间的事件记录哦"));
    }
  });
};

2. 构建符合Alexa要求的响应格式

报错Cannot read property 'type' of undefined大概率是因为你的Lambda没有返回标准结构的响应。Alexa要求响应必须包含固定的JSON结构,比如outputSpeech、shouldEndSession等字段,你可以封装一个工具函数来生成合规响应:

// 生成Alexa标准响应的工具函数
function buildAlexaResponse(speechText) {
  return {
    version: "1.0",
    response: {
      outputSpeech: {
        type: "PlainText",
        text: speechText
      },
      shouldEndSession: true
    }
  };
}

3. 额外注意事项

  • 确保你的Lambda执行角色已经配置了访问DynamoDB的权限(比如AmazonDynamoDBReadOnlyAccess),否则会触发权限报错;
  • 如果日期和时间是用户通过语音指定的,记得从Alexa请求的插槽中提取,而不是硬编码,比如通过event.request.intent.slots.date.value获取用户说的日期。

按上面的调整后,你的技能应该就能正确调取DynamoDB的事件记录,并且返回符合要求的响应给Alexa了。

内容的提问来源于stack exchange,提问作者zuba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:34:39