我想通过我的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
值,但是我不能以上面提到的方式使用它。还有其他方法吗?
感谢您的帮助。预先感谢!
我遇到了同样的问题。当您调用IBM服务器并请求.json:
时,我的解决方案是更改代码。...
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
text,
context: {username : variable},
...
我在Watson Assistant中设置的username
以及上下文,我使用一个函数通过Query获取名称的变量(因为在我的应用程序中,我通过IFrame调用了聊天机器人。),但是您可以使用在javascript上设置的任何变量。
您可以将任何值添加到Context对象中,可以在Node.JS应用程序中访问该值,如果将该值发送到前端,那么它也应该可以在UI中访问。
[下面,我提到了对话服务的欢迎样本。您可以从对话服务的响应访问Context对象,并向该对象添加新的键值对。在响应中,您将看到我正在访问具有值MJ的上下文变量username,该变量已动态添加到上下文中。
`
{
"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";
`
现在,您对会话的下一个呼叫,请使用此更新的上下文,而不是从上一个呼叫中收到的上下文。您也可以将响应从“对话”发送回前端,然后可以显示给用户。
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