Я создаю бот AWS Lex с использованием лямбда-функции и пытаюсь подключить его к базе данных MongoDB Atlas с помощью "mongoose" и базе данных firebase с помощью "облачного пожарного хранилища". Но данные не сохраняются в базе данных и даже нет ошибок даешь на облачные часы и там не показывается ни одна консоль
Я запускаю следующую команду для развертывания лямбда-функции на боте AWS Lex в обоих случаях: mongodb Atlas и Cloud Firestore:
$ aws лямбда-код-функции-обновления -function-name Hotel-Booking-Agent --zip-файл fileb: //index.zip
Ниже приведен код для подключения атласа mongodb с функцией лямбда
'use strict';
var mongoose = require('mongoose');
var dbURI = "mongodb+srv://author:******@cluster0-geoiq.mongodb.net/test?retryWrites=true";
mongoose.connect(dbURI, { useNewUrlParser: true })
.catch((e) => {
console.log("catch error: ", e)
})
mongoose.connection.on('error', function (err) {//any error
console.log('Mongoose connection error: ', err);
process.exit(1);
})
mongoose.connection.on('connected', function () {//connected
console.log("Mongoose is connected");
})
mongoose.connection.on('disconnected', function () {//disconnected
console.log("Mongoose is disconnected");
process.exit(1);
});
console.log("reach here")
var userSchema = new mongoose.Schema({
"name": { type: String, required: true },
"email": { type: String, required: true },
"Detail": { type: String, required: true }
},
{
collection: "user1"
});
exports.handler = (event, context, callback) => {
try {
console.log(`request received for userId=${event.userId}, intentName=${event.currentIntent.name}`);
var slots = event.currentIntent.slots;
var noOfPeople = slots.noOfPeople;
var noOfRoom = slots.noOfRoom;
var roomKind = slots.roomKind;
var subject = slots.subject;
var name = slots.name;
var email = slots.email;
switch (event.currentIntent.name) {
case 'Hotel_Booking':
var userModel = mongoose.model("user", userSchema);
var newUser = new userModel({
"name": name,
"email": email,
'Detail': `You have booked ${noOfRoom} rooms for ${noOfPeople} people in ${roomKind} category`
})
newUser.save((dataSaved) => {
console.log("datasaved", dataSaved)
})
context.succeed({
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
'contentType': 'PlainText',
'content': `Okay, ${name} I have book ${noOfRoom} rooms for ${noOfPeople} people in ${roomKind} category`
}
}
})
break
default:
context.succeed({
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
'contentType': 'PlainText',
'content': `Can't understand`
}
}
})
}
}
catch (err) {
context.succeed(err);
}
};
Данные должны быть сохранены в базе данных, как в коде. Также бот AWS Lex выдает ответ, как указано в функции лямбда, но в базе данных MongoDB Atlas данные не отображаются. Снимок базы данных mongodb Atlas
Вот код для подключения пожарного депо с функцией лямбда
'use strict';
var admin = require("firebase-admin");
var serviceAccount = require("./agent-e2634-firebase-adminsdk-0n8na-40c5078975.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://agent-e2634.firebaseio.com"
});
const db = admin.firestore();
exports.handler = (event, context, callback) => {
try {
console.log(`request received for userId=${event.userId}, intentName=${event.currentIntent.name}`);
var slots = event.currentIntent.slots;
var noOfPeople = slots.noOfPeople;
var noOfRoom = slots.noOfRoom;
var roomKind = slots.roomKind;
var subject = slots.subject;
var name = slots.name;
var email = slots.email;
switch (event.currentIntent.name) {
case 'Hotel_Booking':
var docRef = db.collection('users').doc('info');
var setAda = docRef.set({
'name': name,
'email': email,
'content': `Okay, ${name} I have book ${noOfRoom} rooms for ${noOfPeople} people in ${roomKind} category`
});
db.collection('users').get()
.then((data) => {
context.succeed({
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
'contentType': 'PlainText',
'content': `Okay, ${name} I have book ${noOfRoom} rooms for ${noOfPeople} people in ${roomKind} category`
}
}
})
console.log(doc.id, '=>', data);
})
.catch((err) => {
console.log('Error getting documents', err);
});
break
default:
context.succeed({
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
'contentType': 'PlainText',
'content': `Can't understand`
}
}
})
}
}
catch (err) {
context.succeed(err);
}
}
При развертывании вышеуказанного кода бот возвращает следующую ошибку:
Произошла ошибка: недопустимый лямбда-ответ: получен ответ об ошибке от лямбды: необработанный
тот же код работает нормально, без подключения к базе данных, и даже в облачном хранилище нет документации и документации.