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

Irv*_*tes 5 chatbot dialogflow-es

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

它可以解析“Mary”,但如果我输入“Peter Paul”,它只解析“Peter”

Dan*_*ake 4

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

在用户说的短语中输入名称,例如“Tommy Lee”。您会看到这被检测为名字和姓氏。

对话流用户界面

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

对话流用户界面

两个名称部分现在都分配给参数 name given-name。因此,given-name参数现在是一个列表。您可以在下面的用户界面中看到这一点;“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"
}
Run Code Online (Sandbox Code Playgroud)

这里的一个问题是,如果您$given-name在响应中使用,Dialogflow 会将该项视为列表 - 因此对于 Tommy Lee,“您的名字是 $given-name”将被插入为“您的名字是 Tommy 和 Lee”。您可以通过使用履行并在 Webhook 中自行进行插值来解决此问题。