Null SpeechletResponse

Hier wird über die Entwicklung von Skills diskutiert.
Antworten
Benutzeravatar

Themenstarter
_Dommi_
Beiträge: 2
Registriert: Sa 11. Feb 2017, 12:56

Sa 11. Feb 2017, 13:04

Hallo ich habe mich an einem Alexa Skill versucht aber wenn ich ihn Teste kommt immer die Fehler :
- Null SpeechletResponse
- The SpeechletResponse must not be null

Mein Intent Schema:

Code: Alles auswählen

{
  "intents": [
    {
      "intent": "TestIntent",
      "slots": [
        {
          "name": "Test",
          "type": "LIST_OF_Test"
        }
      ]
    },{
      "intent": "AMAZON.HelpIntent"
    },{
      "intent": "AMAZON.StopIntent"
    },{
      "intent": "AMAZON.CancelIntent"
    }
  ]
}
Sample Utterances:

Code: Alles auswählen

TestIntent {Test}
TestIntent Sag mir etwas über {Test}
TestIntent Erzähle von {Test}
AMAZON.HelpIntent Sag es nochmal
AMAZON.HelpIntent Wen gibt es nochmal
Hier ist mein code : http://pastebin.com/cc3JASbQ

Code: Alles auswählen

var personen = {
    "Heiko" : {
        "persönlichkeit": "Triggered gerne andere",
        "skill": "Kann gut lol Spielen"
    },
    "Dominik" : {
        "persönlichkeit": "Ist komisch",
        "skill": "ERROR: Skill.exe not found"
    },
}

exports.handler = function (event, context) {
    
    try {
        console.log("event.session.application.applicationId=" + event.session.application.applicationId);
		
		if(event.session.new){
		onSessionStarted({requestId: event.request.requestId}, event.session);
		}
		
		if (event.request.type === "LaunchRequest") {
		onLaunch(event.request,
			event.session,
			function callback(sessionAttributes, speechletResponse) {
				context.succeed(buildResponse(sessionAttributes, speechletResponse));
				});
		
		} else if (event.request.type === "IntenRequest") {
			onIntent(event.request,
				event.session,
				function callback(sessionAttributes, speechletResponse) {
					context.succeed(buildResponse(sessionAttributes, speechletResponse));
					});
		} else if (event.request.type === "SessionEndedRequest") {
			onSessionEnded(event.request, event.session);
			context.succeed();
		}
        
    } catch (e) {
        context.fail("Exception: " + e);
    }
};

function onSessionStarted(sessionStartedRequest, session){

}

function onLaunch(launchRequest, session, callback) {
	getWelcomeResponce(callback)
}

function onIntent (intentRequest, session, callback) {

	var intent = intentRequest.intent
	var intentName = intentRequest.intent.name;
	
	if(intentName == "TestIntent") {
		handleTestResponse(intent, session, callback)
		
	} else if (intentName == AMAZON.YesIntent) {
		handleYesResponce(intent, session, callback)
		
	} else if (intentName == AMAZON.NoIntent) {
		handleNoResponce(intent, session, callback)
	
	} else if (intentName == AMAZON.HelpIntent) {
		handleGetHelpRequest(intent, session, callback)
	
	} else if (intentName == AMAZON.StopIntent) {
		handleFinishSessionRequest(intent, session, callback)
	
	} else if (intentName == AMAZON.CancelIntent) {
		handleFinishSessionRequest(intent, session, callback)
	
	}else {
		throw "Invalid intent"
	}

}

function onSessionEnded(sessionEndedRequest, session) {

}

function getWelcomeResponce(callback) {
	var speechOutput = "Jo digga was geht?" + "Willst du etwas über Heiko oder Dominik erfahren?"
	
	var reprompt = "Alter, was ist das nur für 1 Life entscheide dich mal!"
	
	var header = "Random Infos"
	
	var shouldEndSession = false
	
	var sessionAttributes = {
	"speechOutput" : speechOutput,
	"reprompt" : reprompt
	}
	callback(sessionAttributes, buildSpeechletResponse(header, speechOutput, reprompt, shouldEndSession))
}


