0

AWSとAlexaのスキルは比較的新しいです。私は天気に応じてドレッシングアドバイスを与えるシンプルなカスタムスキルを構築しています。Alexa関数はAWS lamdaで動作しますが、Service Simulatorでは動作しません

私は2つのカスタムインテントを持っています:dressingTodayIntent & dressingTomorrowIntent。私の2つの意図が動作しない開発者ポータルのサービスシミュレータで、私はしかしラムダ反応を得るのですが、未定義の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": {} 
} 

それは私の意図でスコープの問題である可能性がありコード? AWSラムダで

'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'); 
}, 

、Iは、第2ログの正しい出力、及び第3のいずれかのエラー参照:

  • 最初のログ: "1" + dressingAdvice、
  • 予想通りに2番目のログ:期待
  • 第三のログとして "2" + dressingAdvice、: "3" +未定義

あなたが助けてくれてありがとう!

+0

あなたの呼び出しキーワードを通報しますか?それはあなたのカスタムスロットと一致しますか? –

+0

スロットと一致します。これは問題ではありません。 –

答えて

0

私はこのように、コールバック関数に応答コードを動かすのに必要な、間違っていたものを考え出し:

'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'); 
     });  
}, 
0

「AWS Lambdaからテスト済み」と言えば、AWSコンソールを使用してJSONテストメッセージをLambdaに送信し、その後レスポンスJSONを調べて正しいかどうかを判断することを意味します。

の場合は、devポータルのAlexaテストページとの間で送受信されるJSONと一致することを確認してください。彼らは異なるかもしれないように聞こえる。

また、Alexaスキルの正しいARNにリンクしていることを確認してください。

+0

はい、それは私が意味していたものです。 私は二重チェックしましたが、これは問題ではありません。私のコードではspeechOutputのスコープの問題... –

0

undefinedは、おそらくコード内の可変範囲の問題です。

あなたの回答では、sessionAttributesがないことがわかりました。あなたのコードは設定されているのですか、セッションの値から応答の値を取得していますか?その場合は、sessionAttributesで値を送り返す必要があります。

+0

あなたは正しいです。スコープの問題を反映するように投稿を更新しました。しかし、私はまだ定義されたspeechOutputを持つことができません –

関連する問題