3

我正在尝试在本地主持一项技能。我正在使用 alexa-skills npm 模块和提供的示例代码:https ://www.npmjs.com/package/alexa-skills 。我在 console.logs 中添加以检查代码是否正在运行,当我运行脚本时它会侦听,但是当我连接到它时没有得到控制台日志。

var express = require('express'),
    AlexaSkills = require('alexa-skills'),
    app = express(),
    port = process.env.PORT || 8000,
    alexa = new AlexaSkills({
        express: app, // required 
        route: "/", // optional, defaults to "/" 
        applicationId: "amzn1.echo-sdk-ams.app.XXXXXXX" // optional, but recommended 
    });

alexa.launch(function(req, res) {

        console.log('launch \n');

    var phrase = "Welcome to my app!";
    var options = {
        shouldEndSession: false,
        outputSpeech: phrase,
        reprompt: "What was that?"
    };

    alexa.send(req, res, options);
});

alexa.intent('Hello', function(req, res, slots) {

    console.log('intent \n');
    console.log(slots);

    var phrase = 'Hello World!';
    var options = {
        shouldEndSession: true,
        outputSpeech: phrase,
        card: alexa.buildCard("Card Title", phrase)
    };

    alexa.send(req, res, options);
});

alexa.ended(function(req, res, reason) {
    console.log(reason);
});

console.log('starting server \n');
app.listen(port);

我使用 curl 命令来模拟回声将发送的内容(我的回声还没有出现):

curl -v -k http://localhost:8000/hello --data-binary '{
  "session": {
    "sessionId": "SessionId.XXXXXXXXXX",
    "application": {
      "applicationId": "amzn1.echo-sdk-ams.app.XXXXXXXXX"
    },
    "user": {
      "userId": "amzn1.echo-sdk-account.XXXXXXXXXX"
    },
    "new": true
  },
  "request": {
    "type": "LaunchRequest",
    "requestId": "EdwRequestId.XXXXXXXXX",
    "timestamp": "2016-01-18T05:36:27Z"
  }
}'

我得到这个回应:

*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8000 (#0)
> POST /hello HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.43.0
> Accept: */*
> Content-Length: 493
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 493 out of 493 bytes
< HTTP/1.1 404 Not Found
< X-Powered-By: Express
< X-Content-Type-Options: nosniff
< Content-Type: text/html; charset=utf-8
< Content-Length: 19
< Date: Mon, 18 Jan 2016 05:47:44 GMT
< Connection: keep-alive
< 
Cannot POST /hello
* Connection #0 to host localhost left intact

在我看来,这似乎行不通。我没有看到任何尝试从代码中做出响应(当我测试它时,我确实确保 ID 匹配)。为什么这个脚本不生成输出也没有日志输出?

Node = v5.4.1
npm = 3.3.12
express = 4.13.3
alexa-skills = 0.1.0

谢谢!

4

3 回答 3

3

加入进来有点晚了,但这可能会让你的生活更轻松。

有一个为本地技能开发而构建的工具。

BST 工具

来自 Alexa 的请求和响应将直接发送到您的本地服务器,这样您就可以快速编码和调试,而无需进行任何部署。我发现这对我们自己的发展非常有用。

它是开源的:https ://github.com/bespoken/bst

于 2016-09-14T14:12:06.783 回答
2

您正在向http://localhost:8000/hello发出 curl 请求,但我相信它应该是http://localhost:8000/

当您尝试从 Alexa 使用时,请不要忘记:

  • 创建证书(自签名足以开发)
  • 如果节点模块不为您执行 https,则实施 https(如果模块正在执行,这也可能是您的问题的一部分。
  • 使用命名端点。您不能在 Alexa 技能定义中使用 IP 地址。对 DNS 条目使用 DuckDNS 或类似服务。
于 2016-01-18T23:23:54.103 回答
0

您还可以按照本教程在本地测试您的技能: 如何在本地测试 Alexa

于 2018-03-11T04:38:12.563 回答