Не удается получить правильные учетные данные по умолчанию для приложения Dialogflow
Я создал агент Dialogflow с параллельным приложением gcloud. Тем не менее, когда я пытаюсь интегрировать его в серверную часть Node.js, кажется, что он обращается к неверным учетным данным приложения по умолчанию.
Я могу подтвердить, что проверка подлинности прошла успешно, потому что консоль регистрирует правильный идентификатор проекта (одиагностика-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.
Странно то, что мой номер проекта - 889800549397, а не 764086051850. Таким образом, похоже, что он не имеет доступа к правильным учетным данным.
Что я пробовал до сих пор:
- Создайте новый ключ учетной записи службы Dialogflow и настройте экспорт в файл ключей JSON через
export GOOGLE_APPLICATION_CREDENTIALS='/Users/Joseph/workspace/finddoc/DiagnosisTest-cred.json
- Удаление
application_default_credentials.json
файл в./config/gcloud/
папка.
Когда я делаю это, я получаю другое сообщение об ошибке:
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.
2 ответа
Наконец-то разобрался, в чем проблема. После установки переменной среды GOOGLE_APPLICATION_CREDENTIALS вам необходимо перезагрузить компьютер, чтобы он вступил в силу!
Я испытывал точно такое же сообщение об ошибке (включая идентификатор проекта 764086051850) на моей локальной машине при попытке использовать Dialogflow V2 API. Я не хотел беспокоиться с GOOGLE_APPLICATION_CREDENTIALS
переменная окружения, поэтому я следовал инструкциям здесь.
В частности, этот раздел был важен:
Включение API и квоты управляются главным проектом учетных данных приложения по умолчанию. В случае ошибок, связанных с отключением API или ограничением квот, используйте флаг --client-id-file. Вы можете создать идентификатор клиента по адресу https://console.cloud.google.com/apis/credentials.
Команда, которую я в итоге выполнил:
gcloud auth application-default login --client-id-file=my_app_client_id.json
Это сохранит учетные данные приложения по умолчанию в файл в вашем домашнем каталоге. Например: /Users/nathanb/.config/gcloud/application_default_credentials.json