我正在对Google项目进行操作,需要将数据添加到两个不同的 Cloud Firestore 。由于某种原因,当我触发该意图时,它只会保存到原始的 Cloud Firestore ,而不是新的。
为简单起见,我将原始Cloud Firestore称为“ DB1”,将新的一个/第二个称为“ DB2”
这是我尝试过的:
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const admin = require('firebase-admin');
const {google} = require('googleapis');
const {
<Basically All of the libraries / AOG functions>
} = require('actions-on-google');
const defaultAppConfig = {"<FIREBASE CREDENTIALS FOR DB1 >"}
const OtherAppConfig = {"<FIREBASE CREDENTIALS FOR DB2>"}
const defaultApp = admin.initializeApp(defaultAppConfig); // DB1
const otherApp = admin.initializeApp(OtherappConfig, 'Other'); // DB2
const db = admin.firestore(functions.config(defaultApp).firebase); //DB1
const ab = admin.firestore(functions.config(otherApp).firebase); // DB2
const app = dialogflow({
debug: true,
clientId: '<DIALOGFLOW CREDENTIALS>'
});
app.intent('DB2 Write', (conv) =>{
conv.ask('Okay I made the write to DB2');
var data = {
name: 'This is a Test write'
};
var setDoc = ab.collection('Test').doc('Write').set(data);
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
很抱歉,如果不需要某些部分,我想提供尽可能多的信息(我可能会缺少别人看到的东西)。
总而言之,我想当我触发意图“ DB2写入”时,它将向DB2写入“这是一个测试写入”,但是它只是一直将消息/数据写入DB1。 / p>
如何使它工作,以便在触发此意图时将其写入第二个Cloud Firestore或“ DB2”?
感谢您的帮助!
注意::如果有所作为,我将在dialogflow内联编辑器中使用此代码。
____________________________________________________________________________
更新:这是我尝试过/更新的内容,它仍然写入DB1
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
const otherAdmin = require('firebase-admin');
otherAdmin.initializeApp({
credential: otherAdmin.credential.cert(OtherAppConfig)
},'Other');
const ab = otherAdmin.firestore();
以及:
admin.initializeApp(defaultAppConfig);
var otherApp = admin.initializeApp(OtherAppConfig, 'other');
console.log(admin.app().name); // '[DEFAULT]'
console.log(otherApp.name); // 'other'
// Use the shorthand notation to retrieve the default app's services
var db = admin.firestore(functions.config().firebase);
// Use the otherApp variable to retrieve the other app's services
var ab = otherApp.firestore(functions.config().firebase);
我想指出的是,我用于“ OtherAppConfig”和“ defaultAppConfig”的凭据是从Firebase私钥中获取的。即:firebase控制台>项目概述>服务帐户>生成私钥。这可能是问题吗?
答案 0 :(得分:0)
我认为问题是这样的:
一个Dialogflow项目和一个Firebase项目在后台是相同的。太酷了,因为您的Firebase Functions会直观地与Dialogflow和数据库连接,而无需进行大量手动配置。
但是,如果您有来自不同Cloud Project的两个数据库,则需要进行一些其他配置以安全地连接。我不确定您的AppConfig
包含哪些内容,但可能没有足够的设置。因此,当您获取功能config时,Firebase设置可能会拉出默认(当前项目)应用程序和数据库。
对于第二个项目,您可能想要下载服务密钥。然后,您可以在启动例程中将其作为文件或直接作为JSON加载。
下面的代码段应该按照您想要的方式工作。
// Setup 1st db, this project's db
const admin = require('firebase-admin');
admin.initializeApp(); // Initialize with default params as we get it by default
const db = admin.firestore();
// Setup 2nd db
const otherAdmin = require('firebase-admin'); // We can import twice
const myOtherServiceKey = { ... }
otherAdmin.initializeApp({
credential: otherAdmin.credential.cert(myOtherServiceKey)
});
const ab = otherAdmin.firestore(); // This should be the DB of our second project