gpt4 book ai didi

node.js - 如何使用 Firestore 从 DialogFlow 实现上的 snap 中获取 map 数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:21 26 4
gpt4 key购买 nike

我已使用 Firestore 将 Dialogflow 上的输入数据写入数组,例如 this .

但我不知道如何从 Firestore 获取数据以在 Dialogflow 中显示,下面是我的编程。

这就是我想要实现的目标。当我在 Dialogflow 中输入数字时,我想从 Firestore 实例获取一个数字数组。

const db = admin.firestore();
db.settings({timestampsInSnapshots: true});
.
.
.
const sessionId = request.body.session.split("/").reverse()[0]; // or agent.session

function read(agent){
const number = agent.parameters.number; // when I input the number in Fialogflow
const docRef = db.collection('orders').doc(sessionId);

return docRef.get()
.then(doc => {
if (!doc.exists) {
agent.add('No data found in the database!');
console.log(doc);
} else {
agent.add(doc.data().orders);
}
return Promise.resolve('Read complete');
}).catch(() => {
agent.add('Error reading entry from the Firestore database.');
agent.add('Please add a entry to the database first by saying, "Write <your phrase> to the database"');
});
}

function writeOrderToDb (newOrder) {
const docRef = db.collection('orders').doc(sessionId);

return db.runTransaction(t => {
return t.get(docRef)
.then(doc => {
t.update(docRef, {
orders: admin.firestore.FieldValue.arrayUnion(newOrder)
}, {merge: true});
/*if (!doc.data()) {
t.set(docRef, { orders: [newOrder] });
}
else {
t.update(docRef, {
orders: admin.firestore.FieldValue.arrayUnion(newOrder)
});
}*/
});
}).catch(err => {
console.log(`Error writing to Firestore: ${err}`);
});
}


function confirmOrder(agent) {
const order = agent.context.get('order'),
amount = order.parameters.amount,
size = order.parameters.size,
type = order.parameters.type;

agent.add(`Confirming ${amount} ${type} in ${size}`);

// important to return, otherwise console.logs will not appear and non-deterministic behavior will ocurr
return writeOrderToDb({
"type": type,
"size": size,
"amount": amount
});
}

最佳答案

我创建了与您相同的数据模型:

enter image description here

因此,通过以下代码,您可以将数组 "orders" 范围内的任何数字传递到变量 my_num 中。它将返回数组该部分内的数据。

var my_num = 1;

db.collection('dial').doc('dial1').get().then(function(doc) {
console.log(doc.data().orders[my_num]);
});

输出:

enter image description here

关于node.js - 如何使用 Firestore 从 DialogFlow 实现上的 snap 中获取 map 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58814498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com