下面要实现一个咖啡店的自助机器人,包括两个简单的小功能,一个是欢迎card,另外就是drink type card
首先创建一个名EchoBot1的Empty Bot(参考上一篇Microsoft Bot Framework开发环境准备),然后在EchoBot1.cs中的public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))方法中添加如下代码,其中没有中间件的情况下,EchoBot1.cs可以当成程序的入口
switch (turnContext.Activity.Type)
{
case ActivityTypes.Message:
if (turnContext.Activity.Text == "Order")
{
await CreateDrinkTypeCardMessageAsync(turnContext);
}
break;
case ActivityTypes.ConversationUpdate:
if (turnContext.Activity.MembersAdded != null&& turnContext.Activity.Recipient.Id== turnContext.Activity.MembersAdded[0].Id)
{
await SendWelcomeMessageAsync(turnContext);
}
break;
default:
await turnContext.SendActivityAsync($"{turnContext.Activity.Type} has not support now.");
break;
}
await _accessors.ConversationState.SaveChangesAsync(turnContext);
ActivityTypes.ConversationUpdate是在刚启动bot的时候触发,添加bot和user的时候会触发两次,所以如果代码中判断没有turnContext.Activity.MembersAdded != null&& turnContext.Activity.Recipient.Id== turnContext.Activity.MembersAdded[0].Id就会出现bug,会展现两个welcome card,这行代码过滤掉机器人的添加引起的welcome card
private async Task SendWelcomeMessageAsync(ITurnContext turnContext)
{
var activity = turnContext.Activity.CreateReply();
activity.Attachments = new List<Attachment> { AdaptiveCardFactory.CreateWelcomeCard()};
await turnContext.SendActivityAsync(activity);
}
private async Task CreateDrinkTypeCardMessageAsync(ITurnContext turnContext)
{
var activity = turnContext.Activity.CreateReply();
activity.Attachments = new List<Attachment> { Helper.CreateAdaptiveCardAttachment(AdaptiveCardFactory.CreateDrinkTypeCard()};
await turnContext.SendActivityAsync(activity);
}
下面是AdaptiveCardFactory创建两个简单的card的实现,ActionTypes有三个枚举,其中ImBack会返回button按钮的value值
public static Attachment CreateWelcomeCard()
{
HeroCard welcomeCard = new HeroCard();
welcomeCard.Title = "Welcome to Oliver Cafe Shop.";
welcomeCard.Subtitle = "Please click 'Order' button to Order your drink";
welcomeCard.Buttons = new List<CardAction>()
{
new CardAction
{
Type = ActionTypes.ImBack,
Value = "Order",
Title = "Order"
},
};
return welcomeCard.ToAttachment();
}
public static Attachment CreateDrinkTypeCard()
{
HeroCard heroCard = new HeroCard();
heroCard.Title = "Welcome to Oliver Cafe Shop!";
heroCard.Subtitle = "Please click the type of drink you want.";
heroCard.Buttons = new List<CardAction>()
{
new CardAction
{
Type=ActionTypes.ImBack,
Value="Tea",
Title="Tea",
},
new CardAction
{
Type=ActionTypes.ImBack,
Value="Coffer",
Title="Coffer",
},
new CardAction
{
Type=ActionTypes.ImBack,
Value="Milk",
Title="Milk",
},
};
return heroCard.ToAttachment();
}
到这里就完成了一个简单的咖啡店点餐自助机器人,后面会利用Dialog来进行复杂的机器人操作