firebase - 使用 Firebase 实现 Dialogflow
问题描述
所以我弄清楚了如何实现与实时 Firebase 数据库的连接。我遇到的问题是构建数据。我有一个数据库,其中包含 100 个集合,每个文档包含以下信息...
{
brandName: "Coca cola",
prodName: "Coke Zero",
price: 1.50
}
研究所有教程,我必须使用以下命令在对话流中完成
function getFromFirebase(agent) {
return firebaseAdmin.database().ref('prodName').once("value").then((snapshot) => {
var prodName = snapshot.val();
})
}
问题是,我希望 prodName 的值与对话流中的实体匹配,然后返回整个集合。因为我希望机器人回复是产品的价格。我猜我必须先查询值然后拉取集合,但找不到一个很好的例子。任何意见是极大的赞赏
解决方案
我有一个使用带有参数的意图的示例
我创建了一个名为“GetFromFirebase”的意图,其中包含一个训练短语“Price of”和参数“prodname”,并为此意图启用了 Webhook 调用。
在 Firebase 中,我按如下方式构建数据:
},
"Coke Zero" : {
"brandName" : "Coca Cola",
"price" : 1.5
},
然后在实现内联编辑器中,我尝试了下一个代码:
//Function to get the product collection
function getFromFirebase(agent){
const prodname = agent.parameters.prodname;
return admin.database().ref(prodname).once('value').then((snapshot) => {
const dataprod = snapshot.val();
const brandName = dataprod.brandName;
const price = dataprod.price;
if(dataprod!==null){
agent.add('The price of ' + prodname + ' is ' + price );
}
});
}
//Map the intent
let intentMap = new Map();
intentMap.set('GetFromFirebase', getFromFirebase);
agent.handleRequest(intentMap);
通过这个实现,我在“立即尝试”框中尝试了“价格”这一短语,然后我输入了产品名称“零可乐”以将所有产品集合设为常量,机器人回复了下一条消息:
{
"fulfillmentText": "The price of Coke Zero is 1.5",
"outputContexts": []
}
推荐阅读
- .net - 在 dotnet 中为 apache spark 执行 VectorUdf 时出错
- excel - Office Open XML - 在 Excel 中冻结窗格
- php - 在 Swift 中显示 JSON 字符串的新行
- clickhouse - 期望分布式表返回每个分片的结果,而不是聚合值
- linux - Nginx 重定向与 2 台不同机器上的 IP 行为不同
- hibernate - 在实体的休眠实体化时进行干预
- mysql - MySQLWorkbench 无法创建新模式
- android - 是否可以将 QTWidget 用作原生 android 视图组件?
- networking - 当 UDP 套接字调用 TCP 套接字时会发生什么
- unity3d - 为什么我在 DoTween 序列的 AppenCallBack 中的方法永远不起作用