我正在使用NodeJS中的AWS Lambda函数制作Alexa技能。
当我调用Intent时,应用程序会抛出错误:
"errorMessage": "Exception: TypeError: object is not a function"
首先,我的应用程序获得了一个事件。如果它是一个Intent,它会调用:
exports.handler = function (event, context) {
try {
...
else if (event.request.type === "IntentRequest") {
onIntent(
event.request,
event.session,
function intent_callback(sessionAttributes, speechletResponse) {
context.succeed(buildResponse(sessionAttributes, speechletResponse));
}
);
您可以看到上面的回调传递给onIntent()
。它检查它是哪个Intent。此处的Console.logging将传递的回调显示为function
:
function onIntent(intentRequest, session, callback) {
if ("ItemIntent" === intentName) {
console.log(callback); // This is a function
getOrderResponse(intent, session, callback);
然而,callback
中getOrderResponse()
的类型会以某种方式变成一个对象?这就是我收到错误的原因,但我不知道这里的function
类型是怎样的。为什么它是一个对象?
function getOrderResponse(callback) {
console.log('getOrderResponse', callback); // type = Object: { name: 'ItemIntent', slots: { Item: { name: 'Item' } } }
var card_title = config.data().CARD_TITLE;
var sessionAttributes = {},
speechOutput = 'So you want quick order',
shouldEndSession = false,
repromptText = 'Hello';
sessionAttributes = {
'speechOutput': repromptText,
'repromptText': repromptText,
'questions': 'some questions'
};
callback(sessionAttributes, buildSpeechletResponse(card_title, speechOutput, repromptText, shouldEndSession));
}
答案 0 :(得分:2)
回调必须是第三个参数。
getOrderResponse(intent, session, callback);
您要发送的第一个参数是intent
对象。
function getOrderResponse(callback) {
应该是
function getOrderResponse(intent, session, callback) {