繁体   English   中英

收到来自 Lambda 的无效响应:无法识别的字段

[英]Received invalid response from Lambda: Unrecognized field

我正在研究亚马逊 lex。 当我向 amazon lex 提供输入时,它给了我以下错误

在此处输入图像描述

我在 Fulfillment 中添加 lambda function 和 lambda 我从 Z62A54104B9571DCCABB39 获取客户信息

这是我的 lambda function

 const mysql = require('mysql'); var pool = mysql.createPool({ // a connection pool is a cache of database connections maintained so that the connections can be reused when future requests to the database are required host: process.env.RDS_HOSTNAME, user: process.env.RDS_USERNAME, password: process.env.RDS_PASSWORD, port: process.env.RDS_PORT, database: process.env.RDS_DATABASE }); exports.handler = (event, context, callback) => { let MembershipNumber = event.currentIntent.slots.MembershipNumber; // allows for using callbacks as finish/error-handlers context.callbackWaitsForEmptyEventLoop = false; pool.getConnection(function(err, connection) { if (err) throw err; let sql = "select * from Sales.CustomerTable where MembershipNumber=? LIMIT 1"; let field = [MembershipNumber]; connection.query(sql,field, function (err, result, fields) { if (err) { console.log(err); // an error occurred context.fail(buildResponse(false)); } else { if (result.length === 1) { //console.log(data.Items[0].Arrival_city); var FirstName = result[0].FirstName; var LastName = result[0].LastName; var Address = result[0].Address; var PrimaryPhone = result[0].PrimaryPhone; var SecondaryPhone = result[0].SecondaryPhone; var Email = result[0].Email; var Type = result[0].Type; var MembershipNumber = result[0].MembershipNumber; var Pin = result[0].Pin; callback(null, { "dialogAction": { "type": "ConfirmIntent", "fulfillmentState": "Fulfilled", "message": { "contentType": "PlainText", "content": FirstName,LastName,Address,PrimaryPhone,SecondaryPhone,Email,Type,MembershipNumber,Pin } } }); } else { console.log("Membership Number not found"); callback(null, buildResponse(true, "none")); } } }); }); }; function buildResponse(isSuccess, FirstName, LastName, Address, PrimaryPhone, SecondaryPhone, Email, Type, MembershipNumber, Pin) { if (isSuccess) { return { FirstName: FirstName, LastName: LastName, Address: Address, PrimaryPhone: PrimaryPhone, SecondaryPhone: SecondaryPhone, Email:Email, Type:Type, MembershipNumber:MembershipNumber, Pin:Pin, lambdaResult: "success" }; } else { console.log("Lambda returned error to Connect"); return { lambdaResult: "Error" }; } }

这是测试事件 object

 { "messageVersion": "1.0", "invocationSource": "FulfillmentCodeHook", "userId": "user-1", "sessionAttributes": {}, "bot": { "name": "Sales", "alias": "sales", "version": "$LATEST" }, "outputDialogMode": "Text", "currentIntent": { "name": "iamamember", "slots": { "MembershipNumber": "78541258" }, "confirmationStatus": "None" } }

我想将此与我的联系流整合。 我不知道这个错误是关于什么的。 如果你们中的任何人知道帮助我。 谢谢

从错误消息来看,来自 lambda 的响应 JSON 与 Lex 的预期不匹配。 根据错误消息,这行似乎有问题:“内容”:FirstName,LastName,Address,PrimaryPhone,SecondaryPhone,Email,Type,MembershipNumber,Pin

content 的值需要是一个字符串。 但是,从您的屏幕截图中,这将被解析为 "content":"alys", "Lastname",...

我相信您想要做的是串联 FirstName、LastName 以及您想要在内容中返回的所有其他内容。 使用正确的 function 将这些字段连接起来,然后将它们以逗号分隔。

参考: https://docs.aws.amazon.com/lex/latest/dg/lambda-input-response-format.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM