#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"});
это решение не работает