max*_*max 3 c# bots botframework
我们有一个客户端要求,Bot应用程序应该托管在本地,所有的Web聊天通信都直接进入Web服务器.我打算开发一个Bot .Net应用程序并配置网络聊天频道.我想知道是否可以在本地配置Bot应用程序
如果我使用网络聊天,客户端数据是如何安全的以及机器人服务如何将请求路由到Webapp.
好.所以让我们分解问题吧.
您要做的是将您的bot与其与Microsoft Bot Connector/Framework的任何和所有通信隔离开来.
首先要了解Microsoft Bot Framework Ecosystem中涉及的组件.
通常,vanilla bot会与3个Microsoft服务进行交互 -
现在要创建一个内部部署机器人,您需要替换/模拟所有上述组件.幸运的是,Bot Builder SDK是开源的,设计精良.与上述服务交互的实现是界面驱动的并且易于改变.
由于我们的目标是不使用任何Microsoft服务,因此我们不需要MSA服务器来生成令牌.所以不需要机器人注册.
最容易取代的服务是Bot State Service.您需要做的就是实现IBotDataStore或IBotState接口.因此,您可以将其存储到您自己的Redis数据库中,而不是将状态存储在Bot State Service中.我写了一篇关于如何做到这一点的博客文章.
现在还剩下什么来取代Bot Connector.这很棘手而且不直接.此外,它不是开源的,所以你在这里独自一人.如上所述,第一个重要的部分是频道适应.既然你提到你只需要网络聊天频道,那就没什么可适应的了(呃?!).它做的第二件重要事情是会话跟踪,它依赖于专门生成的不同ID,对话ID和活动ID.你必须明白它们代表什么.会话ID通常由Channel创建和修改.
您必须在此处选择如何创建会话ID.默认情况下,Web聊天具有临时会话ID.您可以选择使其更加永久(一种方法是要求用户登录并使用userid).
消息路由在Web聊天通道中的工作方式不同,因为没有一个特定的端点,Bot Connector必须调用(如Facebook Graph API).因此,Web Chat通道使用Direct Line API发送消息并轮询(或使用套接字)特定端点来接收消息.网络聊天频道是开源的,继续检查他们是如何做到的.
因此,要完全替换Bot Connector API,您需要创建自己的连接器服务
虽然这不是微不足道的,但你可以做一些可以让生活变得更轻松的设计决定.例如,取消适配器并保持单个架构,以便从Web聊天控制到机器人和后台进行通信(但随后您将需要更改Web Chat Channel代码).对于初学者来说,你甚至可以看BotFramework仿真器的代码,其模拟的直线API.
现在如何让您的机器人发送回复您自己的连接器服务?为此,您需要实现IBotToUser接口.这很容易做到.看看我的回购,我将回复Skype For Business客户端而不是Bot Connector.
这是我相信的.如果你能完成上述工作,你可以拥有一个完全隔离的机器人,而不与云连接.为了安全起见,您可能拥有自己的OAuth提供程序(我推荐IdentityServer)或在使用bot之前让用户登录.除非我更详细地了解您的应用程序生态系统和用例,否则我无法回答安全细节.
会话数据(和状态)可以非常容易地存储在您的内部部署数据库中.在我看来,如果您可以继续使用Bot Connector并且只替换Bot状态服务,那将是最好的(您还可以继续从Bot Framework接收新功能而无需更改任何代码).
以上所有信息均来自我自己使用Bot Framework的经验.如果有人有更好的建议,请随时分享,我会进行编辑.