使用Watson会话,如何处理客户,帐号等

时间:2017-04-05 11:13:23

标签: ibm-watson watson-conversation watson watson-dialog

我在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)
}

1 个答案:

答案 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

中处于活动状态