javascript - Firebase 数据库功能无法在 DialogFlow 上正常工作

标签 javascript node.js firebase-realtime-database dialogflow-es

我正在为聊天机器人编写代码,但我的 firebase DB 上的数据库查询出现问题,我不知道如何修复,因为它与我发现的其他示例相同。

    var ref = admin.database().ref();
    var consultasRef = ref.child('consultas')

    agent.add('Test 2')

    consultasRef.on("value", function(snap){
        agent.add('Test 3')
        agent.add(snap.val());
    });

如上所述,应该打印 snap.(val) 的函数。它没有按应有的方式开始。正确的语法与我使用的语法相同。正在打印“Test 2”,与函数内部的“Test 3”不同

对于那些不熟悉 Dialogflow 的人来说,agent.add() 与 JS 上的 console.log() 相同,但适用于 Dialogflow。

最佳答案

当您进行异步调用(例如数据库调用)时,您必须从 Intent Handler 返回一个 Promise,以便它知道调用何时完成,以便将结果发送回机器人。

此外,您可能希望使用 once() 函数,因为您不关心数据库更新(因为结果已经发送)。

您可能可以使用如下所示的代码来完成这两个操作:

return consultasRef.once('value')
  .then( snap => {
    agent.add('Test 3');
    agent.add(snap.val());
  });

添加超过一两个文本回复也可能会出现问题,具体取决于您使用的集成。

关于javascript - Firebase 数据库功能无法在 DialogFlow 上正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55656602/

相关文章:

firebase - Flutter:Firebase 实时数据库 orderByChild 对查询结果没有影响

javascript - 使用 JavaScript 计算出有多少个字符可以放入 DIV

node.js - 如何在ubuntu 14.04中将当前环境设置为image docker?

ios - 未从 firebase 添加 TableView 事件

javascript - 使用 Axios 的文件流

javascript - promise 后 Firestore 返回

android - 如何在 Objective-C 中将值 BOOL 设置为与 Firebase 中的 Java 相同?

php - 如何停止更改代码?

javascript - 在javascript settimeout中依次调用两个函数

javascript - 在 javascript 中使用不带 if 和 var 表达式的 bool