function handleTestResponse(intent, session, callback) {

	var person = intent.slots.Test.value.toLowerCase()
	
	if(!personen[person]) {
		var speechOutput = "Alter, das Ist keine verfügbare Möglichkeit du noob"
		var repromptText = "Versuch halt mal was anderes wie z.B Heiko oder Dominik"
		var header = "Nicht Verfügbar"
	} else {
		var persönlichkeit = personen[person].persönlichkeit
		var skill = personen[person].skill
		var speechOutput = capitalizeFirst(person) + " " + persönlichkeit + " und " + skill + ". Willst noch was anderes Wissen?"
		var repromptText = "Willst noch was anderes Wissen?"
		var header = capitalizeFirst(person)
	}
	
	var shouldEndSession = false;
	
	callback(session.attributes, buildSpeechletResponse(header, speechOutput, repromptText, shouldEndSession))
}

function handleYesResponce(intent, session, callback) {

	var speechOutput = "Ok über wen willst du etwas erfahren? Es gibt Heiko und Dominik"
	var repromptText = speechOutput
	var shouldEndSession = false
	
	callback(session.attributes , buildSpeechletResponseWithoutCard(speechOutput,repromptText,shouldEndSession))
	
}

function handleNoResponce(intent, session, callback) {

	handleFinishSessionRequest(intent,session,callback)

}

function handleGetHelpRequest(intent, session, callback) {

	if(!session.attributes) {
		session.attributes = {};
	}
	
	var speechOutput = "Ich kann die alles über diese Personen sagen: Heiko, Dominik"
	var repromptText = speechOutput
	var shouldEndSession = false;
	
	callback(session.attributes,buildSpeechletResponseWithoutCard(speechOutput, repromptText, shouldEndSession))

}

function handleFinishSessionRequest(intent, session, callback) {

	callback(session.attributes,
		buildSpeechletResponseWithoutCard("Tschau du Lappen","Bis bald",true));

}

// ------- Helper functions to build responses for Alexa -------
function buildSpeechletResponse(title, output, repromptText, shouldEndSession) {
    return {
        outputSpeech: {
            type: "PlainText",
            text: output
        },
        card: {
            type: "Simple",
            title: title,
            content: output
        },
        reprompt: {
            outputSpeech: {
                type: "PlainText",
                text: repromptText
            }
        },
        shouldEndSession: shouldEndSession
    };
}

function buildSpeechletResponseWithoutCard(output, repromptText, shouldEndSession) {
    return {
        outputSpeech: {
            type: "PlainText",
            text: output
        },
        reprompt: {
            outputSpeech: {
                type: "PlainText",
                text: repromptText
            }
        },
        shouldEndSession: shouldEndSession
    };
}

function buildResponse(sessionAttributes, speechletResponse) {
    return {
        version: "1.0",
        sessionAttributes: sessionAttributes,
        response: speechletResponse
    };
}

function capitalizeFirst (s) {

	return s.charST(0).toUpperCase() + s.slice(1)
}
0 x

gehwissenlos

Sa 11. Feb 2017, 13:27

Hast du eine Vorlage benutzt? Mir fehlt z.B. die App ID.
0 x
Benutzeravatar

Themenstarter
_Dommi_
Beiträge: 2
Registriert: Sa 11. Feb 2017, 12:56

Sa 11. Feb 2017, 15:13

Nein ich habe mir ein Video dazu angeschaut
0 x

gehwissenlos

Sa 11. Feb 2017, 19:10

Da die Lambda-Funktion und der Alexa-Server erst mal paar Dinge untereinander klären und Alexa da ziemlich Vorgaben macht wie das abzulaufen und auszusehen hat, würde ich da lieber beim ersten Versuch auf Vorlagen von Amazon zurückgreifen. Die findest du hier: https://github.com/alexa/
Nur wenn eben ein Handshake mit der passenden App-ID stattfindet, kann die Kommunikation funktionieren.
0 x
Antworten

Zurück zu „Fähigkeiten (Skills) entwickeln“

  • Information