【问题标题】:Read data from DynamoDB in Alexa Skill在 Alexa Skill 中从 DynamoDB 读取数据
【发布时间】:2020-05-20 16:53:17
【问题描述】:

我想创建简单的技能,用户可以在其中找到老师的柜子在哪里。所以基本上是这样的:“Alexa,我在哪里可以找到 X 老师?” “你可以在 Y 房间找到 X 老师”。 我设法创建了 DynamoDB 表,其中我有一个老师的名字作为主键,房间(他们的橱柜)作为主排序键。它应该正确连接到 lambda 和我的 alexa 技能。 我只需要告诉 Alexa 我要找哪位老师,老师的姓名以相同的意图存储在插槽中,然后 Alexa 将检查 DynamoDB 并在主键下搜索从插槽中提取的老师的姓名,然后告诉我来自主排序键的房间名称。 Alexa 中的代码真的让我很困扰。 我检查了我在互联网上可以找到的所有答案和教程,但要么对我没有用,要么太旧,以至于我无法将其转换为 2020 年的 Alexa 编码风格。总的来说,我对 json 和后端编程的了解非常少。 你能给我一些提示或一些我可以遵循的代码吗?在我看来,这样的事情应该很简单,但实际上并非如此,至少对我而言。 提前感谢您的帮助。

【问题讨论】:

  • 请分享一些代码sn-ps。
  • 目前没有,因为我什么都做不了,我已经发挥作用的技能(只有简单的硬编码答案)根本不起作用,所以我删除了与此有关的所有内容问题,现在回到简单的硬编码答案。我还研究了在 S3 存储桶上创建 csv/json 文件的可能性,我目前将其用于音频文件(以 Alexa 不支持的语言录制的答案)。也许会这样?但我不知道如何从已识别的插槽中获取字符串,在文件中搜索并将其用作答案
  • 您需要查看来自 DabbleLab 的此链接:dabblelab.com/tutorials/using-dynamodb-with-custom-alexa-skills 要构建此功能,您应该逐步构建它并使用 Alexa 托管的 Lambda。从能够成功读取静态 JSON (S3) 开始,然后转向从 DynamoDb 读取所有项目。一旦你有了它,开始使用 Slots 值来查询数据库。使用托管 Lambda,您将拥有 CloudWatch 和 S3 集成。当您将 console.log('some message') 添加到 IntentHandlers 时,您可以在 CloudWatch 中看到输出。

标签: json amazon-dynamodb alexa


【解决方案1】:

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

先决条件:

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

  2. DynamoDB 表与您提到的架构(primaryKey:teacherName,sortKey:room)在同一个 AWS 账户中。
    看起来您正计划创建一个复合主键。它有它的好处,但请在此处查看核心组件说明以检查您是否真的需要它。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html

  1. SQS(可选)

https://aws.amazon.com/sqs/

一些实施建议:

  1. 定义良好的技能交互模型。包括 AMAZON.Fallback Intent 并在您的代码中实现它。它将有助于处理您获得未预料到的槽值或您的技能得到意外请求处理的极端情况。这将确保您始终向客户发送优雅的回复。
  2. 使用适当的槽值类型定义槽。
  3. 在代码中,当为您的技能触发 lambda 时,在检查您的主要功能的 canHandle 方法并验证您已收到正确 Intent 的请求后 - 首先确保以良好的信心解释槽值 ER MATCH .这是一篇文章,了解详细信息:

https://developer.amazon.com/blogs/alexa/post/cfbd2f5e-c72f-4b03-8040-8628bbca204c/alexa-skill-teardown-understanding-entity-resolution-with-pet-match

  1. 我建议您创建一个数据模型,将存储在 DDB 中的教师教室数据映射到您的代码。
    这将帮助您以一种干净的方式从代码本身以编程方式创建记录,它还定义了一种从您的代码访问 DDB 表的协定。

  2. 发布后您可以在处理程序方法中创建一个 DDB 客户端,该方法将从教师房间表中查询数据,并在存在条目时向客户返回带有房间号的响应,否则将发送优雅回复客户。

  3. 您可以按照此处了解使用 java 对 DDB 的编程访问(或任何您喜欢的,您可以在此处找到):

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.Java.html

https://docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/JavaDocumentAPICRUDExample.html

  1. 从 DDB 获得有效数据后,您可以构建响应并将其发送给客户。

  2. 还要在您的代码中实现 Fallback Intent 以处理您未处理自定义意图的情况。

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

我希望这个答案能给你一些设计概述和一些基本实践,以便你掌握这个用例的技能。

【讨论】:

    猜你喜欢
    • 2018-05-05
    • 2020-09-13
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多