Alexa (Lambda) 在说“退出”后没有返回 StopIntent

问题描述 投票:0回答:2

长话短说...

  1. 我从Facts蓝图“空间事实”开始了一个简单的技能

  2. 创建了一个const ->

    const WELCOME_MESSAGE = "Welcome! You want a space fact?";

  3. 并将 LaunchRequest 与 IntentRequest 分开(因此,用户可以说“开放空间事实”或说“开放空间事实并说一个事实”)

    'LaunchRequest': function () {
    this.emit(':ask', WELCOME_MESSAGE); }
    'IntentRequest': function () {
    this.emit('GetNewFactIntent'); }
    

*现在如果我仅通过说“启动空间技能”来启动技能... 我收到欢迎消息和“shouldEndSession”:如预期的 false,

但是如果我此时说“退出”,我会收到:

“所请求的技能响应存在问题”

我的 JSON INPUT 显示预期的“SessionEndedRequest”

    "request": {
    "type": "SessionEndedRequest",
    "requestId": "amzn1.echo-api.request.c6ea8178-3cdb-4119-ae73-e8ea86ebba6d",
    "timestamp": "2018-09-25T01:14:05Z",
    "locale": "en-US",
    "reason": "USER_INITIATED"
}

但是我得到一个“null”JSON 输出..

-我做了一些研究,发现了这个 https://github.com/alexa/skill-sample-nodejs-fact/issues/3

-我也尝试过像这样的“未处理”...但仍然没有运气

    'Unhandled': function () {
    this.emit('AMAZON.StopIntent');  },

因此,今天我的技能被拒绝了,所以我想修复它并重新上传。

aws-lambda exit alexa-skills-kit
2个回答
3
投票

再次您好,感谢您的宝贵时间!

重新阅读我通过电子邮件收到的认证反馈后,问题是
“说“停止”后不返回 StopIntent”而不是说“退出”

另外从我现在的理解来看,“停止”、“取消”、“退出”和“退出”这些词都有自己预定义的功能,从中:

-当用户说“停止”时,它应该指向“StopIntent”

-当用户说“取消”时,它应该发送给“CancelIntent”

-在说“退出”或“退出”之后,应该 USER_INITIATED 用“SessionEndedRequest”强制关闭并且没有得到任何答复。

因此,这些单词不应包含在 StopIntent、CancelIntent、HelpIntent 或 NavigateHomeIntent 内的示例话语中。另外,如果前面的任何一条语句不起作用,那么您就无法通过认证。

经过一番分析,我的问题不在Lambda内部,而是出在我的技能表达上。问题的原因是在 StopIntent 和 CancelIntent 中添加了“exit”和“stop”一词。

根据我的测试,在StopIntent中包含或不包含“stop”一词没有什么区别,但如果在StopIntent和CancelIntent中包含“stop”一词,则会产生干扰,并且没有任何答案。

现在我重新提交了我的技能,希望它能尽快上传。 我在这里写下这篇文章是为了防止像我这样的新手陷入同样的情况。 再次感谢,编码愉快!


0
投票

以防万一有人对如何捕获退出意图感兴趣:

/* *
 * SessionEndedRequest notifies that a session was ended. This handler will be triggered when a currently open 
 * session is closed for one of the following reasons: 1) The user says "exit" or "quit". 2) The user does not 
 * respond or says something that does not match an intent defined in your voice model. 3) An error occurs 
 * */
const SessionEndedRequestHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'SessionEndedRequest';
    },
    handle(handlerInput) {
        console.log(`~~~~ Session ended: ${JSON.stringify(handlerInput.requestEnvelope)}`);
        // Any cleanup logic goes here.
        return handlerInput.responseBuilder
            .speak('See you soon!')
            .addAudioPlayerStopDirective()
            .getResponse();
    }
};

从那里:https://github.com/alexa-samples/skill-sample-nodejs-audio-player/blob/mainline/lambda/index.js

© www.soinside.com 2019 - 2024. All rights reserved.