无法调试“请求的技能的响应存在问题”

时间:2018-09-12 13:39:55

标签: alexa alexa-skills-kit alexa-slot

背景:我正在通过抽认卡技能进行工作,该技能使Alexa能够提出有关编程语言的基本问题。用户可以在Ruby,Python或JS之间进行选择。

进展是这样:

  • LaunchRequest欢迎用户,然后询问他们的语言偏好
  • 用户做出响应,导致SetLanguageIntent触发
  • 然后询问用户

但是,我无法通过SetLanguageIntent而没有遇到“请求的技能的响应存在问题”。

这里是对话: enter image description here

从响应中可以看到,SetLanguageIntent已正确激活,并且插槽ruby也正确匹配。

"request": {
        "type": "IntentRequest",
        "requestId": "amzn1.echo-api.request.743f750e-96d9-4ef9-aeba-e0aec2e45afb",
        "timestamp": "2018-09-12T13:35:25Z",
        "locale": "en-US",
        "intent": {
            "name": "SetMyLanguageIntent",
            "confirmationStatus": "NONE",
            "slots": {
                "language": {
                    "name": "language",
                    "value": "ruby",
                    "resolutions": {
                        "resolutionsPerAuthority": [
                            {
                                "authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.ee34487d-d343-4deb-ab6c-193777c92aa8.languages",
                                "status": {
                                    "code": "ER_SUCCESS_MATCH"
                                },
                                "values": [
                                    {
                                        "value": {
                                            "name": "ruby",
                                            "id": "58e53d1324eef6265fdb97b08ed9aadf"
                                        }
                                    }
                                ]
                            }
                        ]
                    },
                    "confirmationStatus": "NONE"
                }
            }
        }

但是,此时始终会出现错误消息“请求的技能的响应存在问题”。 CloudWatch Logs上没有报告错误。

作为参考,这是SetLanguageIntent代码。如评论中所述,至少应该说测试“ Okay”。但是,它不会执行。

'SetMyLanguageIntent': function() {

    this.response.speak('Okay'); //this should at least have been said

    this.attributes.flashcards.currentLanguage = this.event.request.intent.slots.languages.value;
    var currentLanguage = this.attributes.flashcards.currentLanguage

    this.response
      .speak('Okay, I will ask you some questions about ' +
        currentLanguage + '. Here is your first question. ' + 
        AskQuestion(this.attributes))
      .listen(AskQuestion(this.attributes));

    this.emit(':responseReady');
  },

非常感谢您的帮助!

编辑:已更新插槽名称

enter image description here

2 个答案:

答案 0 :(得分:1)

我看到您的代码有问题。这就是为什么您可能遇到问题的原因。您正在尝试访问未定义的属性this.event.request.intent.slots.languages.value。错误是语言一词。应该是语言。

因此,获取插槽值的方法应为: this.event.request.intent.slots.language.value

答案 1 :(得分:0)

我为自己解决了相同的问题,只需在响应中添加一个cardRenderer()。像这样:

this.response.speak("my text").cardRenderer("ttitle","some content","image");

在测试模拟器的设备日志中,我注意到出现了卡片渲染器,说该技能以失败作为响应。所以我拍了照,奏效了。希望这也能为您解决!