首页 > 解决方案 > 使用 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 的值与对话流中的实体匹配,然后返回整个集合。因为我希望机器人回复是产品的价格。我猜我必须先查询值然后拉取集合,但找不到一个很好的例子。任何意见是极大的赞赏

标签: firebasefirebase-realtime-databasedialogflow-esdialogflow-es-fulfillment

解决方案


我有一个使用带有参数的意图的示例

我创建了一个名为“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": []
}

推荐阅读