建站软件免费版下载搜索引擎优化排名案例
建站软件免费版下载,搜索引擎优化排名案例,wordpress user role editor,建网站无锡上篇文章介绍了什么是Activity#xff0c;Turn#xff0c;TurnContext和BotAdapter#xff0c;这篇文章我们看看这些东西是如何窜起来的#xff0c;他们是如何处理用户发给bot的消息的。
我们以一个最简单的bot#xff0c;echo bot为例子#xff0c;所谓的echo bot就是用…上篇文章介绍了什么是ActivityTurnTurnContext和BotAdapter这篇文章我们看看这些东西是如何窜起来的他们是如何处理用户发给bot的消息的。
我们以一个最简单的botecho bot为例子所谓的echo bot就是用户发什么消息它就照样回复一条消息。为了简单起见大家可以先安装VS2019的一个扩展插件BotBuilderVSIX.vsix template然后创建一个NET core 3.1的Echo bot。 可以看到这个模板为什么创建了一个项目我们先到Startup.cs看一下
// Create the Bot Framework Adapter with error handling enabled.
services.AddSingletonIBotFrameworkHttpAdapter, AdapterWithErrorHandler();// Create the bot as a transient. In this case the ASP Controller is expecting an IBot.
services.AddTransientIBot, EchoBot();可以看到DI了两个类值得注意的是AdapterWithErrorHandler使用的是Singleton而EchoBot使用的是Transient如果大家不同模板来生成的话这两个千万不能写错不然会出意想不到的错误而且非常难查。
打开AdapterWithErrorHandler.cs文件可以看到它从BotFrameworkHttpAdapter继承下来。主要是提供了一些针对异常错误的处理
public class AdapterWithErrorHandler : BotFrameworkHttpAdapter
{public AdapterWithErrorHandler(IConfiguration configuration, ILoggerBotFrameworkHttpAdapter logger): base(configuration, logger){OnTurnError async (turnContext, exception) {...};}
}从bot sdk的源代码里我可以知道 BotFrameworkHttpAdapter 一层层往上最终到达 BotAdapter
public class BotFrameworkHttpAdapter : BotFrameworkHttpAdapterBase, IBotFrameworkHttpAdapter
{...
}public class BotFrameworkHttpAdapterBase : BotFrameworkAdapter, IStreamingActivityProcessor
{...
}public class BotFrameworkAdapter : BotAdapter, IAdapterIntegration, IExtendedUserTokenProvider, IConnectorClientBuilder
{...
}public abstract class BotAdapter
{...
}现在我们结合下面这张图来理解整个的处理过程。 可以看到当用户发了一条文字消息 “Hi”这个消息被发到我们bot服务的时候我们调用Adapter的ProcessActivity方法。我们在BotController.cs可以看到这个。
[Route(api/messages)]
public class BotController : ControllerBase
{private readonly IBotFrameworkHttpAdapter Adapter;private readonly IBot Bot;public BotController(IBotFrameworkHttpAdapter adapter, IBot bot){Adapter adapter;Bot bot;}[HttpPost, HttpGet]public async Task PostAsync(){await Adapter.ProcessAsync(Request, Response, Bot);}
}Adapter创建TurnContext后调用bot上的OnTurn方法但是生成的Echo bot里并看不到OnTurn方法我们先看一下EchoBot.cs
public class EchoBot : ActivityHandler
{protected override async Task OnMessageActivityAsync(ITurnContextIMessageActivity turnContext, CancellationToken cancellationToken){var replyText $Echo: {turnContext.Activity.Text};await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);}
}可以看到我们的EchoBot从ActivityHandler继承下来我们查看一下SDK的源代码可以发现
public class ActivityHandler : IBot
{public virtual async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken default(CancellationToken)){switch (turnContext.Activity.Type){case ActivityTypes.Message:await OnMessageActivityAsync(new DelegatingTurnContextIMessageActivity(turnContext), cancellationToken).ConfigureAwait(false);break;...}}protected virtual Task OnMessageActivityAsync(ITurnContextIMessageActivity turnContext, CancellationToken cancellationToken){return Task.CompletedTask;}...
}从上面sdk的源代码就可以发现adapter调用了EchoBot的父类ActivityHandler的OnTurnAsync()方法后者根据Activity的Type来调用到了EchoBot的OnMessageActivityAsync。
当我们在EchoBot里调用SendActivityAsync()回复一条消息会由Adapter来调用Azure Bot Service。
大家可以在 微软botbuilder-dotnet repo 里找到上面的源代码。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90111.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!