需要说明的是,之前文章介绍的虽然是一个很简单的聊天机器人,但是它的应用场景不简单。它已经可以很好的满足很多场景下的聊天需求了,您需要需要做的仅仅是在里添加更多或者集成的服务,用于满足更多场景:例如在的的事件里添加更多的命令,保存每个用户的id和它和bot之间的,添加自然语言处理,或者问答系统。机器人的架构可以不用做任何更改,通过扩充和集成其他系统到事件处理方法里,就可以提升和增加它的处理能力了。
相比于上一节我们介绍的机器人,我们本章先创建一个功能更为全面的机器人模板,后面的文章逐渐完善下述功能:
给机器人会话添加上认证的功能。
给机器人的会话和用户添加状态跟踪的机制
使用卡片丰富的通讯。
使用系统丰富交互。
认证功能
实际上在我们中也集成了该功能,我们已经添加了必要的服务,但是并没有使用该功能,打开之前的项目可以在文件里观察到:
builder.Services.AddSingleton();
我们今天介绍,之后我们开始介绍如何使用认证功能。
创建一个项目
创建项目之前,我们还是需要满足一些前提条件:
然后我们使用工具开始创建项目:
在目录里创建类:
usingMicrosoft.Bot.Builder.Integration.AspNet.Core;
usingMicrosoft.Bot.Builder.TraceExtensions;
usingMicrosoft.Bot.Connector.Authentication;
usingMicrosoft.Extensions.Logging;
namespaceCoreBot.Adapters;
publicclassAdapterWithErrorHandler:CloudAdapter
{
publicAdapterWithErrorHandler(BotFrameworkAuthenticationauth,ILoggerlogger)
:base(auth, logger)
{
OnTurnError=async(turnContext, exception)=>
{
//向日志中记录来自Bot中的异常
logger.LogError(exception,$"[OnTurnError] unhandled error :");
// 发送消息通知用户有异常发生
awaitturnContext.SendActivityAsync("The bot encountered an error or bug.");
awaitturnContext.SendActivityAsync("To continue to run this bot, please fix the bot source code.");
//启用Activity trace, 如果使用模拟器调试可以看到详细的trace
awaitturnContext.TraceActivityAsync("OnTurnError Trace", exception.Message,"https://www.botframework.com/schemas/error","TurnError");
};
}
}
在目录里创建类::
usingSystem.Collections.Generic;
usingSystem.Threading;
usingSystem.Threading.Tasks;
usingMicrosoft.Bot.Builder;
usingMicrosoft.Bot.Schema;
namespaceCoreBot.Bots;
publicclassTestBot:ActivityHandler
{
protectedoverrideasyncTaskOnMessageActivityAsync(ITurnContextturnContext,CancellationTokencancellationToken)
{
varreplyText=$"Echo:";
awaitturnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
}
protectedoverrideasyncTaskOnMembersAddedAsync(IListmembersAdded,ITurnContextturnContext,CancellationTokencancellationToken)
{
varwelcomeText="Hello and welcome!";
foreach(varmemberinmembersAdded)
{
if(member.Id!=turnContext.Activity.Recipient.Id)
{
awaitturnContext.SendActivityAsync(MessageFactory.Text(welcomeText, welcomeText), cancellationToken);
}
}
}
}
在目录里添加:
usingSystem.Threading.Tasks;
usingMicrosoft.AspNetCore.Mvc;
usingMicrosoft.Bot.Builder;
usingMicrosoft.Bot.Builder.Integration.AspNet.Core;
namespaceCoreBot.Controllers;
[Route("api/messages")]
[ApiController]
publicclassBotController:ControllerBase
{
privatereadonlyIBotFrameworkHttpAdapter_adapter;
privatereadonlyIBot_bot;
publicBotController(IBotFrameworkHttpAdapteradapter,IBotbot)
{
_adapter=adapter;
_bot=bot;
}
[HttpPost,HttpGet]
publicasyncTaskPostAsync()
{
await_adapter.ProcessAsync(Request, Response, _bot);
}
}
至此程序的基本框架已经完成了,剩下的是我们需要开始配置了。
之所以要这个文件单独拿出来,是因为全功能的配置几乎都在这个文件里了,我们先看内容:
usingMicrosoft.Bot.Builder.Integration.AspNet.Core;
usingMicrosoft.Bot.Builder;
usingMicrosoft.Bot.Connector.Authentication;
usingCoreBot.Adapters;
usingCoreBot.Bots;
varbuilder=WebApplication.CreateBuilder(args);
builder.Services.AddControllers().AddNewtonsoftJson(
options=>
{
options.SerializerSettings.MaxDepth=HttpHelper.BotMessageSerializerSettings.MaxDepth;
});
builder.Services.AddHttpClient();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddTransient();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
varapp=builder.Build();
if(app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
对比之前简单的,我们会发现该项目中仅仅多了三行:
builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
您可以像之前的测试来测试一下这个Bot, 至此我们已经创建了一个全功能的模板,后面几个章节都会以这个项目作为模板持续开发。
领取专属 10元无门槛券
私享最新 技术干货