3

我想通过我的 Node 应用程序以 IBM Watson 中的上下文变量的形式将一些值传递给前端。我怎样才能实现它?

我尝试将要添加的值添加到当前上下文变量对象并将其发回。仍然没有帮助。有什么办法可以做到吗?


编辑:

现在,我将所需的值作为新的键值对从 Node 应用程序添加到上下文对象,如下所示。

...
let user_name = "MJ"
context.user_name = user_name
response.send({
    output: output,
    context: JSON.stringfy(context)
})
...

在 Watson Console 中,在我使用过的一个对话节点中,

Hey $user_name, How are you?

但我得到的输出是,

Hey , How are you?

我可以看到user_name上下文对象中的值,但是我不能按照我上面提到的方式使用它。还有其他方法吗?


任何帮助表示赞赏。提前致谢!

4

3 回答 3

2

我遇到了同样的问题。当您调用 IBM 服务器并请求 .json 时,我的解决方案是更改代码:

...
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      text,
      context: {username :  variable}, 
...

我在 Watson Assistant中username设置以及上下文,我使用函数通过 Query 获取名称的变量(因为在我的应用程序中,我通过 IFrame 调用聊天机器人。),但是您可以使用在 javascript 上设置的任何变量.

于 2018-07-25T18:35:23.663 回答
1
var payload = {
    assistantId: assistantId,
    sessionId: req.body.session_id, 
    context: {
        skills: {
           "main skill": {
              user_defined: {
                 username: 'John Doe'
               }
            }
         }
    },
    input: {
      message_type: 'text',
      text: "blah",
    },
  };

为我工作。在这里看到:https ://medium.com/@pranavbhatia_26901/watson-assistant-v2-context-sharing-3ca18626ed0d

于 2020-02-15T15:25:12.483 回答
1

您可以向 Context 对象添加任何值,该对象可以在您的 Node.JS 应用程序中访问,如果您将该值发送到前端,那么它也应该可以在 UI 中访问。

下面我提到了来自对话服务的示例欢迎响应。您可以从对话服务的响应中访问 Context 对象,并向该对象添加新的键值对。在响应中,您会看到我正在访问一个上下文变量username,该变量的值是MJ,它已被动态添加到上下文中。

`

{
"intents": [],
"entities": [],
"input": {
    "text": ""
},
"output": {
    "text": ["Hello MJ! How can I help you today?"],
    "nodes_visited": ["Conversation Start"],
    "log_messages": []
},
"context": {
    "username": "MJ",
    "conversation_id": "5835fa3b-6a1c-4ec5-92f9-22844684670e",
    "system": {
        "dialog_stack": [{
            "dialog_node": "Conversation Start"
        }],
        "dialog_turn_counter": 1,
        "dialog_request_counter": 1,
        "_node_output_map": {
            "Conversation Start": [0]
        }
    }
}

`

现在要更新上下文,获取响应并添加一个新的键值对

`

var convResponse = <responseObj from Conversation call>;
var context = convResponse.context;
//add new value to context
context["new_key"] = "new value";

`

现在,您对 Conversation 进行的下一次调用,使用这个更新的上下文而不是您从上一次调用中收到的上下文。您也可以将来自 Conversation 的响应发送回前端,然后可以将其显示给用户。

于 2018-03-20T07:56:28.457 回答