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.readfileJSON.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 完成,因此您可能会在写入文件之前尝试读取该文件。