Alexa功能在AWS LAMDA中起作用,但不能来自服务模拟器



我对AWS和Alexa技能是相对较新的。我正在建立一种简单的定制技能,可根据天气为您提供穿衣建议。

我有2个自定义意图:doflingtodayIntent&梳妆台。在开发人员门户网站的服务模拟器中,我的两个意图不起作用,但是我确实得到了lambda响应,但是有了不确定的outputspeech,例如:

{ 
 "version": "1.0", 
 "response": { 
   "outputSpeech": { 
     "type": "SSML", 
     "ssml": "<speak> undefined </speak>" 
   }, 
   "card": null, 
   "reprompt": null, 
   "speechletResponse": { 
     "outputSpeech": { 
       "id": null, 
       "ssml": "<speak> undefined </speak>" 
     }, 
     "card": null, 
     "directives": null, 
     "reprompt": null, 
     "shouldEndSession": true 
   } 
 }, 
 "sessionAttributes": {} 
}

这可能是我的意图代码中的范围问题吗?

'DressingTodayIntent': function() {
    var dressingAdvice;
    var speechOutput = getJSON('https://api.darksky.net/forecast/9e0495a835ed823a705a9a567eee982a/48.861317,2.348764?units=si&exclude=currently,minutely,hourly,alerts,flags',
        function(err, forecast) {
            if (err) {
              console.log('Error occurred while trying to retrieve weather data', err);
            } else {
              dressingAdvice = getDressingAdvice(forecast, true);
              console.log("one " + dressingAdvice);
            }
            console.log("two " + dressingAdvice);
            return dressingAdvice;
        });
    console.log("three " + speechOutput);
    this.response.cardRenderer("Your dressing advice for today:", speechOutput);
    this.response.speak(speechOutput);
    this.emit(':responseReady');
},

在AWS lambda中,我看到了前2个日志的正确输出,第三个错误的错误:

  • 第一个日志:"一个" dressingAdvice,如预期的
  • 第二lig:"两个" dressingAdvice,如预期的
  • 第三log:"三" 未定义

谢谢您的帮助!

当您说"从AWS lambda进行测试"时,我认为您是说您使用AWS控制台将JSON测试消息发送给Lambda,然后查看响应JSON以确定是否正确吗?

如果是这样,请确保与Dev Portal中的Alexa测试页面发送的JSON匹配。听起来它们可能不同。

另外,请确保您链接到Alexa技能中正确的ARN。

undefined可能是代码中的可变范围问题。

我在您的回复中注意到您没有任何sessionAttributes。是您的代码设置还是从会话值中提取响应的值?如果是这样,则需要使用sessionAttributes发送值。

我弄清楚了什么问题,我需要将响应代码移动到回调函数中,例如:

'DressingTodayIntent': function() {
    var speechOutput;
    var self = this;
    var dressingAdvice = getJSON('https://api.darksky.net/forecast/9e0495a835ed823a705a9a567eee982a/48.861317,2.348764?units=si!ude=currently,minutely,hourly,alerts,flags',
        function(err, forecast) {
            if (err) {
              console.log('Error occurred while trying to retrieve weather data', err);
            } else {
              speechOutput = getDressingAdvice(forecast, true);
            }
            self.response.cardRenderer("Your dressing advice for today:", speechOutput);
            self.response.speak(speechOutput);
            self.emit(':responseReady');
        });    
},

相关内容