当前位置: 首页 > 知识库问答 >
问题:

无法访问Dialogflow应用程序的正确应用程序默认凭据

赵灼光
2023-03-14

我创建了一个具有并发gcloud应用程序的Dialogflow代理。但是,当我尝试将它集成到Node.js后端时,它似乎访问了错误的应用程序默认凭据。

我可以确认它正在验证身份验证是否成功,因为当我运行以下代码时,它的控制台记录了正确的项目ID(diagnosistest-56e81):

// Imports the Google Cloud client library.
const Storage = require('@google-cloud/storage')

// Instantiates a client. If you don't specify credentials when constructing
// the client, the client library will look for credentials in the
// environment.
const storage = new Storage();

// Makes an authenticated API request.
storage
  .getBuckets()
  .then((results) => {
    const buckets = results[0];

    console.log('Buckets:');
    buckets.forEach((bucket) => {
      console.log(bucket.name);
    });
  })
  .catch((err) => {
    console.error('ERROR:', err);
  })
// You can find your project ID in your Dialogflow agent settings
const projectId = 'diagnosistest-56e81'; //https://dialogflow.com/docs/agents#settings
const sessionId = 'quickstart-session-id';
const query = 'hello';
const languageCode = 'en-US';

// Instantiate a DialogFlow client.
const dialogflow = require('dialogflow');
const sessionClient = new dialogflow.SessionsClient();

// Define session path
const sessionPath = sessionClient.sessionPath(projectId, sessionId);

// The text query request.
const request = {
  session: sessionPath,
  queryInput: {
    text: {
      text: query,
      languageCode: languageCode,
    },
  },
};

// Send request and log result
sessionClient
  .detectIntent(request)
  .then(responses => {
    console.log('Detected intent');
    const result = responses[0].queryResult;
    console.log(`  Query: ${result.queryText}`);
    console.log(`  Response: ${result.fulfillmentText}`);
    if (result.intent) {
      console.log(`  Intent: ${result.intent.displayName}`);
    } else {
      console.log(`  No intent matched.`);
    }
  })
  .catch(err => {
    console.error('ERROR:', err);
  });
ERROR: { Error: 7 PERMISSION_DENIED: Dialogflow API has not been used in project 764086051850 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/dialogflow.googleapis.com/overview?project=764086051850 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
    null

当我执行此操作时,会得到不同的错误消息:

ERROR: Error: Unexpected error while acquiring application default credentials: Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information.

共有1个答案

阮梓
2023-03-14

终于弄明白问题出在哪里了。在设置环境变量GOOGLE_APPLICATION_CREDENTIALS之后,您必须重新启动计算机,这样它才能生效!

 类似资料:
  • 它说要使用以下命令: 在Google Shell中,我尝试了以下操作: 我知道命令指向的是正确的文件位置。如何成功验证应用程序默认凭据?

  • 我当前正在尝试访问云API,但收到以下错误:

  • 我正在尝试托管一个使用谷歌Kubernetes引擎的应用程序。我的docker映像在本地运行时可以工作,但当我将其放到Google Cloud上并使用kubernetes集群进行设置时,它以一种非常奇怪的方式失败了。 我能够连接到应用程序,并且它可以工作,直到我触发的调用。然后它试图读取我通过环境变量提供的文件,结果出现了问题。我得到了这个(被截断和编辑的)回溯: 有没有人能猜到这里出了什么问题?

  • ADC(应用程序默认凭据)工作流是否只支持Google Cloud API(例如,支持Google Cloud Storage API,但不支持Google Sheet API)? 我指的是Google.auth的默认方法--不必在代码中存储任何私钥,这是一个巨大的胜利,也是有效利用ADC(应用程序默认凭据)设置的主要好处。 如果我将环境变量设置为私钥文件,例如key.json,则以下代码可以工作

  • 问题内容: 我最近将gcloud库从118.0.0更新为132.0.0,并且remote_api_shell立即不再起作用。我经历了许多重新登录的过程,通过gcloud设置了应用程序默认凭据,并使用了服务帐户和环境变量。所有排列均失败,并显示相同的错误消息: 经过131.0.0和130.0.0的重新修订后,我回到118.0.0,重新登录,一切正常。 更新gcloud之后,我没有更新正在运行的应用程

  • 我的android应用程序没有正确构建和部署。当启动一个新实例时,它会将我的应用程序启动到我的物理移动设备上,并且我能够在Visual Studio中进行调试。但现在它不会将应用程序启动到移动设备,而且当我手动运行应用程序时,它也不会在Visual Studio中调试。这个项目有可移植的类,并且正在使用Xamarin.Forms。 我确实更改了对AndroidManifest.xml的构建操作。