在Dialogflow中从Firebase读取数据

时间:2019-11-18 16:16:51

标签: dialogflow chatbot dialogflow-fulfillment

我正在构建一个聊天机器人,但在从 Dialogflow Firebase 获取数据时遇到了麻烦。

我希望用户输入他的名字,该机器人可以查询Firebase并检查该名字是否存在。如果确实存在“用户存在” ,否则“用户n不在数据库中”

[这是当前正在使用的代码] [1]

function SaveName(agent){
const number = agent.parameters.number;  // when I input the number in Fialogflow
const docRef = db.collection('names').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"');
  });
 }

2 个答案:

答案 0 :(得分:0)

configuring the fulfillment对您的代理人来说是可能的。

  1. 转到意图,选择您的意图,然后向下滚动到实现部分。
  2. 点击为此目的启用网络通话呼叫(请参见Custom webhook)。
  3. 创建Webhook(您可以在 Fulfillment -Inline Editor中启用inline editor)。
  4. 在您的Webhook中,查询Firestore(请参阅this answer)。

请注意,任何人都可以知道您的数据库中是否存在用户。 如果您要使用Google Assistant,请查看account linking

答案 1 :(得分:0)

我遇到了一些类似的问题,即在代理交互中未显示所获取的详细信息。这也发生在给定here的模板上。然后,我从ReadFromFirestore Intent中删除了响应,并重新获得了预期的提取查询。我再次尝试通过将响应放回并调用intent来使响应在默认响应和Firestore查询响应之间交替进行。 不过,不保留它对我有用,并且思想也会对其他人有所帮助。