您需要学习几件事。
第一个是如何添加 Firebase 管理 SDK https://firebase.google.com/docs/admin/setup到你的项目。
您还需要学习如何检索数据 https://firebase.google.com/docs/database/admin/retrieve-data使用图书馆。 Firebase 使用基于引用路径的方法来获取数据,因此您需要确保正确构建路径。
最后,由于您是在履行处理程序内执行此操作,并且正在进行异步调用,因此需要确保返回 Promise。幸运的是,获取数据还涉及到返回一个Promise,所以你可以返回这个Promise。
该代码可能部分看起来像这样(未经测试):
function personFacts(agent) {
const personId = agent.parameters["personId"];
const personMeasurement = agent.parameters["personMeasurement"];
var db = admin.database();
var ref = db.ref(`person/${personId}/${personMeasurement}`);
return ref.once("value")
.then( snapshot => {
var result = snapshot.val();
agent.add(`${personId}'s ${personMeasurement} is ${result}`);
})
.catch( err => {
agent.add('uh oh, something went wrong.');
console.error( err );
});
}
正如您所指出的,您需要使用一个密钥来初始化 Firebase 管理库,该密钥将允许您通过服务帐户进行访问。你可以生成密钥 https://firebase.google.com/docs/admin/setup#add_firebase_to_your_app并下载它,然后指向保存它的文件夹。 (看起来您刚刚内联了信息,这也有效。)
“响应格式错误”错误意味着未设置响应。这可能是由于多种原因造成的,但通常意味着您的程序崩溃或无法调用agent.add()
因为某些原因。请查阅您运行的操作日志以获取更多信息。 (如果您使用的是 Dialogflow 内联编辑器,则可以通过以下方式访问日志https://console.firebase.google.com/ https://console.firebase.google.com/,选择您的项目,选择左侧的“函数”选项卡,然后选择“日志”选项卡。)
Update基于代码和错误消息。
正如错误消息所示,您调用了admin.initializeApp()
不止一次。仅应在首次配置函数时执行此操作,而不是在每次调用函数时执行此操作。一旦初始化一次——就可以多次使用。
就您而言,这可以通过移动来完成require
导入 firebase-admin 并调用admin.initializeApp()
出于personFacts()
函数并将它们都放在更靠近顶部的位置 - 可能就在另一个之后require()
calls.