使用 Microsoft Bot Framework 和 Dialogflow API 构建你的第一个聊天机器人:第 2 天(使用 Microsoft Bot Framework 的机器人)





5.00/5 (8投票s)
使用 Microsoft Bot Framework 和 Dialogflow API 构建你的第一个聊天机器人。与 Google Assistant 集成。
- 下载 Bot_Dialog.zip - 8.1 KB
- 下载 Bot Controller - 8.2 KB
- 下载 Bot_Application.zip - 24.2 KB
- 下载 PDFArticle.zip - 2.2 MB
- 下载源代码 - 17.7 MB
目录
- 前言
- 聊天机器人教程路线图
- 引言
- 案例研究
- 设置 Dialog Flow 账户并使代理正常工作
- 使用 Microsoft Bot Framework 创建机器人
- 将机器人从 Visual Studio 发布到 Azure
- 注册机器人
- Dialogflow.v2 SDK
- Dialogflow 中的 Webhooks
- 用于餐桌预订机器人的 Webhook
- 测试机器人
- 结论
- 下载次数
前言
本文是对 CodeProject 的 Slack API 挑战 的投稿。该竞赛于 2019 年 1 月 7 日正式开始,于 2019 年 3 月 7 日结束。
毫无疑问,Slack 是当今每个开发人员都需要并且以新方式流行的平台。
它易于使用和管理,不仅如此,我们还可以创建自己的 Slack 应用并为其添加许多自定义功能。您可以在 这篇文章 中学习如何创建自己的 Slack 应用。它非常简单,创建第一个应用可能只需要 20 分钟。
聊天机器人教程路线图
由于这是一个广泛的话题,超出了单篇文章的范围,因此我将各部分分为多篇文章。在第一篇文章中,我们将了解如何使用 Google 的 `Dialogflow` 创建聊天机器人,并在 `Dialogflow` 控制台中测试机器人。我们还将了解它如何与 Slack 集成。第二篇文章将演示如何使用 Microsoft 的 bot framework 创建自定义聊天机器人,并在 `Dialogflow` 中启用 Webhooks,然后将响应从自定义机器人返回到 `Dialogflow` 的意图中作为 fulfillment 响应。本系列的第三篇文章将演示如何将第二篇和第三篇文章中创建的完整机器人集成到 Facebook Messenger 和 Slack 中,并在两个环境中测试 webhook 响应。以下是关于学习如何创建自定义聊天机器人的三篇文章。
- 使用 Microsoft Bot Framework 和 Dialogflow API 构建你的第一个聊天机器人:第 1 天(Dialogflow 和 Slack 集成)
- 使用 Microsoft Bot Framework 和 Dialogflow API 构建你的第一个聊天机器人:第 2 天(使用 Microsoft Bot Framework 的机器人)
- 使用 Microsoft Bot Framework 和 Dialogflow API 构建你的第一个聊天机器人:第 3 天(在 Slack 和 Facebook Messenger 上集成并测试机器人)
简介
根据 维基百科,“
“**聊天机器人**(也称为**智能机器人**、**谈话机器人**、**聊天机器人**、**机器人**、**IM 机器人**、**交互式代理**、**对话式界面**或**人工对话实体**)是计算机程序或人工智能,它通过听觉或文本方式进行对话。[1] 这些程序通常旨在令人信服地模拟人类作为对话伙伴的行为方式,从而通过图灵测试。”
在本文中,我将演示如何使用 Microsoft 的 bot framework 创建自定义聊天机器人,并在 `Dialogflow` 中启用 Webhooks,然后将响应从自定义机器人返回到 `Dialogflow` 的意图中作为 fulfillment 响应。本文的读者需要了解如何使用 `Dialogflow` 创建机器人,为此,您可以参考本系列的上一篇文章,其中解释了如何在 `Dialogflow` 中创建机器人。
案例研究
让我们设想一个机器人创建的场景。假设有一家新开的餐厅,他们最近推出了网站、Facebook 页面、Twitter 账户,并将他们的业务集成到其他社交媒体账户中。这家餐厅希望提供一种数字解决方案,供用户在线预订餐桌,他们希望创建一个自动化机器人来完成此任务。最终用户可以与机器人对话并预订餐桌。机器人将在餐厅预订餐桌前询问所有相关详细信息,例如日期、时间、人数等。我们将创建机器人并将其集成到一些社交媒体账户中。
设置 Dialog Flow 账户并使代理正常工作
“Dialogflow 由 Google 的机器学习驱动,通过构建引人入胜的语音和文本对话界面(如由 AI 驱动的语音应用和聊天机器人),为用户提供与您的产品互动的新方式。通过您的网站、移动应用、Google Assistant、Amazon Alexa、Facebook Messenger 以及其他流行的平台和设备与用户建立联系。了解更多…”
您需要参考本系列的上一篇文章来设置 `Dialogflow` 账户并创建带有意图的 Bot 代理。完成此操作后,您可以继续在本文中创建 Webhooks 并与 `Dialogflow` 代理集成。
使用 Microsoft Bot Framework 创建机器人
使用 Microsoft 的 Bot Framework,您可以“构建、连接、部署和管理智能机器人,以在网站、应用、Cortana、Microsoft Teams、Skype、Slack、Facebook Messenger 等上与用户进行自然交互。了解更多。”
安装 Bot Framework
我们将使用 Bot Framework 的一个先前版本来创建机器人。
- 访问 URL:https://docs.microsoft.com/bs-cyrl-ba/bot-framework/dotnet/bot-builder-dotnet-quickstart 来处理我们开始之前的所有先决条件。如果您还没有 Visual Studio 2017 for Windows,请安装它;如果您已有 VS 2017,请更新 Visual Studio 2017 的所有扩展;然后单击下面显示的链接下载三个 zip 文件。这些 zip 文件用作创建机器人的模板。我还会将 zip 文件作为可下载附件。
- 下载完三个 zip 文件,即“Bot Application.zip”、“Bot Controller.zip”和“Bot Dialog.zip”后,将它们放入 Visual Studio 的Templates文件夹中,该文件夹通常位于 Documents->Visual Studio 2017 -> Templates -> ProjectTemplates -> Visual C# 下。
在 Visual Studio 2017 中创建 Bot Framework 类型项目
- 打开 Visual Studio 并单击以创建新项目。如果您在项目模板中搜索 bot 名称,您将看到所有新的 Bot Framework 模板来创建 Bot Framework 类型项目。选择“
BotApplication
”作为项目类型,为其起一个有意义的名称,例如“BookATableBot
”,选择一个位置和解决方案文件名,然后单击 OK。 - 项目创建完成后,解决方案结构将如下所示。它将具有与任何 Web API 项目类似的配置,但有一些修改,例如控制器名称,这里是“
MessagesController
”,有一个Dialogs文件夹和一个名为RootDialog.cs的类。
Bot Framework Emulator
- 要测试机器人,我们需要一个模拟器,我们将在这里使用一个较旧版本的模拟器。您也可以使用最新版本。访问 URL:https://github.com/Microsoft/BotFramework-Emulator/releases 并下载并安装 Windows 版模拟器。
- 现在,只需按 F5 从 Visual Studio 运行应用程序。
- 当默认页面启动时(在我的情况下是 localhost:3979),然后启动已安装的模拟器,并提供 Messages 控制器的 URL,即在启动的应用程序 URL 后面附加api/messages。因此,URL 变为 https://:3979/api/messages。将此 URL 提供给模拟器。
- 提供 URL 后,您可以测试机器人,输入任何您想要的内容,例如“
Hi
”,应用程序将返回响应,“You sent Hi which was 2 characters
”。那么这个响应是从哪里来的? - 如果我们回到解决方案并查看RootDialog.cs类,我们会看到一个名为
MessageReceivedAsync
的消息,它返回此响应。
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
var activity = await result as Activity;
// calculate something for us to return
int length = (activity.Text ?? string.Empty).Length;
// return our reply to the user
await context.PostAsync($"You sent {activity.Text} which was {length} characters");
context.Wait(MessageReceivedAsync);
}
现在,请使用您的调试技能来测试在调用Messages控制器时消息是如何返回的。
将机器人从 Visual Studio 发布到 Azure
在我们编写响应方法并将机器人与 `Dialogflow` 集成之前,让我们将到目前为止创建的机器人发布到 Azure。如果您没有 Azure 账户,可以创建一个免费试用账户。我也在这里使用 Azure 的免费试用账户。
- 在解决方案资源管理器中右键单击项目,然后单击“发布”,如下所示
- 选择**App Service**,您可以在此处选择创建一个新的 app service,然后单击**Publish**,它将跳转到一个新页面,您可以在其中填写一些用户信息。
- 创建 app service 时,提供您选择的应用名称、订阅类型、资源组(您的相关 Azure 资源将驻留在此处)以及托管计划。将托管计划保持在最低级别。我特意选择将**Application Insights**设置为**None**,因为我们不需要它。单击**create**。
- 单击 create 并再次发布项目后,项目将编译并将源代码发布到 Azure,然后将启动一个新页面,其名称以您在创建应用程序时提供的应用名称开头,URL 将类似于 https://bookatablebot.azurewebsites.net。
这意味着我们的机器人已成功发布到 Azure 服务器。在看到我们的机器人与 `Dialogflow` 一起工作之前,还有一些事情要做,但那些都很简单。现在,我们需要注册我们的机器人。
注册机器人
- 到目前为止一切顺利,现在要注册已发布的机器人,请单击机器人发布后在启动页面上显示的链接。
- 这将打开一个 URL 为 https://dev/botframework.com 的页面。
- 转到 URL:https://dev.botframework.com/bots/new 来注册您的机器人。
- 在这里,在注册机器人之前需要配置一些设置。填写机器人显示名称(例如,“
Book A Table Bot
”)、机器人 handle 名称(例如,“bookatable
”)以及描述(不过是可选的)等详细信息。 - 在**Configuration**部分,提供消息传递终结点(即 Azure 上已发布机器人的 URL,后面附加“api/messages”)。您还需要创建 Microsoft 应用 ID 和密码来关联这个新应用。
- 单击“**Create Microsoft App ID and password**”链接,这将打开一个新页面,您可以在其中看到页面名称和生成的应用 ID。
- 您可以生成密码并将应用 ID 和密码存储在某个安全位置以供将来参考。
- 返回 Visual Studio,并在Web.config文件中,提供我们生成的 `MicrosoftAppId` 和 `MicrosoftAppPassword`。
- 再次发布。
- 回到注册机器人页面,将所有者设置为您 Azure 账户使用的电子邮件 ID,然后单击**Register**按钮来注册机器人。
- 您现在可以使用下面的“**Test**”按钮测试您的机器人。您也可以直接在 Azure 上执行此注册过程,或将此已注册的机器人迁移到 Azure,如以下图片中的红色条消息所示。
Dialogflow.v2 SDK
现在是时候创建一个控制器来处理 `Dialogflow` 请求了。我们将创建一个控制器来处理从 Google `Dialogflow` 中创建的代理发来的请求,并从该控制器返回响应作为 fulfillment 文本。
- 打开解决方案中项目的 Nuget 包管理器,并安装 `Google.Apis.Dialogflow.v2` 包。
- 在Controllers文件夹中添加一个新控制器,并将其命名为
DialogFlowController
。添加一个Post
方法,该方法接受 `GoogleCloudDialogflowV2WebhookRequest` 作为参数,并返回 `GoogleCloudDialogflowV2WebhookResponse`。 - 返回具有 `FulfillmentText` 和 `Source`(作为控制器名称)的响应,以便我们知道响应来自我们的控制器而不是其他地方。添加一个
Get
方法来仅返回“Hello DialogFlow!
”。 - 再次将项目发布到 Azure。现在当 URL 启动时,即项目发布后,附加“
api/dialogflow
”,即`controller`方法的 URL。当我们输入 URL 并按 Enter 时,我们将看到来自 `Dialogflow` 控制器的 `Get` 方法的响应。
Dialogflow 中的 Webhooks
- 我们将 `Dialogflow` 控制器的响应作为响应添加到我们的 `Dialogflow` 机器人中,方法是启用 webhook 配置并为机器人启用 fulfillment。转到 `Dialogflow` 控制台中的 Fulfillment,然后启用 `Webhook` 配置。提供由 bot framework 开发并在 Azure 上发布的 API 的 URL。然后保存配置。
- 转到 Intents,对于 `WelcomeIntent`(我将 Default Welcome Intent 重命名为 `WelcomeIntent`),为 webhook 调用启用 Fulfillment,以便 fulfillment 响应来自 webhook 调用而不是默认响应。
- 保存意图并尝试输入一些内容并按 Enter,您现在将收到的响应是“
Hello DialogFlow!
”。此响应来自 `DialogFlow` 控制器的 `Post` 方法作为 fulfillment 文本。因此,我们的 `Webhook` 集成良好且工作正常。
用于餐桌预订机器人的 Webhook
本节将进行实际操作。在本节中,我们将创建一个基本的项目结构,用于在 Visual Studio 中的项目中处理意图,并根据意图请求提供响应。我们将创建一个 Bot 模型,该模型将映射来自 `Dialogflow` 的请求和响应,并使用 `Dialogflow` SDK v2 来处理请求。
BotModel
首先,创建一个模型,该模型可以与我们代码中的传入代理请求和传出响应进行映射。在项目中添加一个新文件夹,并添加一个名为BotModel.cs的新类。
将以下代码添加到类文件中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace BookTableBot.Models
{
public class BotModel
{
public BotModel()
{
Id = "";
Session = new Session();
Request = new Request();
Response = new Response();
}
public string Id { get; set; }
internal Session Session { get; set; }
internal Request Request { get; set; }
internal Response Response { get; set; }
}
internal class Request
{
public string Id { get; set; }
public string Intent { get; set; }
public string State { get; set; }
public List<KeyValuePair<string,string>> Parameters { get; set; }
}
internal class Response
{
public string Text { get; set; }
public string Event { get; set; }
}
internal class Session
{
public string Id { get; set; }
}
}
现在,此文件包含四个类,即 `BotModel` 类、`Session`、`Request` 和 `Response` 类及其属性。 `BotModel` 类具有 `Id`、`Session`、`Request` 和 `Response` 等属性,这些属性也在 `BotModel` 构造函数中初始化。 `Request` 类具有 `Id`、`State`、`intent` 和 `Parameters`(作为键值对)。 `Response` 类具有 `Text` 和 `Event` 属性,`Session` 具有 `Id` 属性。这些类和属性的设置方式与 `Dialogflow` API 的 `request`、`response` 和 `session` 属性相匹配。
Model Mapper
下一步是创建一个模型映射器类,该类将我们的 bot 模型映射到 `GoogleCloudDialogflowV2WebhookResponse`,并将 `GoogleCloudDialogflowV2WebhookRequest` 映射到 bot 模型。因此,该类中将有两个方法。
- 在项目中创建一个名为utilities的文件夹,并向该文件夹添加一个名为
ModelMapper
的类。 - 添加以下类代码用于
ModelMapper
类using ApiAiSDK.Model; using BookTableBot.Models; using Google.Apis.Dialogflow.v2.Data; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace BookTableBot.Utilities { public class ModelMapper { internal static BotModel DialogFlowToModel(GoogleCloudDialogflowV2WebhookRequest dFlowResponse) { var botModel = new BotModel() { Id = dFlowResponse.ResponseId }; botModel.Session.Id = dFlowResponse.Session; botModel.Request.Intent = dFlowResponse.QueryResult.Intent.DisplayName; botModel.Request.Parameters = dFlowResponse.QueryResult.Parameters.ToList() .ConvertAll(p => new KeyValuePair<string, string>(p.Key, p.Value.ToString())); return botModel; } internal static GoogleCloudDialogflowV2WebhookResponse ModelToDialogFlow(BotModel botModel) { var response = new GoogleCloudDialogflowV2WebhookResponse() { FulfillmentText = botModel.Response.Text, Source = "BookAtableBot", }; return response; } } }
方法 `DialogFlowToModel` 将 `Dialogflow` webhook 请求映射到模型,方法 `ModelToDialogFlow` 将我们的模型映射到 `Dialogflow` webhook 响应。
Intent Handlers
我们需要我们的项目中有 intent handlers 来处理意图请求,即在本例中为 `WelcomeIntent` 和 `BookATable` 意图。这些 handlers 的作用是获取所请求意图的参数,并发送一个响应作为意图的 fulfillment。
- 在项目中添加一个名为Handlers的文件夹,并添加两个名为
BookATableIntent
和WelcomeIntent
的类 - 在
BookATableIntent
中,添加以下代码逻辑来返回所请求意图的响应。using BookTableBot.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace BookTableBot.Handlers { public class BookATableIntent { internal static BotModel Process(BotModel botModel) { var time = botModel.Request.Parameters.FirstOrDefault(p => p.Key == "time"); var date = botModel.Request.Parameters.FirstOrDefault(p => p.Key == "date"); var number = botModel.Request.Parameters.FirstOrDefault(p => p.Key == "number"); botModel.Response.Text = "Awesome! Your table for " + number + " is booked for " + date + " at " + time + "Have a nice day!"; return botModel; } } }
在这里,`Process` 方法接受模型作为参数,并提取我们在 `mapper` 类中映射的请求参数,并相应地执行操作,例如设置响应文本,并以响应文本形式返回相同的 bot 模型。
- 同样,对于 `WelcomeIntent`,添加以下类代码
using BookTableBot.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace BookTableBot.Handlers { public class WelcomeIntent { internal static BotModel Process(BotModel botModel) { botModel.Response.Text = "Hi! Would you like to book a table? If yes, simply type 'Book a table'"; return botModel; } } }
此意图的 `Process` 方法接受请求模型并设置响应文本为“Hi! Would you like to book a table? If yes, simply type 'Book a table'
”。因此,如果用户输入“Book a table
”,我们的 `BookAtable` 意图将被 `Dialogflow` API 调用。
Intent List
在我们的例子中,只有两个意图,但在一个功能齐全的 bot 应用中,可能会有数千个意图。在代码中管理如此多的意图确实很麻烦。为了维护这一点,我们需要一个 `IntentList` 类来处理所有意图。向Models文件夹添加一个名为IntentsList
的新类。
将以下类代码添加到该类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace BookTableBot.Models
{
public class IntentsList : List<KeyValuePair<string, Func<BotModel, BotModel>>>
{
public void Add(string intentName, Func<BotModel,BotModel> function)
{
var intent = this.FirstOrDefault(i => i.Key.ToLower() == intentName.ToLower());
if (string.IsNullOrWhiteSpace(intent.Key))
{
Add(new KeyValuePair<string, Func<BotModel, BotModel>>(intentName, function));
}
}
}
}
该 `Add` 方法接受意图名称和与之关联的函数,并检查意图列表是否已包含该意图。如果未包含,则将其添加。
在WebApi.Config.cs中,我们将有一个类型为 `IntentList` 的静态 `IntentHandlers` 变量,它将保存所有意图。因此,在WebApi.Config.cs文件中添加一个名为 `IntentHandlers` 的变量,如下所示。
public static IntentsList IntentHandlers { get; private set; }
And in the Register method, initialize this variable.
IntentHandlers = new IntentsList
{
{
"BookATableIntent", (mo)=>Handlers.BookATableIntent.Process(mo)
},
{
"WelcomeIntent", (mo)=>Handlers.WelcomeIntent.Process(mo)
}
};
我们看到意图名称与 `Dialogflow` 控制台中的意图名称匹配。确保名称匹配,否则代码匹配将不正确,意图将不会被调用。
WebApi.Config.cs 代码
using BookTableBot.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace BookTableBot
{
public static class WebApiConfig
{
public static IntentsList IntentHandlers { get; private set; }
public static void Register(HttpConfiguration config)
{
IntentHandlers = new IntentsList
{
{
"BookATableIntent", (mo)=>Handlers.BookATableIntent.Process(mo)
},
{
"WelcomeIntent", (mo)=>Handlers.WelcomeIntent.Process(mo)
}
};
// Json settings
config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver();
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented;
JsonConvert.DefaultSettings = () => new JsonSerializerSettings()
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Formatting = Newtonsoft.Json.Formatting.Indented,
NullValueHandling = NullValueHandling.Ignore,
};
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault
(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
}
}
Intent Router
我们几乎已经为机器人准备好了一切。唯一剩下的就是根据所需的意图请求从控制器调用 intent handlers 的 process 方法。为此,我们将添加一个 `IntentRouter`,它将根据意图的请求类型从 `Dialogflow` 控制器调用。
在 `Utilities` 类中添加一个名为IntentRouter
的新类,并将以下代码添加到该类
using BookTableBot.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace BookTableBot.Utilities
{
public class IntentRouter
{
public static BotModel Process(BotModel botModel)
{
var intentsList = WebApiConfig.IntentHandlers;
var intent = intentsList.FirstOrDefault(i => i.Key.ToLower() == botModel.Request.Intent.ToLower());
if (!string.IsNullOrWhiteSpace(intent.Key))
{
return intent.Value(botModel);
}
if (string.IsNullOrWhiteSpace(botModel.Response.Text))
{
botModel.Response.Text = "Sorry, I do not understand. please try again.";
}
return botModel;
}
}
}
intent router 类的 `process` 方法接受 bot 模型,并尝试从 intent handlers 列表中匹配意图的名称,并相应地返回请求的意图。
Dialogflow Controller
最后,修改控制器的 `Post` 方法以接收 webhook 请求,映射模型,并调用 `IntentRouter` 的 `Process` 方法。
using ApiAiSDK.Model;
using BookTableBot.Utilities;
using Google.Apis.Dialogflow.v2.Data;
using Microsoft.Bot.Builder.Luis.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace BookTableBot.Controllers
{
public class DialogFlowController : ApiController
{
public GoogleCloudDialogflowV2WebhookResponse Post(GoogleCloudDialogflowV2WebhookRequest obj)
{
var botModel = ModelMapper.DialogFlowToModel(obj);
if(botModel == null)
{
return null;
}
botModel = IntentRouter.Process(botModel);
return ModelMapper.ModelToDialogFlow(botModel);
}
public string Get()
{
return "Hello DialogFlow!";
}
}
}
到目前为止,这使得我们的基本应用程序能够工作。是时候进行测试了,但在那之前,编译项目并再次将其发布到 Azure。
测试机器人
发布到 Azure 后,我们可以在 `Dialogflow` 控制台本身中测试机器人。我们还将测试 Google Assistant 中的机器人,因为这可以通过 Google 的 `Dialogflow` 控制台直接完成。
在 Dialogflow 控制台中测试
返回 `Dialogflow` 控制台。请确保您已为 fulfillment 启用了 webhook,并且 `bot API URL` 已放置在 webhook 中。本教程前面已对此进行了解释。确保为 `BookATable` 和 Welcome Intent 启用了 fulfillment 选项。
- 打开 `WelcomeIntent` 并在测试窗口中键入“
Hi
”。响应将来自我们的 intent handler,如下所示,响应文本为“Hi! Would you like to book a table? If yes, simply type 'Book a table'
” - 现在按照 Welcome intent 响应中的说明键入“
Book a table
”。默认响应将询问日期、时间和人数。
最后,当您提供必需的参数,即人数、时间和日期后,它将返回如下响应
响应来自我们的 webhook。为了确保这一点,请单击底部的**Diagnostic Info**按钮。
我们将看到我们意图的所有请求和响应。检查其中的**Fulfillment Response**和**Source**。它来自我们的 webhook。
以及如下的 `Fulfillment Status`,它表示 `Webhook` 执行成功。
Google Assistant 中的机器人
您也可以在 Google Assistant 中测试机器人。
- 在 `Dialogflow` 控制台中,转到**Integrations**部分,然后单击“**See how it works in Google Assistant**”按钮。
- 这将打开 Google Assistant 模拟器,您可以在其中输入或提供音频输入。单击“**Talk to my test app**”。
- 它返回欢迎意图的响应。
- 键入“
Book a table
”。 - 它将询问所有必需的参数输入,如下所示
- 最后,它将返回 webhook 的响应。太棒了!😊
结论
在这篇详细的文章中,我们了解了什么是聊天机器人,以及如何使用 Microsoft 的 Bot framework 构建自己的机器人。我们还学习了如何在 `Dialogflow` 控制台中为 fulfillment 启用 Webhooks,并返回 webhook 的响应而不是默认文本。我们在 `Dialogflow` 控制台和 Google Assistant 中测试了机器人。在本系列的下一篇文章中,我们将学习如何将此机器人集成到 Slack、Facebook messenger 等社交媒体账户中。
下载次数
- 源代码: https://github.com/akhilmittal/CreatingCustomBot/tree/master/BookATableBot
- BotApplication.zip: https://github.com/akhilmittal/CreatingCustomBot/blob/master/Bot%20Application.zip
- BotController.zip: https://github.com/akhilmittal/CreatingCustomBot/blob/master/Bot%20Controller.zip
- BotDialog.zip: https://github.com/akhilmittal/CreatingCustomBot/blob/master/Bot%20Dialog.zip