Watson Assistant 上下文未更新
Watson Assistant context is not updated
我用的是watson assistant v1
我的问题是,每次我调用 Nodejs 中的代码时,我 return 上下文,以进行协调对话,上下文只更新一次,我就卡在了一个节点中对话
这是我的代码
client.on('message', message => {
//general variables
var carpetaIndividual = <../../../>
var cuerpoMensaje = <....>
var emisorMensaje = <....>
//detect if context exists
if(fs.existsSync(carpetaIndividual+'/contexto.json')) {
var watsonContexto = require(carpetaIndividual+'/contexto.json');
var variableContexto = watsonContexto;
} else {
var variableContexto = {}
}
//conection with Watson Assistant
assistant.message(
{
input: { text: cuerpoMensaje },
workspaceId: '<>',
context: variableContexto,
})
.then(response => {
let messageWatson = response.result.output.text[0];
let contextoWatson = response.result.context;
console.log('Chatbot: ' + messageWatson);
//Save and create JSON file for context
fs.writeFile(carpetaIndividual+'/contexto.json', JSON.stringify(contextoWatson), 'utf8', function (err) {
if (err) {
console.error(err);
}
});
//Send messages to my application
client.sendMessage(emisorMensaje, messageWatson)
})
.catch(err => {
console.log(err);
});
}
client.initialize();
context.json 文件已更新,但读取时代码仅读取 context.json 文件的第一个更新而不是其他更新
这是因为您正在使用 require
读取 .json 文件。对于 already-required 文件的所有后续 require
,数据将被缓存并重复使用。
您将需要使用 fs.readfile
和 JSON.parse
// detect if context exists
if (fs.existsSync(carpetaIndividual+'/contexto.json')) {
var watsonContexto = fs.readFileSync(carpetaIndividual+'/contexto.json');
// Converting to JSON
var variableContexto = JSON.parse(watsonContexto);
} else {
var variableContexto = {}
}
你的代码还有另一个微妙的问题,因为你依赖
在您读取文件之前,您对 fs.writeFile
的异步调用已完成。大多数情况下都是这种情况,但由于您不等待 fs.writeFile
完成,因此您可能会在写入文件之前尝试读取该文件。
我用的是watson assistant v1
我的问题是,每次我调用 Nodejs 中的代码时,我 return 上下文,以进行协调对话,上下文只更新一次,我就卡在了一个节点中对话
这是我的代码
client.on('message', message => {
//general variables
var carpetaIndividual = <../../../>
var cuerpoMensaje = <....>
var emisorMensaje = <....>
//detect if context exists
if(fs.existsSync(carpetaIndividual+'/contexto.json')) {
var watsonContexto = require(carpetaIndividual+'/contexto.json');
var variableContexto = watsonContexto;
} else {
var variableContexto = {}
}
//conection with Watson Assistant
assistant.message(
{
input: { text: cuerpoMensaje },
workspaceId: '<>',
context: variableContexto,
})
.then(response => {
let messageWatson = response.result.output.text[0];
let contextoWatson = response.result.context;
console.log('Chatbot: ' + messageWatson);
//Save and create JSON file for context
fs.writeFile(carpetaIndividual+'/contexto.json', JSON.stringify(contextoWatson), 'utf8', function (err) {
if (err) {
console.error(err);
}
});
//Send messages to my application
client.sendMessage(emisorMensaje, messageWatson)
})
.catch(err => {
console.log(err);
});
}
client.initialize();
context.json 文件已更新,但读取时代码仅读取 context.json 文件的第一个更新而不是其他更新
这是因为您正在使用 require
读取 .json 文件。对于 already-required 文件的所有后续 require
,数据将被缓存并重复使用。
您将需要使用 fs.readfile
和 JSON.parse
// detect if context exists
if (fs.existsSync(carpetaIndividual+'/contexto.json')) {
var watsonContexto = fs.readFileSync(carpetaIndividual+'/contexto.json');
// Converting to JSON
var variableContexto = JSON.parse(watsonContexto);
} else {
var variableContexto = {}
}
你的代码还有另一个微妙的问题,因为你依赖
在您读取文件之前,您对 fs.writeFile
的异步调用已完成。大多数情况下都是这种情况,但由于您不等待 fs.writeFile
完成,因此您可能会在写入文件之前尝试读取该文件。