Клиентская библиотека Dialogflow v2 не работает | Ошибка: не удалось загрузить учетные данные по умолчанию

#google-api #dialogflow-es #google-oauth

#google-api #dialogflow-es #google-oauth

Вопрос:

вот их пример кода:

 const dialogflow = require('dialogflow');
const uuid = require('uuid');

/**
 * Send a query to the dialogflow agent, and return the query result.
 * @param {string} projectId The project to be used
 */
async function runSample(projectId = 'your-project-id') {
  // A unique identifier for the given session
  const sessionId = uuid.v4();

  // Create a new session
  const sessionClient = new dialogflow.SessionsClient();
  const sessionPath = sessionClient.sessionPath(projectId, sessionId);

  // The text query request.
  const request = {
    session: sessionPath,
    queryInput: {
      text: {
        // The query to send to the dialogflow agent
        text: 'hello',
        // The language used by the client (en-US)
        languageCode: 'en-US',
      },
    },
  };

  // Send request and log result
  const responses = await sessionClient.detectIntent(request);
  console.log('Detected intent');
  const result = responses[0].queryResu<
  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.`);
  }
}
  

и этот код вообще не работает, выдавая ошибку: не удалось загрузить учетные данные по умолчанию :

 2019-03-21T16:59:40.099101 00:00 app[web.1]: Message: hi Bilal
2019-03-21T16:59:40.102561 00:00 app[web.1]: (node:23) UnhandledPromiseRejectionWarning: Error: Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.
2019-03-21T16:59:40.102565 00:00 app[web.1]:     at GoogleAuth.<anonymous> (/app/web/node_modules/google-auth-library/build/src/auth/googleauth.js:168:23)
2019-03-21T16:59:40.102568 00:00 app[web.1]:     at Generator.next (<anonymous>)
2019-03-21T16:59:40.102570 00:00 app[web.1]:     at fulfilled (/app/web/node_modules/google-auth-library/build/src/auth/googleauth.js:19:58)
2019-03-21T16:59:40.102572 00:00 app[web.1]:     at process._tickCallback (internal/process/next_tick.js:68:7)
2019-03-21T16:59:40.102691 00:00 app[web.1]: (node:23) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
2019-03-21T16:59:40.102784 00:00 app[web.1]: (node:23) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
2019-03-21T16:59:55.986568 00:00 app[web.1]: Message: hi Bilal
2019-03-21T16:59:55.986595 00:00 app[web.1]: (node:23) UnhandledPromiseRejectionWarning: Error: Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.
2019-03-21T16:59:55.986598 00:00 app[web.1]:     at GoogleAuth.<anonymous> (/app/web/node_modules/google-auth-library/build/src/auth/googleauth.js:168:23)
2019-03-21T16:59:55.986600 00:00 app[web.1]:     at Generator.next (<anonymous>)
2019-03-21T16:59:55.986602 00:00 app[web.1]:     at fulfilled (/app/web/node_modules/google-auth-library/build/src/auth/googleauth.js:19:58)
2019-03-21T16:59:55.986605 00:00 app[web.1]:     at process._tickCallback (internal/process/next_tick.js:68:7)
2019-03-21T16:59:55.986647 00:00 app[web.1]: (node:23) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
  

у них есть инструкции, как использовать эту библиотеку в репозитории, но это не имеет смысла https://github.com/googleapis/nodejs-dialogflow

они нигде не описали, как вводить учетные данные при вызове detect intent, а не eve в приведенном здесь примере кода:https://github.com/googleapis/nodejs-dialogflow/blob/master/samples/detect.js

Я никогда в жизни не видел такой безответственной команды, как dialogflow team

Обновить:

экспорт переменной env решил мою проблему, и теперь я получаю что-то обратно из dialogflow, но не так, как ожидалось, возможно, у них неверный код в образце кода репозитория

этот код у них есть в качестве примера:

   ...
   
  // Send request and log result
  const responses = await sessionClient.detectIntent(request);
  console.log('Detected intent');
  const result = responses[0].queryResu<
  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.`);
  }
  
  ...
  

и на самом деле result.fulfillmentText не существует, это дает мне неопределенный

Обновление 2

я приложил столько усилий (см. Консоль.журналы ниже) просто чтобы понять, что вместо responses[0].queryResult.fulfillmentText now они возвращают responses[0].queryResult.fulfillmentMessages , и это не текстовая строка, а объект, в котором есть дополнительные значения, которые вы можете увидеть в консоли.журналы ниже:

 ...
 
// Send request and log result
const responses = await sessionClient.detectIntent(request);
console.log('Detected intent');

console.log("responses: ", responses)
console.log("responses[0]: ", responses[0])
console.log("responses[0].queryResult: ", responses[0].queryResult)
console.log("responses[0].queryResult.fulfillmentMessages: ", responses[0].queryResult.fulfillmentMessages)
// console.log("responses[0].queryResult.fulfillmentMessages[1]: ", responses[0].queryResult.fulfillmentMessages[1])
console.log("responses[0].queryResult.fulfillmentMessages[0]: ", responses[0].queryResult.fulfillmentMessages[0])
console.log("responses[0].queryResult.fulfillmentMessages[0].text: ", responses[0].queryResult.fulfillmentMessages[0].text)
console.log("responses[0].queryResult.fulfillmentMessages[0].text.text: ", responses[0].queryResult.fulfillmentMessages[0].text.text)
console.log("responses[0].queryResult.fulfillmentMessages[0].text.text[0]: ", responses[0].queryResult.fulfillmentMessages[0].text.text[0])

var fulfilmentText = responses[0].queryResult.fulfillmentMessages[0].text.text[0]

 ...
  

Ответ №1:

Библиотека аутентификации Google ищет переменную среды с именем GOOGLE_APPLICATION_CREDENTIALS, которая указывает на файл учетных данных JSON.

Вы можете загрузить этот файл, следуя инструкциям, описанным в https://dialogflow.com/docs/reference/v2-auth-setup .

Ссылка после сообщения об ошибке содержит примеры того, как установить эту переменную среды: https://cloud.google.com/docs/authentication/getting-started

Ответ №2:

Вы пробовали взглянуть на это? Вам нужно настроить аутентификацию, создать ключ учетной записи службы в формате .json, затем использовать Google Cloud SDK для его обработки.

https://dialogflow.com/docs/reference/v2-auth-setup

Вы также можете попробовать передать учетную запись службы следующим образом

   // Create a new session
  const sessionClient = new dialogflow.SessionsClient({keyFilename: "./service_account.json"});
  

Комментарии:

1. You'll need to set up authentication, create a service account key as a .json then have Google Cloud SDK handle it не могли бы вы, пожалуйста, объяснить, как это закодировать, когда вы используете частное облако или частный сервер nodejs на heroku?

2. const sessionClient = new dialogflow.SessionsClient({keyFilename: "./service_account.json"}); это решение не работает