首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

创建一个全功能的聊天机器人项目模板

需要说明的是,之前文章介绍的虽然是一个很简单的聊天机器人,但是它的应用场景不简单。它已经可以很好的满足很多场景下的聊天需求了,您需要需要做的仅仅是在里添加更多或者集成的服务,用于满足更多场景:例如在的的事件里添加更多的命令,保存每个用户的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, 至此我们已经创建了一个全功能的模板,后面几个章节都会以这个项目作为模板持续开发。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20221024A00LFM00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券