Oliver Cafe Shop聊天机器人实现源码

下面要实现一个咖啡店的自助机器人,包括两个简单的小功能,一个是欢迎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来进行复杂的机器人操作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值