如何在本地托管.Net Bot应用程序

时间:2017-02-21 03:56:46

标签: c# bots botframework

我们有一个客户端要求,Bot应用程序应该托管在本地,并且所有Web聊天通信都直接进入Web服务器。我打算开发一个Bot .Net应用程序并配置网络聊天频道。我想知道是否可以在本地配置Bot应用程序

  1. 如何在本地设置网络聊天?
  2. 如何跳过Bot注册并避免邮件路由?
  3. 我是否必须构建一个服务来处理Web服务器中的所有请求和响应?
  4. 如果我使用网络聊天客户端数据是如何安全的以及僵尸服务如何将请求路由到Webapp?
  5. 如果我使用网络聊天,客户端数据是如何安全的以及机器人服务如何将请求路由到Webapp。

2 个答案:

答案 0 :(得分:9)

确定。所以让我们解决这个问题 您要做的是将您的bot与其与Microsoft Bot Connector / Framework的任何和所有通信隔离开来。

首先了解Microsoft Bot框架生态系统中涉及的组件。

了解Bot框架生态系统

通常,vanilla bot会与3个Microsoft服务进行交互 -

  • Microsoft Bot Connector :这家伙是Bot Framework的核心。它有重要的工作(除了其他不重要的事情(安全!))的消息路由,会话跟踪和信道适应。
  • Microsoft Bot State Service :此服务用于存储对话(和自定义)状态。
  • Microsoft Account (MSA) server :Bot Connector服务使用OAuth 2.0客户端凭据进行机器人身份验证。 MSA服务器发出这些JWT访问令牌。

现在要创建一个内部部署机器人,您需要替换/模拟所有上述组件。幸运的是,Bot Builder SDK是开源的,设计精良。与上述服务交互的实现是界面驱动的,易于更改。

了解和修改Bot Builder SDK以创建内部部署机器人

由于我们的目标是不使用任何Microsoft服务,因此我们不需要MSA服务器来生成令牌。所以不需要机器人注册。

要替换的最简单的服务是 Bot State Service 。您需要做的就是实现IBotDataStoreIBotState接口。因此,您可以将其存储到您自己的Redis数据库中,而不是将状态存储在Bot State Service中。我写了blog post如何做到这一点。

现在还有什么可以替换 Bot Connector 。这很棘手而且不直接。此外,它不是开源的,所以你在这里独自一人。如上所述,第一个重要的部分是频道适应。既然你提到你只需要网络聊天频道,那就没什么可适应的了(呃?!)。它做的第二件重要事情是会话跟踪,它依赖于专门生成的不同ID,对话ID和活动ID。您必须understand他们所代表的内容。会话ID通常由频道创建和修改。

您必须在此处选择如何创建会话ID。默认情况下,Web聊天具有临时会话ID。您可以选择使其更加永久(一种方法是要求用户登录并使用用户ID)。

消息路由在Web聊天频道中的工作方式不同,因为没有一个特定的端点,Bot Connector必须调用(如Facebook Graph API)。因此,Web Chat通道利用Direct Line APIs发送消息并轮询(或使用套接字)特定端点来接收消息。网络聊天频道为open source,请继续检查他们是如何做到的。

因此,要完全替换Bot Connector API,您需要创建自己的连接器服务

  • 接受来自网络聊天频道的请求。
  • 调整它并将请求转发给bot
  • 接受来自bot的响应(我们将了解如何执行此操作)
  • 在某个持久性商店中维护响应。需要是因为用户可能已经关闭了网页,因此您可能需要在他回来时提供它。
  • 在下次轮询(或使用套接字)时将响应返回给网络聊天频道。

虽然这不是微不足道的,但你可以做一些可以让生活变得更轻松的设计决定。例如,取消适配器并保持单个架构,以便从Web聊天控制到机器人和后台进行通信(但随后您将需要更改Web Chat Channel代码)。对于初学者,您甚至可以查看模拟 Direct Line API的BotFramework Emulator code

现在如何让您的机器人发送回复您自己的连接器服务?为此,您需要实现IBotToUser接口。这很容易做到。看一下我的repo,我将对Skype For Business客户端的响应发送回来,而不是Bot Connector。

这是我相信的。如果你能完成上述工作,你可以拥有一个完全隔离的机器人,而不与云连接。为了安全起见,您可能拥有自己的OAuth提供程序(我建议使用IdentityServer)或在使用bot之前让用户登录。除非我更详细地了解您的应用程序生态系统和用例,否则我无法回答安全细节。

可以非常轻松地将对话数据(和状态)存储在您的内部部署数据库中。在我看来,如果您可以继续使用Bot Connector并且只替换Bot状态服务,那么最好(您还可以继续接收Bot Framework的新功能而无需更改任何代码)。

以上所有信息均来自我自己使用Bot Framework的经验。如果有人有更好的建议,请随时分享,我会进行编辑。

答案 1 :(得分:0)

我不明白为什么有些人必须修改Modifying Bot Builder SDK。 OP并未询问有关修改Bot Builder SDK的问题。否修改Modifying Bot Builder SDK的方法不会带您到任何地方(升级sdk等时很快就会出现问题。Microsoft已将该SDK托管在Azure中并获得客户端使用的Azure资源(此处的美元甚至用于Azure托管) (它的开源代码并免费出售)。它不在Premise工具上。可以免费测试,但不能在Azure上部署 只需使用 https://developer.syn.co.in/tutorial/bot/index.html 它在.net中具有针对Bot的prem Offline和Web api模型。 OSCOVA 下一代Bot开发平台,它将行业的Bot标准引入所有主要设备。 Oscova可以脱机工作,不需要连接任何在线API。该体系结构允许开发人员创建Bot,该Bot可以毫不费力地利用对话框,意图和实体识别。 Oscova还附带了由智能实体识别器支持的数十个预建系统实体,用于快速机器人开发。

NuGet软件包 为了便于在.NET项目中引用Oscova,Oscova部署在NuGet中,并且是Syn.Bot框架的组成部分。

建筑(V1) Oscova Bot架构基本上由以下元素组成。