Ich bin extrem neu bei Node.js und dem Lex-Dienst, aber nachdem ich 2 Stunden online gesucht habe, bin ich erstaunt, dass ich keine Antwort auf mein Problem finden kann.AWS Lex/Alexa und Lambda: Wie nennt die Lex-App meine Lambda-Funktion? event.request.type ist undefined
Ich versuche, eine Alexa/Lex-App zu erstellen, die einfach nach Variablen fragt, die zum Generieren eines Aufrufs einer RESTful-URL verwendet werden, und dann die String-Antwort von dieser URL liest.
Für meine erste Bemühung, ich frage einfach nach einer Textdatei und Aufforderung für die Subdomain. Das ist mein Lambda-Code:
'use strict';
var https = require('http');
const handlers = {
"LaunchRequest": function() {
// Launch Request
console.log(`LAUNCH REQUEST`)
context.succeed(
generateResponse(
buildSpeechletResponse("Welcome to an Alexa Skill, this is running on a deployed lambda function", true),
{}
)
)
},
"GetCustomerVersion": function() {
var endpoint = "https://"+{customer}+".services.com/sample.txt"
var body = ""
https.get(endpoint, (response) => {
response.on('data', (chunk) => { body += chunk })
response.on('end',() => {
context.succeed(
generateResponse(
buildSpeechletResponse(`Customer ${customer} has info `+body, true),
{}
)
)
})
})
},
'SessionEndedRequest': function() {
this.emit(':tell', this.t('STOP_MESSAGE'));
}
}
// Helpers
function buildSpeechletResponse (outputText, shouldEndSession) {
return {
outputSpeech: {
type: "PlainText",
text: outputText
},
shouldEndSession: shouldEndSession
}
}
function generateResponse (speechletResponse, sessionAttributes) {
return {
version: "1.0",
sessionAttributes: sessionAttributes,
response: speechletResponse
}
}
exports.handler = (event, context, callback) => {
try {
if (event.request.type === 'LaunchRequest') {
handlers['LaunchRequest'](event.request,
event.session,
(sessionAttributes, speechletResponse) => {
callback(null, buildResponse(sessionAttributes, speechletResponse));
});
} else if (event.request.type === 'IntentRequest') {
handlers['GetCustomerVersion'](event.request,
event.session,
(sessionAttributes, speechletResponse) => {
callback(null, buildResponse(sessionAttributes, speechletResponse));
});
} else if (event.request.type === 'SessionEndedRequest') {
handlers['SessionEndedRequest'](event.request, event.session);
callback();
}
} catch (err) {
callback(err);
}
};
ich ziemlich sicher bin, wie ich den Endpunkt baute in GetCustomerVersion
falsch ist, aber das eigentliche Problem ist, dass, wenn ich die Lambda-Funktion zu testen selbst ich diesen Fehler:
{
"errorMessage": "Cannot read property 'type' of undefined",
"errorType": "TypeError",
"stackTrace": [
"exports.handler.err (/var/task/index.js:86:26)"
]
}
ich weiß, es kreischt über die event.request.type
und entweder event
oder event.request
ist nicht definiert, aber ich habe keine Ahnung, was bewirkt, dass sie nicht definiert werden - ich dachte, sie durch den Anruf selbst bevölkert werden wurden.
Gibt es eine Dokumentation oder ein Tutorial, das ich lesen/sehen kann, um mehr darüber zu erfahren? Alles, was ich gesehen habe, scheint eine andere Schnittstelle zur Alexa-App zu haben (wo ich das Lex-Portal in AWS verwende), aber ich würde nicht erwarten, dass sich der LAMBDA-Code unterscheidet ... aber vielleicht ist das meine Verwirrung? Es ist eine Frage von "Ich weiß nicht, was ich nicht weiß", also ist jede Anleitung willkommen.
Vielen Dank!
Ich hasse es, wie ein solcher Neuling zu klingen, aber wo ist der Ausdruck "console.log" beim Ausführen einer Lambda-Funktion? Ich sehe nicht, dass meine Nachrichten in der Ausgabe angezeigt werden (natürlich immer noch, aber nicht vor dem Aufruf von "console.log") und auch nicht in der CloudWatch-Ausgabe der Funktion (die scheinbar die gleichen Daten sind). – Bing
Sollte in CloudWatch Logs sein: http://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html Es ist nicht da? –
Ich suche wahrscheinlich am falschen Ort. Ich habe das einfach zu meinem Code 'exports.handler = (event, context, callback) => {try {console.log (event); // Code weiter unten ... 'Dann klicke ich auf die Schaltfläche" Test "in der Lambda-Funktion und mein CloudWatch-Protokoll zeigt die gleichen Fehler Lambda, keine Konsolenprotokollierung: http://i.imgur.com/U7IhmXf.png – Bing