2

我正在使用 nodejs 中的 Watson 对话 API 创建示例应用程序。我正在尝试获取用户名并将其发送给 Watson,然后我想打个招呼“$username”,我还想在整个对话过程中保留它,这样如果用户问我是否记得这个名字,Watson 可以说“是的,”$ 用户名“”。

有人可以帮助我提供示例代码,如何在这个用例中使用意图。

    // 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)
}
4

1 回答 1

2

您可以为此使用上下文变量。

要提取名称,请在 中请求名称1º node,然后在next节点中添加以下 JSON:

{
  "context": {
    "name": "<? input.text ?>"
  },
  "output": {
    "text": {
      "values": [
        "Hello $name."
      ],
      "selection_policy": "sequential"
    }
  }
}

input.text捕获所有用户键入的内容。

您可以使用$for set 并获取具有名称的上下文变量:$name将显示用户键入的内容。

在其他情况下,如果用户输入我的名字是 XXXXX,您可以在上下文变量中使用正则表达式。检查此示例以在上下文变量中使用 REGEX:

   "name" : "<? input.text.extract('^[A-Z][-a-zA-Z]+$') ?>"

@MichelBida 用正则表达式做了一个例子,但是对于用户的另一个请求,检查这个链接

编辑:

利用:

context.myproperty = "Hello World";

现在有了 System Entity @sys-person,这个实体从用户的输入中提取名称。名称没有被系统规范化,因此“Will”不被视为“William”,反之亦然,见官方文档。该实体可以在Entity -> System Entities -> @sys-person

于 2017-04-05T13:36:32.863 回答