我希望从Watson获得嵌套在对话中的响应
我可以从欢迎节点获得响应,当它们不理解文本输入时,因为它们是全局的

这是我的代码
const AssistantV1 = require('ibm-watson/assistant/v1');
const { IamAuthenticator } = require ('ibm-watson/auth');
const { rejects } = require('assert');
const assistant = new AssistantV1({
authenticator: new IamAuthenticator({ apikey: '<>' }),
serviceUrl: 'https://gateway.watsonplatform.net/assistant/api/',
version: '2020-04-01'
});
let context = {} //I don't know what to put in context
assistant.message(
{
input: { text: '2' },//the answer "2" the nested node "Tramo Emision"
workspaceId: '<>',
context: context
}, function (err, response) {
if (err) {
rejects(err)
} else {
context = response.context;
}
})
.then(response => {
console.log(JSON.stringify(response.result, null, 2));
})
.catch(err => {
console.log(err);
});但是这段代码只允许我获得全局响应,而不是嵌套响应
我得到的答案是:
在上一轮对话中没有与true匹配的对话节点条件- context.nodes_visited为空。在下一轮回退到根节点。
发布于 2020-09-29 22:31:37
在您的代码中,每个周期都会将上下文重置为一个空对象。这具有将对话重置回开头的效果。上下文用于管理会话状态。即。对话流中对话的位置,以及任何已设置的变量。这允许对话继续进行。
在V1应用编程接口中,每次打开message都会返回上下文对象,您的应用程序可以查看和修改该对象,但它必须返回完整的上下文对象。因此,您的应用程序需要在获取上下文对象时以某种方式缓存它,然后在下一次调用message时将其返回。您的应用程序需要在文件全局级别启动缓存,而不是在任何函数之外,因此它将只启动一次,而不是在每次会话时启动。
在V2应用编程接口中,上下文管理是由应用编程接口在会话级别代表您执行的。为了维护上下文,您需要创建一个会话,并在每次会话时使用该会话id。可以选择将上下文返回给您的应用程序,允许您的应用程序查看/修改已设置的任何上下文变量。
https://stackoverflow.com/questions/63930338
复制相似问题