我们有一个客户端要求,Bot应用程序应该托管在本地,并且所有Web聊天通信都直接进入Web服务器。我打算开发一个Bot .Net应用程序并配置网络聊天频道。我想知道是否可以在本地配置Bot应用程序
如果我使用网络聊天,客户端数据是如何安全的以及机器人服务如何将请求路由到Webapp。
答案 0 :(得分:9)
确定。所以让我们解决这个问题 您要做的是将您的bot与其与Microsoft Bot Connector / Framework的任何和所有通信隔离开来。
首先了解Microsoft Bot框架生态系统中涉及的组件。
通常,vanilla bot会与3个Microsoft服务进行交互 -
现在要创建一个内部部署机器人,您需要替换/模拟所有上述组件。幸运的是,Bot Builder SDK是开源的,设计精良。与上述服务交互的实现是界面驱动的,易于更改。
由于我们的目标是不使用任何Microsoft服务,因此我们不需要MSA服务器来生成令牌。所以不需要机器人注册。
要替换的最简单的服务是 Bot State Service 。您需要做的就是实现IBotDataStore
或IBotState
接口。因此,您可以将其存储到您自己的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,您需要创建自己的连接器服务
虽然这不是微不足道的,但你可以做一些可以让生活变得更轻松的设计决定。例如,取消适配器并保持单个架构,以便从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架构基本上由以下元素组成。