Не удается получить правильные учетные данные по умолчанию для приложения Dialogflow - PullRequest
0 голосов
/ 28 мая 2018

Я создал агент 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. Таким образом, похоже, что он не обращается к правильным учетным данным.

Что я пробовал до сих пор:

  1. Создание нового ключа учетной записи службы Dialogflow и настройка экспорта в файл ключа json с помощью export GOOGLE_APPLICATION_CREDENTIALS='/Users/Joseph/workspace/finddoc/DiagnosisTest-cred.json
  2. Удаление 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 ]

0 голосов
/ 03 июля 2018

Я испытывал точно такое же сообщение об ошибке (включая идентификатор проекта 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

0 голосов
/ 29 мая 2018

Наконец-то разобрался, в чем проблема.После установки переменной среды GOOGLE_APPLICATION_CREDENTIALS необходимо перезагрузить компьютер, чтобы он вступил в силу!

...