Gra*_*ray 5 node.js dialogflow-es
如何通过 NodeJS 请求传递参数?例如,我想传递我的代码中的名称,对话流会自动回答一个包含我传递的参数的响应,作为“Hi $name”。
我的实际要求:
const request = {
session: sessionPath,
queryInput: {
text: {
text: query,
languageCode: languageCode,
},
},
};
Run Code Online (Sandbox Code Playgroud)
编辑 4 [index.js],这是新的正确代码 答案之后
const projectId = 'your-project-id';
const sessionId = 'session-id';
const query = 'your-query';
const languageCode = 'your-language';
const j = require("./structjson.js"); //download It from the answer
const dialogflow = require('dialogflow');
const sessionClient = new dialogflow.SessionsClient({keyFilename: './THIS-IS-RIGHT.json'});
// Define session path
const sessionPath = sessionClient.sessionPath(projectId, sessionId);
async function request() {
const contextClient = new dialogflow.ContextsClient({ keyFilename: './your-path-to-file.json' });
const contextData = {
name: contextClient.contextPath(projectId, sessionId, 'your-context'),
parameters: j.jsonToStructProto({ name: 'John' }),
lifespanCount: 1
};//An example for the name
const context = await contextClient.createContext({
parent: sessionPath,
context: contextData
});
const request = {
session: sessionPath,
queryInput: {
text: {
text: query,
languageCode
}
},
queryParams: {
contexts: context // You may want to add the other contexts here
}
};
const result = await sessionClient.detectIntent(request);
console.log(result);
}
request();
Run Code Online (Sandbox Code Playgroud)
您可以在发送event代替text.
您需要将 javascript 对象转换为 proto 结构。有一个包pb-util将处理编码/解码
const { struct } = require('pb-util');
const request = {
session: sessionPath,
queryInput: {
event: {
name: eventName,
parameters: struct.encode({ name: 'John' }),
languageCode
}
}
};
Run Code Online (Sandbox Code Playgroud)
之后,您需要根据您的意图使用以下语法创建参数。 #eventName.name
另一种方法是创建一个上下文,使用dialogflow.ContextsClient&client.createContext()并将参数添加到上下文中,然后将该上下文与queryInput请求一起发送。
async function request() {
const contextClient = new dialogflow.ContextsClient({ keyFilename: '..' });
const sessionClient = new dialogflow.SessionsClient({ keyFilename: '..' });
const contextData = {
name: contextClient.contextPath('[PROJECT]', '[SESSION]', '[YOUR-CONTEXT]'),
parameters: struct.encode({ name: 'John' }),
lifespanCount: 1
};
const context = await contextClient.createContext({
parent: sessionPath,
context: contextData
});
const request = {
session: sessionPath,
queryInput: {
text: {
text: query,
languageCode
}
},
queryParams: {
contexts: context // You may want to add the other contexts here
}
};
const result = await sessionClient.detectIntent(request);
console.log(result);
}
Run Code Online (Sandbox Code Playgroud)
现在您需要创建一个参数,其值为: #your-context.name
| 归档时间: |
|
| 查看次数: |
2508 次 |
| 最近记录: |