在Alexa技能中从DynamoDB读取数据。

问题描述 投票:0回答:1

我想创建一个简单的技能,用户将能够找到老师的柜子在哪里。基本上是这样的: So basically something like this. "Alexa, where can I find teacher X? "Alexa, 我在哪里可以找到X老师?" "你可以在Y房间找到X老师" "You can find teacher X in room Y". 我已经设法创建了DynamoDB表,其中我有一个老师的名字作为主键,房间(他们的橱柜)作为主排序键。我所需要的是告诉Alexa我在找哪位老师,老师的名字以相同的意图存储在插槽中,然后Alexa会检查DynamoDB并在主键下搜索从插槽中提取的老师的名字,然后从主排序键中告诉我房间名称。 Alexa中的代码真的很困扰我,我查看了互联网上所有的答案和教程,但要么是没有什么适合我的,要么是太老了,所以我无法将其转化为2020年风格的Alexa编码。我对json和后端编程的知识实在是太少了。你能给我一些提示或一些代码我可以遵循吗?在我看来,这样的东西应该是非常简单的,但它真的不是,至少对我来说是这样。

json amazon-dynamodb alexa dynamo
1个回答
0
投票

如果我接近这个设计...。

先决条件 :

  1. AWS账户 。配置了技能端点触发器的Lambda,并在Alexa开发者控制台中注册了该技能。

  2. DynamoDB表与你提到的模式(primaryKey : teacherName, sortKey : room)在同一个AWS账户中。看来你是打算创建一个复合主键。它有它的好处,但通过这里的核心组件解释来检查你是否真的需要它。

https:/docs.aws.amazondynamodblatestdeveloperguideHowItWorks.CoreComponents.html。

  1. SQS(可选)

https:/aws.amazon.comsqs。

关于实施的一些建议 。

  1. 定义好技能交互模型。包括AMAZON.Fallback Intent并在你的代码中实现它。这将有助于处理角落的情况,当你得到你没有预期的槽值或你的技能得到非预期的请求处理。这将确保你总是向客户发送优雅的响应。
  2. 用适当的槽值类型定义槽。
  3. 在代码中,当你的技能的lambda被触发时,在检查你的主要功能的canHandle方法并验证你已经收到了正确的Intent的请求之后--首先确保槽值被解释为具有良好的置信度ER MATCH。这里有一篇文章详细介绍了这个问题。

https:/developer.amazon.comlogsalexapostcfbd2f5e-c72f-4b03-8040-8628bbca204calexa-skill-teardown-understanding-entity-resolution-with-pet-match。

  1. 我建议你创建一个数据模型,将存储在DDB中的教师教室数据映射到你的代码中。这将帮助你以一种干净的方式从代码中创建记录,同时它也为你的代码中的DDB表访问定义了一种合同。

  2. 之后,你可以在你的处理方法中创建一个DDB客户端,它将从教师-房间表中查询数据,并返回一个响应给客户,如果该条目是存在的,将向客户发送优雅的响应。

  3. 你可以按照这里来了解使用java(或任何你喜欢的东西,你会在这里找到)对DDB的程序化访问。

https:/docs.aws.amazondynamodblatestdeveloperguideGettingStarted.Java.html。

https:/docs.amazonaws.cnen_usamazondynamodblatestdeveloperguideJavaDocumentAPICRUDExample.html。

  1. 一旦你从DDB得到有效的数据,你就可以建立并发送相同的响应给客户。

  2. 同时在你的代码中实现Fallback Intent来处理你在自定义的Intent中没有处理的情况。

  3. (可选)你可以使用SQS来存储错误事件(你从Fallback中捕捉到的或只是异常),你可以在以后重新访问这些事件,以调试和修复你的服务中的问题。

我希望这个答案能给你一些设计的概述和一些基本的做法,为这个用例的技能提供遵循。

© www.soinside.com 2019 - 2024. All rights reserved.