【问题标题】:Firebase Cloud Function value returns "null" in Dialogflow fulfillmentFirebase 云函数值在 Dialogflow 实现中返回“null”
【发布时间】:2019-08-20 08:18:24
【问题描述】:

Dialogflow 云函数中的内联编辑器为存在的值返回 null。

内联编辑器的云功能部署没有任何错误。 Weebhook 响应“Webhook 执行成功”

已尝试读取同一项目中的其他值,均返回 null。

读取温度的功能

function handleReadTemp(agent) {
    return admin.database().ref('device/data/subdata/').limitToLast(1).once('value').then((snapshot) => {
    const value = snapshot.child('Temp').val();
     agent.add(`The temperature right now is ${value}`); 
    });
  }

df Firebase实时数据库结构如下;[link]https://imgur.com/a/VLp8F9R

root
  |
  device
       |
        data
          |
          subdata
              |
              - record1
                    |- Temp:"33.35"
              -  record2
                    |- Temp: "34"

目标是从记录 2 的 Temp 中读取 34 - 所以是最后一条记录的 Temp。

我的目标是 admin.database().ref('device/data/subdata/').limitToLast(1).once('value').then((snapshot) =>

获取最后一条记录(record2注意:记录名称是随机生成的,所以我不知道下一条记录会叫什么)

然后const value = snapshot.child('Temp').val();

将获得 Temp 的值,它是 record2 的子项。

Cloudfunction 日志不会抛出任何错误 [link] https://imgur.com/F9UUrjC

Dialogflow 中的代理响应:temperature is null

【问题讨论】:

    标签: firebase firebase-realtime-database google-cloud-functions dialogflow-es


    【解决方案1】:

    这是正常的,因为snapshotDataSnapshot的内容对应如下对象:

    {"record2":{"Temp":34}}
    

    您可以通过console.log(snapshot.val());进行验证

    所以,你应该这样做:

    .....
    const value = snapshot
                .child(Object.keys(snapshot.val())[0] + '/Temp')
                .val();
    agent.add(`The temperature right now is ${value}`);  
    .....
    

    【讨论】:

    • 感谢您提供的控制台提示有意义且解决方案有效 :)
    猜你喜欢
    • 1970-01-01
    • 2021-03-04
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2021-12-24
    • 2021-04-03
    • 2019-05-01
    相关资源
    最近更新 更多