1

我正在尝试开发一种与我自己的网络服务(tomcat)通信的alexa技能。要设置项目,我遵循了亚马逊指南(https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/deploying-a-sample-skill-as-a-web-service)。

现在我仍然无法连接到 web 服务,只收到消息“无法调用远程端点,或者它返回的响应无效”。

该服务托管在https://ec2-54-159-167-123.compute-1.amazonaws.com/PiaServer上,可通过 https 访问。我使用了自签名证书。我按照文档中的说明做了所有事情,但仍然无法连接。根本没有tomcat日志。

我的端点是来自 amazon java-skill-kit 的 SpeechletServlet。

当我通过 Postman(Chrome 插件)发出请求时,我得到了一个完美的 JSON 响应(见下文):

{ "version": "1.0", "response": { "outputSpeech": {"type":"PlainText", "text": "text" }, "card": { "type": "Simple", "title":`enter code here`"Tank", "content": "text" }, "shouldEndSession": true } }

你有任何想法如何解决这个问题吗?

编辑:我在 Amazon EC2 上托管服务。

4

2 回答 2

4

我今天遇到了同样的问题,但是使用了有效的 Let's encrypt 证书:

无法调用远程端点,或者它返回的响应无效。

Alexa 服务模拟器

就我而言,“无法调用远程端点”错误的原因是SSL 证书配置。

由于我的端点拥有有效的 Let's Encrypt 证书,因此我认为我必须选择该 My development endpoint has a certificate from a trusted certificate authority选项。

但这没有用。该请求甚至没有到达网络服务器。

Alexa SSL 证书配置导致

当您选择 My development endpoint is a sub-domain of a domain that has a wildcard certificate from a certificate authority它时,它将起作用。

工作 Alexa Skill SSL 配置

我使用 Runscope 作为透明代理来调试我的 Alexa 端点。如果您将 SSL 配置更改为“我的开发端点是具有通配符证书的域的子域”,您可以在流量检查器中看到请求:

Runscope 流量检查器中的 Alexa 请求

但我无法解释为什么第一个选项不起作用而第二个选项起作用。

起初我怀疑这与 SNI 有关,但事实并非如此。我检查了为这两个选项发送的数据包,在这两种情况下,亚马逊都server_name在 SSL 中发送Client Hello

于 2017-02-18T11:31:18.760 回答
0

我也遇到过同样的问题。我能够通过修改槽值来解决。例如,请求中的插槽部分如下所示,

   "slots": {"<intent-slot-name>": {
      "name": "<intent-slot-name>",
      "value": "<value>"
    }}
于 2017-06-08T06:17:32.620 回答