65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 C# 构建机器人并使用 Bot Framework Emulator 进行调试

2016年7月7日

CPOL

3分钟阅读

viewsIcon

45967

downloadIcon

227

本文演示了如何使用 C# 构建一个基本机器人, 并使用 Bot Framework Emulator 进行调试

引言

Microsoft Bot Framework 使开发人员能够构建智能机器人,这些机器人可以通过 Skype、Facebook 和其他此类服务与最终用户交互。 本文演示了如何构建一个简单的保险机器人,该机器人将协助保单持有人提出损失索赔。 从开发的角度来看,开发人员在注册机器人之前应该调试和测试机器人。 Microsoft Bot Framework 模拟器是一个出色的工具,可帮助开发人员调试机器人代码库。

背景

Microsoft Bot Framework 由 Bot Builder SDK、Bot Connector、Bot Directory 等组件组成。 Bot Builder SDK 有助于使用 C# 或 Node.js 开发机器人。 Bot 连接器有助于连接机器人和最终用户。 Bot 目录是所有机器人的存储库。 使用 Microsoft Bot Framework 开发的机器人必须在 Bot 目录中注册并获得批准。 获得批准后,最终用户即可使用该机器人。

Using the Code

必备组件

可以从 此处 下载用于开发机器人框架的 Visual Studio 模板。 下载的 zip 文件必须复制到 %USERPROFILE%\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#. 复制完成后,Bot Application 模板将在 Visual Studio 2015 中可用。 必须使用 Bot Application 模板创建 Visual Studio 解决方案。

必须从 NuGet 包管理器安装 Microsoft.Bot.BuilderMicrosoft.Bot.Connector 包。 检查附加解决方案中的 packages.config 以获取此 Bot 应用程序所需的所有包。

此处 安装 Microsoft Bot Framework 模拟器。

构建 Bot 类

InsuranceBot 类定义了保单持有人在与保险机器人交互时需要填写的内容。 此类具有 PolicyNumberLossTypeLossDateWhereDidThisHappenLossDetail 等字段,这些字段表示在与 Bot 交互时将呈现给用户的表单流程中的字段。 Prompt 属性在每个字段上指定了与该字段对应的文本, Bot 在交互期间将向用户显示该文本。 Prompt 属性中指定的 {||} 显示所有可用的选项。

BuildForm 方法中的 FormBuilder 类为机器人构建表单流程。 Field 方法将类字段添加为表单字段。 表单完成后并将所有字段呈现给用户后,将调用 OnCompletion 方法。 所有收尾活动(例如显示一些确认消息)都可以在此处完成。

    public enum LossTypeOptions
    { 
        Stolen=1,
        Accident,
        NaturalCalamity
    }  
    [Serializable]
    public class InsuranceBOT
    {
        [Prompt("Please give me your policy number")]
        public string PolicyNumber;

        [Prompt("What happened to your vehicle {||}")]
        public LossTypeOptions LossType;

        [Prompt("When did this happen")]
        public DateTime? LossDate;

        [Prompt("Where did this happen")]
        public string WhereDidThisHappen;

        [Prompt("How this happened in detail")]
        public string LossDetail;

        public static IForm<InsuranceBot> BuildForm()
        {
            OnCompletionAsyncDelegate<InsuranceBot> wrapUpRequest = async (context, state) =>
            {
                string wrapUpMessage= "Your loss 
                ["+state.LossType+"] on "+state.LossDate.Value.ToShortDateString()
                +" against Policy number "+state.PolicyNumber+@" 
                is being processed. You will also receive a mail in your
                registered mail ID once this is initiated.Thank you for using our Bot service.";
                await context.PostAsync(wrapUpMessage);

            };
            return new FormBuilder<InsuranceBot>().Message
            ("Welcome to XXX Insurance. Sorry to know about your loss.")
                .Field(nameof(PolicyNumber))
                .Field(nameof(LossType))
                .Field(nameof(LossDate))
                .Field(nameof(WhereDidThisHappen))
                .Field(nameof(LossDetail))
                .OnCompletion(wrapUpRequest)
                .Build();
        }
    }

构建消息控制器

表单必须连接到机器人框架。 Chain 类提供了用于创建对话的可链接接口的方法。 使用 FormDialog.FromForm 创建表单对话框。 修改 Post 方法以调用 Conversation.SendAsync 以实现最终用户与机器人之间的交互。

    public class MessagesController : ApiController
    {
        internal static IDialog<InsuranceBOT> BuildInsuranceDialog()
        {
            return Chain.From(() => FormDialog.FromForm(InsuranceBOT.BuildForm));
        }

        [ResponseType(typeof(void))]
        public virtual async Task<HttpResponseMessage> Post([FromBody] Activity activity)
        {
            await Conversation.SendAsync(activity, BuildInsuranceDialog);
            return new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);
        }    
    }

配置文件更改

在配置文件中添加以下设置。

    <appSettings>
       <add key="BotId" value="123"></add>
    </appSettings>

使用 Microsoft Bot Framework 模拟器调试机器人

构建并运行 Bot 解决方案。

启动 Microsoft Bot Framework 模拟器。 提供机器人的 url,如下所示:

http://[localhost]:[端口号]/api/messages 在模拟器中。

可以在 Bot 代码库中设置断点。 对于模拟器中的每次转换,断点都将命中。

用户通过在用户聊天输入区域中键入 *Hi* 来启动对话。

Bot 响应欢迎消息并询问保单号。

用户回复保单号,Bot 询问损失类型。

用户通过单击表单字段将损失类型回复为“被盗”,Bot 继续提问下一组问题,用户给出回复。

最后,Bot 通过给出总结消息来结束对话。

关注点

附加的 zip 文件包含演示的保险机器人的解决方案。 该解决方案是使用 Visual Studio 2015 Community Edition 创建的。 在构建解决方案时,请连接到 Internet,以便在解决方案中还原 NuGet 包。 您可以从 此处 下载 zip 文件。

下一步是 在此处 注册机器人,并将其与 Skype 或 Facebook 或任何其他此类服务一起使用。

© . All rights reserved.