DialogFlow:处理具有多个段的给定名称

时间:2018-01-23 04:32:16

标签: chatbot dialogflow

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

It can parse "Mary", but if I enter "Peter Paul", it only parses "Peter"

4 个答案:

答案 0 :(得分:3)

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

在用户说的短语中输入名称,例如“汤米李”。你会看到它被检测为名字和姓氏。

Dialogflow UI

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

Dialogflow UI

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

Dialogflow UI

现在,您可以提供任意名字集,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,“您的名字是$ given-name”将被插入为“您的名字是汤米和李“。您可以通过使用履行并在webhook中自行进行插值来解决这个问题。

答案 1 :(得分:1)

最简单的答案是您设置@ 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

答案 2 :(得分:0)

@sys.given-name实体只能识别来自 Mary Gold Mary Peter 等来自 Peter的名称保罗等。

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

答案 3 :(得分:-1)

您也可以使用@ sys.any。

只需添加以下训练短语:

my name is **Rahul Mehta** and highlight Rahul mehta with @sys.any.

I am **rahul mehta** and highlight rahul mehta with @sys.any.

rahul mehta and highlight rahul mehta with @sys.any.

您的机器人将使用这种方法接受所有名称。

但是,这样做有一个缺点,如果用户输入“我被称为Rahul Mehta”,该机器人会认为该名称是“我被称为Rahul Mehta”。

因此,为避免将来出现这种情况,请添加训练短语“ I am known as Rahul mehta”并突出显示Rahul mehta。