Я пытаюсь реализовать очень простую интеграцию агента диалогового потока с nodejs.
Вот что я сделал до сих пор
.json.GOOGLE_APPLICATION_CREDENTIALS с путем к моему файлу закрытого ключа .json.Вот код, который я пытаюсь запустить прямо сейчас:
require('dotenv').config()
const projectId = 'gg-chatbot-216808';
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,
},
},
};
// This prints the private key path correctly.
console.info(process.env.GOOGLE_APPLICATION_CREDENTIALS);
// Send request and log result
sessionClient
.detectIntent(request)
.then(responses => {
console.info('Detected intent');
const result = responses[0].queryResult;
console.info(` Query: ${result.queryText}`);
console.info(` Response: ${result.fulfillmentText}`);
if (result.intent) {
console.info(` Intent: ${result.intent.displayName}`);
} else {
console.info(` No intent matched.`);
}
})
.catch(err => {
console.error('ERROR:', err);
});
Затем я получаю эту ошибку в консоли при запуске этого файла
Auth error:Error: invalid_user: Robot is disabled.
ERROR: { Error: 14 UNAVAILABLE: Getting metadata from plugin failed with error: invalid_user: Robot is disabled.
at Object.exports.createStatusError (/var/www/html/google_auth/node_modules/grpc/src/common.js:87:15)
at Object.onReceiveStatus (/var/www/html/google_auth/node_modules/grpc/src/client_interceptors.js:1188:28)
at InterceptingListener._callNext (/var/www/html/google_auth/node_modules/grpc/src/client_interceptors.js:564:42)
at InterceptingListener.onReceiveStatus (/var/www/html/google_auth/node_modules/grpc/src/client_interceptors.js:614:8)
at callback (/var/www/html/google_auth/node_modules/grpc/src/client_interceptors.js:841:24)
code: 14,
metadata: Metadata { _internal_repr: {} },
details: 'Getting metadata from plugin failed with error: invalid_user: Robot is disabled.' }
эта библиотека может помочь, npmjs.com/package/dialogflow-helper Я написал эту библиотеку поверх клиента отдыха диалогового потока



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я также столкнулся с аналогичной проблемой для моего углового бота.
Что я сделал, так это то, что вместо использования google_credentials из файла json я создал объект с private_key, client_email {эти значения могут быть взяты из файла закрытого ключа учетной записи службы .json} и передал объект при настройке клиента сеанса.
var config = {
credentials: {
private_key: "YOUR_PRIVATE_KEY",
client_email: "YOUR_CLIENT_EMAIL"
}
}
const sessionClient = new dialogflow.SessionsClient(config);
Примечание: скопируйте полную строку private_key из .json. Он начнется как "-----BEGIN PRIVATE KEY-----\n......".
Кроме того, в GCP перейдите в проект-> IAM, затем попробуйте установить роль для службы как DIALOGLOW API ADMIN. Проверьте, работает ли это.
эта библиотека может помочь, npmjs.com/package/dialogflow-helper Я написал эту библиотеку поверх клиента отдыха диалогового потока
Если это еще не решено, решение состоит в том, чтобы предоставить "fileKey" внутри sessionClient.
const sessionClient = new dialogflow.SessionsClient({
fileKey:" path of your credentials.json file"
});
или
let filePath = process.env.GOOGLE_APPLICATION_CREDENTIALS = "Location of credentials file".
const sessionClient = new dialogflow.SessionsClient({
fileKey:filePath
});
это будет работать, даже если системная переменная env не установлена как GOOGLE_APPLICATION_CREDENTIALS.
Надеюсь, это будет полезно.
вы разрабатываете веб-перехватчик для агента? в этом случае попробуйте использовать следующий клиент NodeJS github.com/dialogflow/dialogflow-fulfillment-nodejs