如何使用Node.js从IBM Watson Assistant V2的响应中获取上下文变量?

时间:2019-04-22 11:04:21

标签: node.js ibm-cloud ibm-watson watson-assistant

我们将IBM Watson Assistant用于NLU,后端则将Nodejs用于API调用。我能够连接并从Watson Assistant获得JSON响应。为此,我使用了以下软件包“ watson-developer-cloud / assistant / v2”。

我正在处理watson中的上下文/插槽,所以我只想获取JSON响应中那些上下文变量/插槽的值。

我尝试从Watson发送文本响应(JSON文件)中的上下文变量。

还尝试使用Watson Assistant V1获取上下文,但是问题在于会话处理,因此我更喜欢使用Watson Assistant V2

const AssistantV2 = require('watson-developer-cloud/assistant/v2');
const assistant = new AssistantV2({
  version: 'XXXX-XX-XX',
  iam_apikey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
  url: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
});

var sess_id;

assistant.createSession({
    assistant_id: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
})
  .then(res => {
    sess_id=res.session_id;
})
  .catch(err => {
    console.log(err);
});

assistant.message({
    assistant_id: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
    session_id: sess_id,
    input: {
        'message_type': 'text',
        'text': 'Message'},
    })
    .then(res => {
        console.log(JSON.stringify(res, null, 2))
        console.log(res)})

预期: 我应该在Watson Json响应中获取上下文

实际: 我在Watson Json回应中没有得到背景信息

2 个答案:

答案 0 :(得分:1)

请参见V2 API documentation for IBM Watson Assistantline 473 in the Node.js SDK

有一个输入参数 return_context 。默认情况下为 false 。如果设置为 true ,它将告诉服务器返回带有消息响应的上下文数据。

  /** Whether to return session context with the response. If you specify `true`, the response will include the `context` property. */
    return_context?: boolean;

答案 1 :(得分:1)

正如@data_henrik正确提到的那样,您需要传递return_context作为请求的一部分,才能在响应中看到MessageContext

这是一个示例请求,具有从上一个响应传递过来的上下文

const AssistantV2 = require('watson-developer-cloud/assistant/v2');

const service = new AssistantV2({
  iam_apikey: '{apikey}',
  version: '2019-02-28',
  url: '{url}'
});

service.message({
  assistant_id: '{assistant_id}',
  session_id: '{session_id}',
  input: {
    'message_type': 'text',
    'text': 'Hello',
    'options': {
      'return_context': true
    }
  },
  context: {
    'global': {
      'system': {
        'user_id': 'my_user_id'
      }
    },
    'skills': {
      'main skill': {
        'user_defined': {
          'account_number': '123456'
        }
      }
    }
  }
})
  .then(res => {
    console.log(JSON.stringify(res, null, 2));
  })
  .catch(err => {
    console.log(err);
  });

input下,您可以看到return_context设置为 true