现在假设您已经有了一个聊天机器人的项目了,使用打开你的项目之后,如下图:
这个项目已经可以单独的运行了,并且会返回用户的输入。
我们先来学习我们怎么样才可以接收和发送消息。
的事件驱动
我们之前的文章讨论了一个应用实际参与的几个组件。
物理组件:
:就是一个物理的应用,例如微信,
: 用于和相连,转发消息到
运行的资源。
逻辑组件:
一个消息的流入路径是:用户 -> -> -> ->
应用的编程主要就是集中在上。
这个组件的实际表现为类中定义的一个方法:
publicoverrideasyncTaskOnTurnAsync(ITurnContextturnContext,CancellationTokencancellationToken=default(CancellationToken))
{
awaitbase.OnTurnAsync(turnContext, cancellationToken);
}
我们可以在这个方法里对传入或者传出的进行存取和访问。
我们虽然可以仅仅在应用只访问这一个方法,但是为了编程的方便,定义了很多的类型,每一个到达之后,会根据类型再次调用对应的类型方法,例如:
, , 方法等等。如果要参考有哪些预定义的类型,您可以参考:
https://github.com/Microsoft/botframework-sdk/blob/main/specs/botframework-activity/botframework-activity.md
我们默认创建的模板,仅仅是将用户输入的消息,原封不动的返回了,我们多加一些代码,当用户开始和机器人聊天时,发送一个有趣的欢迎短句:
我们打开文件, 将方法 更改为如下的方法:
protectedoverrideasyncTaskOnMembersAddedAsync(IListmembersAdded,ITurnContextturnContext,CancellationTokencancellationToken)
{
varwelcomeText="Hello and welcome!";
foreach(varmemberinmembersAdded)
{
if(member.Id!=turnContext.Activity.Recipient.Id)
{
varcard=newHeroCard
{
Text="Hello and welcome! please choose a Menu",
Buttons=newList
{
newCardAction(ActionTypes.ImBack, title:"1. Dinner",value:"1"),
newCardAction(ActionTypes.ImBack, title:"2. Gift",value:"2"),
newCardAction(ActionTypes.ImBack, title:"3. Vacation",value:"3"),
},
};
varreply=MessageFactory.Attachment(card.ToAttachment());
awaitturnContext.SendActivityAsync(reply, cancellationToken);
}
}
}
然后在命令行里运行该, 并使用来测试,测试结果如下:
领取专属 10元无门槛券
私享最新 技术干货