DialogFlow:处理具有多个段的名字

DialogFlow: handling given-names with multiple segments

我正在尝试使用 DialogFlow 制作一个聊天机器人来处理我们的用户注册过程。现在,我遇到了 $sys.given-name 实体的问题。它似乎无法解析具有多个标记的给定名称(即 Peter Paul、Tommy Lee 等)。

@sys.given-name 实体将只能识别给定的名字,例如来自 Mary GoldMary Peter 来自 Peter Paul 等等

你应该像 @sys.given-name @sys.last-name 那样尝试一下。在代码中,您可以将它们合并为全名。

Dialogflow 支持列表 个实体,您可以使用它来解决您的问题。

在您的用户说词组中输入姓名,例如"Tommy Lee"。您会看到这被检测为名字和姓氏。

现在,select 当前突出显示为 @sys.last-name 的 "Lee" 部分。然后,您可以使用 UI 将其重新分类为 @sys.given name:given-name: 标记参数名称,因此这是一个具有参数名称 given-name.

@sys.given-name 实体

两个名称部分现在都分配给了参数名称given-name。因此,given-name 参数现在是一个列表。您可以在下面的 UI 中看到这一点; "IS LIST" 框被选中。

现在,您可以提供任何一组名字,given-name 将是一个包含所有名字的列表。如果您在控制台中尝试此操作,您会看到 JSON 将包含 given-name.

下的一组名称
{
  "id": "cd91e7a1-be53-422e-a3f9-cb1feb3f49bb",
  "timestamp": "2018-01-25T00:13:13.948Z",
  "lang": "en",
  "result": {
    "source": "agent",
    "resolvedQuery": "Tommy Lee",
    "action": "",
    "actionIncomplete": false,
    "parameters": {
      "given-name": [
        "Tommy",
        "Lee"
      ]
    },
    "contexts": [],
    "metadata": {
      "intentId": "80b4d66b-ae95-43fd-afee-c590f049a123",
      "webhookUsed": "false",
      "webhookForSlotFillingUsed": "false",
      "intentName": "Multiple names"
    },
    "fulfillment": {
      "speech": "Your name is Tommy and Lee",
      "messages": [
        {
          "type": 0,
          "speech": "Your name is Tommy and Lee"
        }
      ]
    },
    "score": 1
  },
  "status": {
    "code": 200,
    "errorType": "success",
    "webhookTimedOut": false
  },
  "sessionId": "d1053c3e-4009-4556-8560-3b9fd23eefe5"
}

这里的一个问题是,如果您在响应中使用 $given-name,Dialogflow 会将该项视为列表 - 因此对于 Tommy Lee,"Your name is $given-name" 将被插入为 "Your name is Tommy and Lee".您可以通过使用 fulfillment 并在 webhook 中自己进行插值来解决这个问题。

简短的回答是设置@sys.given-name 并将其标记为列表,就像您在屏幕截图中所做的那样。然而,问题就变成了你在底部的行会像这样输出:

Nice to meet you $given-name
Nice to meet you Tommy and Lee

您可以通过使用原始调用打印出与传入的名称完全相同的名称来避免这种情况。输出将如下所示:

Nice to meet you $given-name.original
Nice to meet you Tommy Lee