如果用户没有响应,Alexa会发出错误("Skill response was marked as failure")



我正在编写Alexa技能,并且已经完成了代码。我只有一个问题:我希望我的技能,基于事实技能模板,在输出后等待响应。但当8秒结束,Alexa没有听到响应时,它会发出错误(技能响应被标记为失败,目标Lambda应用程序返回失败响应(。我读了亚马逊的一份文件(https://developer.amazon.com/docs/gadget-skills/keep-session-open.html)通常Alexa只是关闭麦克风。我必须添加的是,我将">shouldEndSession"设置为">false"以打开麦克风。这是我的整个Lambda代码:

/* eslint-disable  func-names */
/* eslint quote-props: ["error", "consistent"]*/
/**
* This sample demonstrates a simple skill built with the Amazon Alexa Skills
* nodejs skill development kit.
* This sample supports multiple lauguages. (en-US, en-GB, de-DE).
* The Intent Schema, Custom Slots and Sample Utterances for this skill, as well
* as testing instructions are located at [https://github.com/alexa/skill-sample-nodejs-fact[2]
**/
'use strict';
const Alexa = require('alexa-sdk');
//=========================================================================================================================================
//TODO: The items below this comment need your attention.
//============================================================================
=============================================================
//Replace with your app ID (OPTIONAL).  You can find this value at the top of your skill's page on http://developer.amazon.com.
//Make sure to enclose your value in quotes, like this: const APP_ID = 'amzn1.ask.skill.bb4045e6-b3e8-4133-b650-72923c5980f1';
const APP_ID = undefined;
const SKILL_NAME = 'Wissens Zitate';
const GET_FACT_MESSAGE = "Hier ist dein Zitat: ";
const HELP_MESSAGE = 'Du kannst zum Beispiel sagen: gib mir ein wissens zitat, oder, du sagst stop, um den Skill zu beenden... Wie kann ich dir helfe?';
const HELP_REPROMPT = 'Womit kann ich dir helfen?';
const STOP_MESSAGE = 'Auf Wiedersehen!';
//=========================================================================================================================================
//TODO: Replace this data with your own.  You can find translations of this data at http://github.com/alexa/skill-sample-node-js-fact/data
//=========================================================================================================================================
const data = [
' Wissenschaft ohne Religion ist lahm, Religion ohne Wissenschaft ist blind. - Albert Einstein',
'Für den gläubigen Menschen steht Gott am Anfang, für den Wissenschaftler am Ende aller seiner Überlegungen. - Max Planck ',
'Es ist mein Job, nie zufrieden zu sein. - Wernher von Braun',
'Eine gewaltige Lichtsinfonie spielte in tiefstem, feierlichen Schweigen über unseren Häuptern, wie um unserer Wissenschaft zu spotten: kommt doch her und erforscht mich! Sagt mir, was ich bin! - Alfred Wegener',
'Die Naturwissenschaft braucht der Mensch zum Erkennen, den Glauben zum Handeln. - Max Planck',
'Die Erfindungen für Menschen werden unterdrückt, die Erfindungen gegen sie gefördert. - Bertolt Brecht',
'Ohne Spekulation gibt es keine neue Beobachtung. - Charles Darwin',
'Die Arznei macht kranke, die Mathematik traurige und die Theologie sündhafte Leute. - Martin Luther',
'Wenn alle Experten sich einig sind, ist Vorsicht geboten. - Bertrand Russell',
'Zwei Wahrheiten können sich nie widersprechen. - Galileo Galilei.',
'Wenn die Neugier sich auf ernsthafte Dinge richtet, dann nennt man sie Wissensdrang. - Marie von Ebner-Eschenbach',
'Das schönste Glück des denkenden Menschen ist, das Erforschliche erforscht zu haben und das Unerforschliche zu verehren. - Johann Wolfgang von Goethe.',
'Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. - Albert Einstein.',
'Jedes Naturgesetz, das sich dem Beobachter offenbart, lässt auf ein höheres, noch unerkanntes schließen. - Alexander von Humboldt.',
'Es gibt kein großes Genie ohne einen Schuss Verrücktheit. - Aristoteles.',
'Ich fühle mich nicht zu dem Glauben verpflichtet, dass derselbe Gott, der uns mit Sinnen, Vernunft und Verstand ausgestattet hat, von uns verlangt, dieselben nicht zu benutzen. - Galileo Galilei.',
'Mit dem Wissen wächst der Zweifel. - Johann Wolfgang von Goethe.',
'Die Wahrheit triumphiert nie, ihre Gegner sterben nur aus. - Max Planck.',
'Nicht mit Erfindungen, sondern mit Verbesserungen macht man Vermögen. - Henry Ford.',
'Wozu Socken? Sie schaffen nur Löcher! - Albert Einstein.',
];
//=========================================================================================================================================
//Editing anything below this line might break your skill.
//=========================================================================================================================================
const handlers = {
'LaunchRequest': function () {
this.emit('GetNewFactIntent');
},
'GetNewFactIntent': function () {
const factArr = data;
const factIndex = Math.floor(Math.random() * factArr.length);
const randomFact = factArr[factIndex];
const speechOutput = GET_FACT_MESSAGE + randomFact;
this.response.cardRenderer(SKILL_NAME, randomFact);
this.response.speak(speechOutput);
this.response.shouldEndSession(false, "Reprompt your user here");
this.emit(':responseReady');
},
'AMAZON.HelpIntent': function () {
const speechOutput = HELP_MESSAGE;
const reprompt = HELP_REPROMPT;
this.response.speak(speechOutput).listen(reprompt);
this.emit(':responseReady');
},
'AMAZON.CancelIntent': function () {
this.response.speak(STOP_MESSAGE);
this.emit(':responseReady');
},
'AMAZON.StopIntent': function () {
this.response.speak(STOP_MESSAGE);
this.emit(':responseReady');
},
};
exports.handler = function (event, context, callback) {
const alexa = Alexa.handler(event, context, callback);
alexa.APP_ID = APP_ID;
alexa.registerHandlers(handlers);
alexa.execute();
};

Json回应:

{
"body": {
"version": "1.0",
"response": {
"outputSpeech": {
"type": "SSML",
"ssml": "<speak> Hier ist dein Zitat: Wenn die Neugier sich auf ernsthafte Dinge richtet, dann nennt man sie Wissensdrang. - Marie von Ebner-Eschenbach </speak>"
},
"card": {
"type": "Simple",
"title": "Wissens Zitate",
"content": "Wenn die Neugier sich auf ernsthafte Dinge richtet, dann nennt man sie Wissensdrang. - Marie von Ebner-Eschenbach"
},
"shouldEndSession": false
},
"sessionAttributes": {},
"userAgent": "ask-nodejs/1.0.25 Node/v6.10.3"
}

}

我希望你对如何解决这个问题有任何想法。感谢

对于任何响应,如果您想等待用户响应,则必须在响应JSON中将属性"shouldEndSession"设置为"false"。但是,如果您使用任何ask-sdk,则不必显式地执行此操作。如果使用reprompt,sdk将自动将此属性设置为false

在ask-nodejs-sdk-v1 中

'GetNewFactIntent': function () {
const factArr = data;
const factIndex = Math.floor(Math.random() * factArr.length);
const randomFact = factArr[factIndex];
const speechOutput = GET_FACT_MESSAGE + randomFact;
const reprompt = "Reprompt your user here";      
this.emit(':askWithCard',speechOutput,reprompt,SKILL_NAME,randomFact );
},

如果你想使用ask-nodejs-sdk-v2

const GetNewFactIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === "IntentRequest"
&& handlerInput.requestEnvelope.request.intent.name === "GetNewFactIntent";
},
handle(handlerInput) {
const factArr = data;
const factIndex = Math.floor(Math.random() * factArr.length);
const randomFact = factArr[factIndex];
const speechOutput = GET_FACT_MESSAGE + randomFact;
const reprompt = "Reprompt your user here";      
return handlerInput.responseBuilder
.speak(speechOutput )
.reprompt(reprompt )
.withSimpleCard(SKILL_NAME,randomFact )
.getResponse();
},
};

在这两个示例中,CCD_ 5都是由sdk自动设置的。

更多关于nodejs V2的询问sdk在这里

相关内容

最新更新