首页 文章

Dialogflow:如何在Firebase查询中传递参数?

提问于
浏览
1

我在Firebase中有一个Realtime DB,并在Google Cloud的Dialogflow中设置了代理 . 此代理程序代理正在获取有关总线路由名称的数据 . 要求最终用户提供 Bus 车号码,代理商应根据该路线号码获取相关信息 . 我可以调用数据库,但仅限于设置总线编号 .

因此,例如下面我可以基于将 snapshot.child 设置为 100 来拉入 100 的总线信息 . 但我希望 snapshot.child 根据Dialogflow中的 askBus 参数进行更改 . 有什么建议?

function handleBus(agent) {
    const bus = agent.parameters.bus;

    agent.add(`Thank you...`);
    return admin.database().ref('Routes').once("value").then((snapshot) => {
      var routeInfo = snapshot.child('100/route_desc').val();
      var routeName = snapshot.child('100/route_long_name').val();
      agent.add(`Bus info is ` + routeInfo + ' and is called ' + routeName);

2 回答

  • 0

    通常,处理此问题的最佳方法是在设置查询路径时引用总线编号的节点 . 获得结果肯定是可能的,但这意味着您需要为每个查询提供比您需要的更多的数据 .

    但有几种方法可以做到这一点 .

    与您现在如何做的最相似的是生成包含路线编号的字符串 . 此示例显示如何使用最近的JavaScript中提供的反引号来执行此操作,或者您可以执行字符串连接:

    function handleBus(agent) {
        const bus = agent.parameters.bus;
    
        agent.add(`Thank you...`);
        return admin.database().ref('Routes').once("value").then((snapshot) => {
          var routeInfo = snapshot.child(`${bus}/route_desc`).val();
          var routeName = snapshot.child(`${bus}/route_long_name`).val();
          agent.add(`Bus info is ` + routeInfo + ' and is called ' + routeName);
    

    但是,如果您只是查找该路由中的信息,则可以设置对数据库的引用以包含路由,获取整个结果及其值,然后将其视为JavaScript对象 .

    function handleBus(agent) {
        const bus = agent.parameters.bus;
    
        agent.add(`Thank you...`);
        return admin.database().ref('Routes').child(bus).once("value").then((snapshot) => {
          var route = snapshot.val();
          var routeInfo = route['route_desc'];
          var routeName = route['route_long_name'];
          agent.add(`Bus info is ` + routeInfo + ' and is called ' + routeName);
    

    顺便说一句,我想指出你完全使用Promises . 这是一个很多人陷入困境的陷阱,你通过Promise查询 Value ,将其作为Promise履行的一部分处理,并在你的处理程序中返回Promise,做得很好 .

  • 0

    在webhook中使用异步调用firebase来获取总线信息 .

    • 获取参数值 .

    • 访问Firebase数据库 .

    • 使用异步调用基于参数获取信息 .

    • 使用承诺回复正确的回复 . 请参阅this以通过承诺回复 .

    • Promise将在获取数据库信息时在Firebase功能中使用 .

相关问题