如何在没有 AWS 的情况下 运行 私有网络中的 Amazon Echo

How to run Amazon Echo inside a private network without AWS

我正在尝试将 Amazon Echo 用于我公司的一个公用事业项目。我有一堆 Intranet 站点,我打算从中收集信息并开发自定义技能,让用户查询数据。但是需要将客户端 jar(我正在使用 java)上传到 AWS 以创建 Lambda 函数,然后才能使用该自定义技能。这将不起作用,因为我的 jar 需要使用来自这些 Intranet 系统的 Web 服务。

有没有办法在不使用 AWS 的情况下 运行 在私有网络中回显?我试图在 internet/Whosebug 上找到任何相关信息,但找不到。

您可以在 Lambda 或可公开访问的网络上使用端点创建自定义技能。所以你在这里有几个选择。

1) 您可以在 Lambda 上发展您的技能,并在您的公司防火墙中打开一个(适当安全的)网关以允许访问您需要的 Intranet 资源。

2) 将您的技能发展为 Web 服务(使用 Java、Python、node.js 或其他语言)并将其托管在您的公司内部网中。然后在您的公司防火墙中打开一个(适当安全的)网关,使该端点可公开访问。把你的技能指向那个。

2a) 创建与 SSL 认证有关的 Web 端点有很多复杂性。许多人(包括我自己)采用的一种方法是创建一个 proxy service in Lambda。您将您的技能指向 Lambda,然后将 Lambda 指向您的 Web 服务。

您在这方面的成功主要取决于您与公司 IT 部门的密切合作,以在防火墙中打开漏洞。如果你在一家大公司,那可能很难。但是,如果您需要实时访问内部 Web 服务,那真的没有任何解决办法。

我们最终使用安全隧道为我们内部托管的网络服务创建了可公开访问的 url。它就像一个魅力。为此,我们使用了 ngrok:https://ngrok.com/

据我所知,任何针对您的 Amazon Echo 设备的语音命令都会发送到 Internet 上某处的 Amazon 服务器进行解释。该服务器解析语音命令并执行技能,可能采用 Web 服务调用的形式。 Echo 设备本身不会调用自定义 Web 服务,而是 Echo 与之交互的 Amazon 服务器将调用自定义 Web 服务。

我相信 Echo 设备必须收到某种形式的确认,以确认该任务是否已在亚马逊服务器上成功执行。在某些用途中,例如 "Alexa, what is today's weather?",Echo 设备将口头响应最终用户。在这种情况下,从亚马逊服务器返回到 Echo 设备的响应也将包含 Echo 设备将 "speak" 的口头响应。从 Echo 实现的角度来看,口头响应数据不是强制性的。有些命令是即发即忘,没有口头回应 - 例如 "Alexa, turn TV on."

我想我要说的是,如果您的 Web 服务位于专用网络上并且在您的网络之外无法访问,则 Amazon 服务器无法调用您的 Web 服务。即使 Echo 设备位于防火墙内部和专用网络上,我也看不到 Echo 设备本身调用 Web 服务的方式——这些来自互联网上某处的亚马逊服务器。

我怀疑随着更多的 Echo 集成(例如现在在汽车中),亚马逊将考虑提供一种 Echo 解决方案,其中数据可以包含在专用网络中。

语音用户界面 (VUI) 正迅速成为下一个技术前沿。