无法使用echosim.io的特定请求调用技能

时间:2017-12-26 07:05:30

标签: alexa-skills-kit

这是Alexa技能代码:

'use strict';
const Alexa = require("alexa-sdk");

exports.handler = function(event, context, callback) {
    console.log("skill-sample-nodejs-hello-world Received an event");
    console.log("event=");
    console.dir(event);
    const alexa = Alexa.handler(event, context);
    alexa.registerHandlers(handlers);
    alexa.execute();
};

const handlers = {
    'LaunchRequest': function () {
        console.log("LaunchRequest called()");
        this.response.speak('Hello World Init!').listen("I am listening SayHelloInit");
        this.emit(':responseReady');
        //this.emit('SayHelloInit');
    },
    'HelloWorldIntent': function () {
        console.log("hello world intent called");
        this.response.speak('Hello World How are you!').listen("I am listening sayhello");
        this.emit(':responseReady');
        //this.emit('SayHello');
    },
    'AMAZON.HelpIntent': function () {
        const speechOutput = 'This is the Hello World Sample Skill. ';
        const reprompt = 'Say hello, to hear me speak.';

        this.response.speak(speechOutput).listen(reprompt);
        this.emit(':responseReady');
    },
    'AMAZON.CancelIntent': function () {
        this.response.speak('Goodbye!');
        this.emit(':responseReady');
    },
    'AMAZON.StopIntent': function () {
        this.response.speak('See you later!');
        this.emit(':responseReady');
    },
    'SessionEndedRequest': function () {
        console.log("SESSIONENDEDREQUEST");
        this.response.speak("SessionEndedRequest. Goodbye!");
        this.emit(':responseReady');
    },
    'Unhandled': function() {
        console.log("UNHANDLED");
        const message = 'Unhandled';
        this.response.speak(message).listen(message);
        this.emit(':responseReady');
    }
};

以下是一些观察到的奇怪行为:

来自亚马逊开发者控制台中的Alexa模拟器,无法通过"启动hello world回家",响应是"抱歉,我不知道&#34 ;.但是在我通过"启动你好世界"来调用技能后,我可以通过"启动你好世界回家"得到回应"你好世界你好!"。

从Echosim.io,我可以通过"启动你好的世界"来调用技能,但是我永远不能通过"启动你好世界回家"。它回复了"抱歉,我不知道"。此外,没有任何重新发表的言论被播放出来。

从cloudwatch日志中,有时我会看到" SessionEndedRequest"使用原因码" USER_INITIATED"发送到lambda函数。我没有说任何"停止,取消" USER_INITIATED SessionEndedRequest是如何触发的?这在某种程度上与谴责言论从未发挥过的事实相关吗?

"回家"映射如下:

            {
              "name": "HelloWorldIntent",
              "samples": [
                  "hello",
                  "say hello",
                  "who are you",
                  "go home",
                  "hello world"
              ],
              "slots": []
            }

1 个答案:

答案 0 :(得分:0)

我看到很多帖子最近都没有得到重新谴责。我认为SDK可能无法按照第一行中的预期构建响应。

this.response.speak(speechOutput).listen(reprompt);
this.emit(':responseReady');

请尝试使用此行。

this.emit(':ask', speechOutput, reprompt);

这应该等同于你的。

关于echosim.io的问题。你用适当的麦克风录制你的话语吗?根据我的经验,即使我使用耳机麦克风,echoism.io在识别我的意思时也遇到了很多麻烦。

相反,我建议使用echo设备(如果可能)或者在开发者控制台中使用新推出的Test Simulator BETA。