我在nodejs中使用Watson会话API创建示例应用程序。我试图获取用户名并将其发送给Watson,然后我想打个招呼" $ username",我也希望在整个会话中保持这一点,以便我可以在用户问我是否可以记住这个名字,Watson可以说"是的," $ username""。
有人可以帮我提供示例代码,如何在此用例中使用intent。
// Start conversation with Hello message.
conversation.message({
input: { text: "Hello" },
}, processResponse);
// Process the conversation response.
function processResponse(err, response) {
if (err) {
console.error(err); // something went wrong
return;
}
// If an intent was detected, log it out to the console.
if (response.intents.length > 0) {
//console.log('Detected intent: #' + response.intents[0].intent);
console.log(response.context)
}
// Display the output from dialog, if any.
if (response.output.text.length != 0) {
console.log("Watson : "+response.output.text[0]);
}
// Prompt for the next round of input.
var newMessageFromUser = prompt('Me : ');
// Send back the context to maintain state.
conversation.message({
input: { text: newMessageFromUser },
context : response.context,
}, processResponse)
}
答案 0 :(得分:2)
您可以使用上下文变量。
要提取名称,请在1º node
中请求名称,并在next
节点中添加此JSON:
{
"context": {
"name": "<? input.text ?>"
},
"output": {
"text": {
"values": [
"Hello $name."
],
"selection_policy": "sequential"
}
}
}
input.text
捕获所有用户输入的内容。
您可以使用$
进行设置,并使用名称获取上下文变量:$name
将显示用户键入的内容。
在其他情况下,如果用户输入我的名字是XXXXX,您可以在上下文变量中使用正则表达式。检查此示例以在上下文变量中使用REGEX:
"name" : "<? input.text.extract('^[A-Z][-a-zA-Z]+$') ?>"
@MichelBida使用正则表达式做了一个示例,但是对于另一个用户请求,请检查此link。
编辑:
使用:
context.myproperty = "Hello World";
现在拥有系统实体@sys-person
,该实体从用户的输入中提取名称。系统未对名称进行规范化,因此“Will”不会被视为“William”,反之亦然,请参阅official文档。此实体可以在Entity -> System Entities -> @sys-person