无法再将 Dialogflow 连接到 Firebase
Can no longer connect Dialogflow to Firebase
我的 dialogflow 聊天机器人无法使用来自 Firebase rtdb 的数据进行响应。我在下面包含了我的履行代码。几天前,这会从我的数据库中以文本“测试成功”作为响应,但现在它 returns 没有可用的响应 并在控制台中给出以下内容:
FIREBASE WARNING: {"code":"app/invalid-credential","message":"Credential implementation provided to initializeApp() via the "credential" property failed to fetch a valid Google OAuth2 access token with the following error: "Failed to parse access token response: SyntaxError: Unexpected token p in JSON at position 4"."} "
有人对如何调试它有建议吗?预先感谢您的帮助!
'use strict';
const admin = require('firebase-admin');
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');
admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: '<DB-URL-HERE>'
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
function testintent(agent){
return admin.database().ref().once('value').then((snapshot)=> {
var myvalue = snapshot.test.val();
agent.add(myvalue);
});
}
}
let intentMap = new Map();
intentMap.set('Test Intent', testintent);
});
修复 Dialogflow 到 Firebase 的身份验证问题,而不是使用 admin.credential.applicationDefault()
作为凭据。使用 admin.credential.cert() 定义正确的服务帐户详细信息。有两种方法。
通过提供服务帐户密钥 JSON 文件的路径:
var serviceAccount = require("path/to/serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});
或者,通过内联提供服务帐户对象:
admin.initializeApp({
credential: admin.credential.cert({
projectId: "<PROJECT_ID>",
clientEmail: "foo@<PROJECT_ID>.iam.gserviceaccount.com",
privateKey: "-----BEGIN PRIVATE KEY-----<KEY>-----END PRIVATE KEY-----\n"
}),
databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});
通过如上所述明确定义凭据,我能够快速解决此问题。
潜在的罪魁祸首是使用旧版本的 firebase-admin。更新到最新版本后,一切都按预期工作,无需明确定义凭据。
我的 dialogflow 聊天机器人无法使用来自 Firebase rtdb 的数据进行响应。我在下面包含了我的履行代码。几天前,这会从我的数据库中以文本“测试成功”作为响应,但现在它 returns 没有可用的响应 并在控制台中给出以下内容:
FIREBASE WARNING: {"code":"app/invalid-credential","message":"Credential implementation provided to initializeApp() via the "credential" property failed to fetch a valid Google OAuth2 access token with the following error: "Failed to parse access token response: SyntaxError: Unexpected token p in JSON at position 4"."} "
有人对如何调试它有建议吗?预先感谢您的帮助!
'use strict';
const admin = require('firebase-admin');
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');
admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: '<DB-URL-HERE>'
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
function testintent(agent){
return admin.database().ref().once('value').then((snapshot)=> {
var myvalue = snapshot.test.val();
agent.add(myvalue);
});
}
}
let intentMap = new Map();
intentMap.set('Test Intent', testintent);
});
修复 Dialogflow 到 Firebase 的身份验证问题,而不是使用 admin.credential.applicationDefault()
作为凭据。使用 admin.credential.cert() 定义正确的服务帐户详细信息。有两种方法。
通过提供服务帐户密钥 JSON 文件的路径:
var serviceAccount = require("path/to/serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});
或者,通过内联提供服务帐户对象:
admin.initializeApp({
credential: admin.credential.cert({
projectId: "<PROJECT_ID>",
clientEmail: "foo@<PROJECT_ID>.iam.gserviceaccount.com",
privateKey: "-----BEGIN PRIVATE KEY-----<KEY>-----END PRIVATE KEY-----\n"
}),
databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});
通过如上所述明确定义凭据,我能够快速解决此问题。
潜在的罪魁祸首是使用旧版本的 firebase-admin。更新到最新版本后,一切都按预期工作,无需明确定义凭据。