我们有一个客户端要求,Bot应用程序应该托管在本地,所有的Web聊天通信都直接进入Web服务器.我打算开发一个Bot .Net应用程序并配置网络聊天频道.我想知道是否可以在本地配置Bot应用程序 >如何在本地设置Web聊天? 如果我使用网络聊天,客户端数据是如何安全的以及机器人服务如何将请求路由到Webapp. 解决方法: 好.所以让我们分解问题吧. 首先要了解Microsoft Bot Framework Ecosystem中涉及的组件. 了解Bot框架生态系统 通常,vanilla bot会与3个Microsoft服务进行交互 – > Microsoft Bot Connector:这家伙是Bot Framework的核心.它具有关键的工作(除了其他不重要的事情(安全!))的消息路由,会话跟踪和信道适配. 现在要创建一个内部部署机器人,您需要替换/模拟所有上述组件.幸运的是,Bot Builder SDK是开源的,设计精良.与上述服务交互的实现是界面驱动的并且易于改变. 了解和修改Bot Builder SDK以创建内部部署机器人 由于我们的目标是不使用任何Microsoft服务,因此我们不需要MSA服务器来生成令牌.所以不需要机器人注册. 最容易取代的服务是Bot State Service.您需要做的就是实现IBotDataStore或IBotState接口.因此,您可以将其存储到您自己的Redis数据库中,而不是将状态存储在Bot State Service中.我写了一篇关于如何做到这一点的blog post. 现在还剩下什么来取代Bot Connector.这很棘手而且不直接.此外,它不是开源的,所以你在这里独自一人.如上所述,第一个重要的部分是频道适应.既然你提到你只需要网络聊天频道,那就没什么可适应的了(呃?!).它做的第二件重要事情是会话跟踪,它依赖于专门生成的不同ID,对话ID和活动ID.你必须understand他们所代表的.会话ID通常由Channel创建和修改. 您必须在此处选择如何创建会话ID.默认情况下,Web聊天具有临时会话ID.您可以选择使其更加永久(一种方法是要求用户登录并使用userid). 消息路由在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的经验.如果有人有更好的建议,请随时分享,我会进行编辑. 来源:https://www./content-1-343851.html |
|