如何使用Amazon Alexa访问本地API

Mat*_*ark 5 api alexa aws-lambda alexa-skill alexa-skills-kit

我打算为亚马逊Alexa构建一套技能,它将与我家中的RaspberryPi上运行的自定义软件套件集成.

我正在努力弄清楚如何让Echo/Dot本身直接对raspberry pi进行API调用 - 无需通过互联网,因为目标设备将只有内联网连接 - 它将能够接收来自本地网络上的设备的命令,但无法通过世界访问.

根据我的阅读,典型的工作流程如下

Echo -> Alexa Service -> Lambda
Run Code Online (Sandbox Code Playgroud)

Lambda函数将向智能家居设备返回一大块数据; 使用此返回值

是否有可能,在收到lambda的响应后,如何让Alexa设备本身向本地网络上的设备发出API请求?

Ale*_*x Q 7

我有同样的问题,我的解决方案是使用SQS作为消息总线,以便我的RaspberryPi不需要从互联网访问.

Echo <-> Alexa Service <-> Lambda -> SQS -> RaspberryPi
                             A                 |
                             +------ SQS <-----+
Run Code Online (Sandbox Code Playgroud)

这个工作正常,只要:

  • 您在RaspberryPi上启用SQS的长轮询(20秒)并将每个请求的最大消息数设置为1
  • 你没有在Alexa和RaspberryPi之间来回传递的并发消息

这样做的好处是:

  • 最大消息大小为1时,即使在满足长轮询超时之前,只要队列中有一条消息可用,SQS请求就会返回
  • 在SQS的整个月内,每次只进行1次长时间轮询,这符合SQS免费等级的100万次请求
  • 从互联网访问您的RaspberryPi没有特殊的防火墙权限,因此RaspberryPi与lambda的连接总是"正常"
  • 比将RaspberryPi暴露给互联网更安全,因为没有暴露的恶意程序攻击端口


imT*_*chu 1

不久前在这个论坛上已经回答过这个问题,我很抱歉告诉你,从那时起,情况就没有改变:

Alexa 基于云,需要访问互联网/亚马逊服务器才能运行,因此您不能仅在内部网内使用它而无需外部访问。