使用 Microsoft Bot Framework 和 Dialog Flow API 创建你的第一个聊天机器人:第一天(Dialogflow 和 Slack 集成)





5.00/5 (14投票s)
使用 Microsoft Bot Framework 和 Dialog Flow API 创建你的第一个聊天机器人:第一天(Dialogflow 和 Slack 集成)
目录
前言
本文是对 CodeProject 的 Slack API 挑战 的投稿。该比赛于 2019 年 1 月 7 日正式开始,将于 2019 年 3 月 7 日结束。
Slack 无疑是每个开发者都需要掌握的潮流平台。
它易于使用和管理,不仅如此,我们还可以创建自己的 Slack 应用并为其添加大量自定义功能。你可以在这篇文章中了解如何创建自己的 Slack 应用。它非常简单,创建第一个应用可能只需要 20 分钟。
聊天机器人教程路线图
由于这是一个广泛的话题,超出了单篇文章的范围,我将其分为多个部分。在第一篇文章中,我们将学习如何使用 Google 的 Dialogflow
创建一个聊天机器人,并在 Dialogflow
控制台中进行测试。我们还将了解如何将其集成到 Slack。第二篇文章将演示如何使用 Microsoft 的 Bot Framework 创建自定义聊天机器人,并在 Dialogflow
中启用 Webhooks,然后将响应从自定义机器人返回到 Dialogflow
的 Intent 中作为 fulfillment 响应。本系列的第三篇文章将演示如何将第二篇文章和第三篇文章中创建的完整机器人集成到 Facebook Messenger 和 Slack 中,并在这两个环境中测试 webhook 响应。以下是关于学习如何创建自定义聊天机器人的三篇教程文章。
- 使用 Microsoft Bot Framework 和 Dialogflow API 创建你的第一个聊天机器人:第一部分(Dialogflow 和 Slack 集成)
- 使用 Microsoft Bot Framework 和 Dialogflow API 创建你的第一个聊天机器人:第二部分(使用 Microsoft Bot Framework 创建机器人)
- 使用 Microsoft Bot Framework 和 Dialogflow API 创建你的第一个聊天机器人:第三部分(在 Slack 和 Facebook Messenger 上集成和测试机器人)
引言
来自维基百科
“聊天机器人(也称为智能机器人、交谈机器人、聊天机器人、机器人、即时消息机器人、交互式代理、会话界面或人工会话实体)是一种计算机程序或人工智能,它通过听觉或文本方法进行对话。[1] 这些程序通常旨在令人信服地模拟人类在对话伙伴方面的行为,从而通过图灵测试。”
在本文中,我们将讨论如何使用 Google 的 Dialogflow
API 创建一个实时聊天机器人,并将其集成到 Slack。文章的读者不需要具备机器人创建的先验知识,因为文章将通过解释性图片一步一步地演示机器人创建和部署过程。请阅读我上一篇关于如何使用 Amazon Lex 服务创建机器人的文章使用 Amazon Lex 服务创建聊天机器人。相信我,创建自己的机器人并看到它工作会非常有趣和令人兴奋。我们将设置 Dialogflow
账户以利用其 API。让我们直接开始教程。
案例研究
让我们设想一个机器人创建场景。假设有一家新开的餐厅,他们最近推出了网站、Facebook 页面、Twitter 账号,并将业务集成到其他社交媒体账户。餐厅希望推出一个数字解决方案,让用户在线预订餐桌,并希望创建一个自动化机器人来完成这项工作。最终用户可以与机器人对话并预订餐桌。机器人将在餐厅预订餐桌前询问所有相关细节,例如日期、时间、人数等。我们将创建机器人并将其集成到一些社交媒体账户中。
设置 Dialog Flow 账户
- 如果你已经有一个 Google 账户,并且想用它在 Dialogflow 中创建机器人,那么你可以这样做;如果没有,你可以创建一个新的。我正在使用我现有的 Google 账户登录 Dialogflow。
"Dialogflow 由 Google 的机器学习提供支持,通过构建引人入胜的语音和文本会话界面(如语音应用和聊天机器人),利用 AI 为用户与你的产品互动提供新方式。在你的网站、移动应用、Google Assistant、Amazon Alexa、Facebook Messenger 以及其他流行的平台和设备上与用户建立联系。了解更多…"
点击“转到控制台”以登录
Dialogflow
。 - 如前所述,创建新的 Google 账户或使用现有账户登录。
在 Dialogflow 中创建机器人
创建 Agent
- 进入控制台后,你将看到一个入门页面,点击“创建 Agent”按钮来创建 Agent/机器人。
- 给机器人起一个有意义的名字,例如“
TableBookingBot
”。你可以根据自己的喜好选择默认时区和语言,然后点击“创建
”按钮。 - 保存 Agent 需要一点时间。
创建 Intent
- 现在来看看 Intent 是什么。每个 Intent 代表了机器人可以理解并执行操作以满足其需求的 D不同主题。例如,当用户输入“
Hi
”或“Hello
”时,这些输入需要由机器人处理,为此,需要有一个 Intent 来理解用户的输入并做出相应的响应。如果我们点击左侧面板中的“Intents”按钮,我们会看到已经为我们创建了两个默认 Intent,例如 Default Welcome Intent 和 Default Fallback Intent。 - 点击 Default Welcome Intent,我们会看到示例训练短语,在 Amazon 的 Lex 服务中称为 utterances,已经填好了。例如,“
just going to say hi
”,“heya
”。你可以根据你期望用户开始对话时输入的内容来添加更多内容。 - 页面右侧有一个测试 Intent 的选项。点击它并输入“
Hi
”。在这里,我们在测试面板中看到,它识别出用户说了(“USER SAYS
”)“Hi
”,并用默认文本“Hi! How are you doing?
”进行响应。所以,这个响应文本来自 Intent 中为所有训练短语/utterances 设置的默认响应。 - 下图显示了此默认欢迎 Intent 中所有预定义的样本训练短语。
- 向下滚动,你将看到文本响应(Text Responses)部分。这里显示了一些默认响应。由于我们的目的是询问用户是否要预订餐桌,我们可以删除这些默认响应,并为我们的 Intent 提供一些。
- 给出一些有意义的响应,以满足我们询问用户是否想预订餐桌的目的。例如,“
Hi! How are you doing? Would you like to book a table?
”,“Hi, There! Looking for a table reservation?
”等等。 - 现在,如果你在保存 Intent 后进行测试,它将根据设置的响应文本做出相应的响应。
- 那么,如果用户想预订餐桌怎么办?我们需要一个新的 Intent 来处理用户的餐桌预订。因此,点击 **Intents** 中的 **+** 按钮,创建一个新的 Intent,并将其命名为
BookATable
。 - 在训练短语/utterances 部分,提供诸如“
Book a table
”,“Book a table for 2
”,“Book a table for 2 at 9 PM today
”之类的短语。你会注意到,当你输入并输入这些短语时,框架非常智能地识别你的输入参数。例如,当你输入“book a table for 2
”时,它会识别出 2 是一个数字,并创建一个参数列表,并将 2 添加为类型为 number 的参数。此功能基本上是 Action/parameters 部分的一部分,在该部分中可以定义输入参数,但应从用户那里获取。我们可以手动定义这些参数,但框架也非常智能,可以从我们的训练短语中理解并将其添加到 Action/parameters 列表中。像数字一样,它也适用于时间和日期。 - 现在在 Action 和 parameters 部分,我们看到基于训练短语添加了三个参数,即类型为 number、date 和 time。当用户输入时,机器人会期望用户提供这些参数。点击“保存”以保存当前的训练短语和参数。
- 我们还可以使这些参数成为用户必须提供的,并为参数设置默认提示。这样,如果用户没有提供这些参数,机器人就会询问用户提供。点击数字旁边的“定义提示”链接。
- 为数字定义一些提示,例如“
For how many people?
”,“For how many guests
”等等。 - 同样,对于时间,如下图所示。
- 对于日期,如下图所示。
- 我们可以为此 Intent 提供默认响应,例如“
Your table is booked
”,并且还可以在默认响应中提供输入参数,例如“your table I booked for the $number on a $date at a $time
”,其中$
和对应的参数是用户提供的输入参数。你可以通过这种方式调整许多给定的 Action 和参数,使你的机器人更具交互性和酷炫性。此默认响应是机器人在没有 webhook 或功能处理用户输入文本时返回的响应。保存 Intent。 - 回到 Intent 列表和 Default Welcome Intent,我们看到我们也可以在这里添加后续 Intent。Follow up Intent 意味着基于用户输入的下一个机器人响应。例如,当用户在被问及“
Would you like to book a table.
”时回答“Yes
”或“No
”时的机器人响应。点击添加后续 Intent。 - 我们看到你可以创建的后续 Intent 类型列表,我们将为 yes 响应创建一个,为 no 响应创建一个。
- 点击 no,然后为 no 创建一个新的后续 Intent。
- 将 Intent 命名为“
NoIntent
”,我们看到默认的训练短语,例如用户说“no”,“don’t”,“nope really”等等。这意味着用户不想预订餐桌。 - 在这种情况下,当用户说“
no
”时,提供响应文本,例如“No problem! Thanks
”,“OK. Maybe next time! Thanks
”等等。 - 同样,创建一个“
Yes
”后续 Intent,并将其命名为“YesIntent
”并保存。 - 现在在 Intent 列表中,我们看到 Default Welcome Intent 有两个后续 Intent。你可以在测试窗口中测试机器人,并检查你的 Intent 和用户响应。
在下一节中,我们将使用 Microsoft Bot Framework 创建一个机器人,并连接实时业务逻辑来处理用户请求,而不是发送虚拟响应。
在 Dialogflow 控制台中测试机器人
我们没有 webhook 的第一个版本的机器人已完成,可以进行测试。
- 打开 Default Welcome Intent 的测试窗口,输入“
Hi
”。机器人将返回默认响应文本。 - 现在,输入“
Book a table
”,机器人将询问“For how many persons
”。 - 提供人数,机器人将继续询问时间和日期,因为我们将这些参数设置为必填项。
它将返回最终响应,如下所示。
它显示“OK. Your table for 3 is reserved on today at 6 pm
”,即默认响应文本。我们称之为默认响应文本,因为我们没有集成任何外部 webhook 作为请求的 fulfillment,因此它会采用默认响应文本。我们也可以通过创建自定义机器人引擎并将其作为 fulfillment webhook 集成到 Dialogflow
中来添加自定义功能,在这种情况下,响应将从我们的 API 返回,该 API 可以根据后端业务逻辑计算响应。在下一节中,我们将看到如何使用 Microsoft Bot Framework 创建一个 webhook,并将其集成到我们的机器人中。
将机器人集成到 Slack
你可以在这篇文章中了解如何创建自己的 Slack 应用。
- 转到 Google
Dialogflow
控制台的 Integrations 部分,然后启用 Slack。 - 按照弹出窗口中显示的说明进行操作。
- 创建新的 Slack 应用,并获取需要在此部分填写的详细信息。
- 打开新创建的 Slack 应用,然后输入“
Hi
”。它将按预期响应。
因此,我们从默认的返回响应中获得了结果。
太棒了!
结论
在这篇详细的文章中,我们了解了什么是聊天机器人,如何使用 Google 的 Dialogflow
创建自己的机器人,以及如何在 Dialogflow
控制台和 Slack 应用中测试机器人。在系列的下一篇文章中,我们将学习如何使用 Microsoft Bot Framework 创建一个机器人,并从该 webhook 返回 fulfillment 响应,而不是从 Dialogflow
Intent 返回默认响应。