Watson Assistant在嵌套节点内获取消息

问题描述

我想从嵌套在对话中的Watson处获得响应

我可以从“欢迎”节点以及当它们不理解文本输入(因为它们是全局的)时得到响应

conversation in 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为空。在下一轮回退到根节点。

解决方法

在您的代码中,每个周期都将上下文重置为一个空对象。这具有将对话重新设置为开始的效果。上下文用于管理对话状态。即。对话在对话框流中的何处以及已设置的所有变量。这样可以使对话继续进行。

在V1 API中,每次打开message都会返回上下文对象,您的应用程序可以查看该上下文对象并对其进行修改,但必须返回完整的上下文对象。因此,您的应用程序需要以某种方式缓存上下文对象(当它获得时),然后在下一次调用message时将其返回。您的应用需要在任何功能之外的文件全局级别上启动缓存,因此它只能启动一次,而不是每次对话都启动。

在V2 API中,上下文管理由API代表您在会话级别执行。为了保持上下文,您需要创建一个会话并在每个会话回合中使用该会话ID。可以选择将上下文返回给您的应用程序,从而使您的应用程序可以查看/修改已设置的所有上下文变量。