简体   繁体   中英

Watson Assistant context is not updated

I use watson assistant v1

My problem is that every time I make a call to the code in Nodejs, where I return the context, to have a coordinated conversation, the context is only updated once and I get stuck in a node of the conversation

this is my code

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();

the context.json file is updated, but when it is read the code only reads the first update of the context.json file and not the other updates

This will be because you are using require to read the.json file. For all subsequent require s of an already-required file, the data is cached and reused.

You will need to use fs.readfile and 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 = {} 
}


There is another subtle problem with your code, in that you are relying on your async call to fs.writeFile completing before you read the file. This will be the case most of the time, but as you don't wait for the fs.writeFile to complete there is the chance that you may try to read the file, before it is written.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM