无法再将 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。更新到最新版本后,一切都按预期工作,无需明确定义凭据。