我正在尝试与nodejs实现非常简单的dialogflow代理集成。
这是我到目前为止所做的
.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.log(process.env.GOOGLE_APPLICATION_CREDENTIALS);
// 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);
});
然后我在运行此文件时在控制台中收到此错误
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.' }
答案 0 :(得分:0)
我的角度机器人也遇到了类似的问题。
我所做的是,我没有使用json文件中的google_credentials,而是使用 private_key,client_email 创建了一个对象(这些值可以从服务帐户私钥文件.json中获取) ,并在设置会话客户端时传递了该对象。
var config = {
credentials: {
private_key: "YOUR_PRIVATE_KEY",
client_email: "YOUR_CLIENT_EMAIL"
}
}
const sessionClient = new dialogflow.SessionsClient(config);
注释:请从.json复制完整的private_key字符串。它将从"-----BEGIN PRIVATE KEY-----\n......"
开始。
此外,在GCP中,转到项目-> IAM,然后尝试将服务的角色设置为DIALOGLOW API ADMIN。检查是否可行。
答案 1 :(得分:0)
如果尚未解决,则解决方案是在sessionClient内部提供“ fileKey”。
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
});
如果没有将系统环境变量设置为GOOGLE_APPLICATION_CREDENTIALS,这甚至将起作用。
希望这会有所帮助。