聊天机器人(Bot)可谓时下较为火热的话题之一,为了追赶一下潮流,本文将简要介绍一下如何利用Microsoft Bot Framework实现一个基于Microsoft Teams的聊天机器人。本文的示例代码使用.Net Framework 4.6.1、Microsoft.Bot.Builder 4.11.1以及Microsoft.Bot.Builder.Integration.AspNet.Web 4.11.1。
首先我们需要在Azure Bot Service上注册一个Bot,并上传至Teams应用商店。注册Bot主要有两种常用地方式。其一,在Azure网站上通过Bot Services创建一个Bot Channel Registration,并记录下其App ID和密码;进入所创建的Bot Channel Registration资源页面设置webhook、display name等,并开通Teams频道;登录Teams并利用App Studio提供的Manifest Editor创建一个Bot的应用程序包,在设置Bot时选择“已存在的Bot”并填入前一步创建的Bot Channel Registration的App ID。其二,直接Manifest Editor注册一个Bot。注册并配置好Bot之后,即可下载创建好的软件包,并上传至Teams应用商店。
为了能够接收到用户主动发送给Bot的消息,我们需要创建一个Web API服务作为Bot的webhook。那么,每当用户向我们的Bot发送消息时,Bot Service变化将该消息转发给我们的webhook,以便进行相应的处理。具体实现,可以参考Bot_Framework_Demo。
当对话(Conversation)由用户主动发起时,webhook接收到该消息时会得到一个ITurnContext对象,我们可以利用该对象以Bot的身份直接回复该消息,如:
await turnContext.SendActivityAsync(MessageFactory.Text("Hello"), cancellationToken);
当需要Bot主动发起对话时,我们首先需要创建一个ConnectorClient来建立Bot与Teams服务直接的连接,如:
private ConnectorClient createConnectorClient(string appId, string password)
{
var credential = new MicrosoftAppCredentials(appId, password);
AppCredentials.TrustServiceUrl(_serviceUrl); // For Teams, serviceUrl differs from region to region
return new ConnectorClient(new Uri(_serviceUrl), credential);
}
再利用获得的ConnectorClient实例来主动发送消息,详情请参考自动程序主动消息传递。