我试图将一些参数发送到对话框流程(api.ai),例如用户名,电子邮件等,但我无法弄明白。问题是我无法使用Dialogflow v2 Nodejs SDK获取/设置任何特定数据(例如用户名,电子邮件等)。我尝试使用 queryParams.payload (v1: originalRequest ),但它并没有以某种方式工作。此外,我尝试使用数据触发自定义事件,但我无法获得有关响应的任何事件数据。有人知道如何在dialogFlow上发送会话对话的某些特定数据吗?
PAYLOAD示例
df %>% group_by(hour) %>% top_n(10, number) %>% arrange(hour, -number)
活动示例
const projectId = 'test-bot-test-1111';
const sessionId = user.uuid;
const languageCode = 'en-GB';
const sessionClient = new dialogFlow.SessionsClient();
const sessionPath = sessionClient.sessionPath(projectId, sessionId);
const request = {
session: sessionPath,
queryInput: {
text: {
text: query,
languageCode
}
},
queryParams: {
payload: {
data: {
username: 'bob',
email: 'bob@test.com'
}
}
}
};
let resultReq;
console.log('request :: ', request, '\n\n');
try {
resultReq = await sessionClient.detectIntent(request);
} catch (err) {
// eslint-disable-next-line no-console
return console.error('ERROR:', err);
}
答案 0 :(得分:18)
Dialogflow的v2 API使用gRPC并且有一些怪癖,其中一个是您遇到过的。如果您查看Node.js库的示例,您可以看到如何解决此问题。您需要使用jsonToStructProto
方法将JavaScript对象转换为proto结构,或者只复制the structjson.js
file in the sample in this gist。以下是使用structjson.js
文件的完整工作示例:
// Imports the Dialogflow library
const dialogflow = require('dialogflow');
// Import the JSON to gRPC struct converter
const structjson = require('./structjson.js');
// Instantiates a sessison client
const sessionClient = new dialogflow.SessionsClient();
// The path to identify the agent that owns the created intent.
const sessionPath = sessionClient.sessionPath(projectId, sessionId);
// The text query request.
const request = {
session: sessionPath,
queryInput: {
event: {
name: eventName,
parameters: structjson.jsonToStructProto({foo: 'bar'}),
languageCode: languageCode,
},
},
};
sessionClient
.detectIntent(request)
.then(responses => {
console.log('Detected intent');
logQueryResult(sessionClient, responses[0].queryResult);
})
.catch(err => {
console.error('ERROR:', err);
});