Introduction
The Bot Framework supports different types of rich cards and provides a richer interaction experience to the users. In this article, I will show how to integrate Hero Card UI design in a Bot application. The Hero card is a multipurpose card and contains an image, title text, subtext, multiple buttons, and a card tap action.
Prerequisite
I have explained about Bot framework installation, deployment, and implementation in the below articles.
- Getting Started with Chatbot Using Azure Bot Service
- Getting Started with Bots Using Visual Studio 2017
- Deploying A Bot to Azure Using Visual Studio 2017
- How to Create ChatBot In Xamarin
- Getting Started with Dialog Using Microsoft Bot Framework
- Getting Started with Prompt Dialog Using Microsoft Bot Framework
- Getting Started With Conversational Forms And FormFlow Using Microsoft Bot Framework
- Getting Started With Customizing A FormFlow Using Microsoft Bot Framework
- Sending Bot Reply Message With Attachment Using Bot Framework
Create New Bot Application
Let's create a new bot application using Visual Studio 2017. Open Visual Studio. Go to File > New Project (Ctrl + Shift +N) > Bot application.
The Bot application template gets created with all the components and all required NuGet references installed in the solution.
Create a new HeroCardDialog class
Step 1
You can create a new HeroCardDialog class to show the HeroCard dialog. Right-click on Project > select Add New Item > create a class that is marked with the [Serializable] attribute (so that the dialog can be serialized to state) and implement the IDialog interface.
- using Microsoft.Bot.Builder.Dialogs;
- using Microsoft.Bot.Connector;
- using System;
- using System.Collections.Generic;
- using System.Threading.Tasks;
-
- namespace BotHeroCard.Dialogs
- {
- [Serializable]
- public class HeroCardDialog : IDialog<object>
- {
Step 2
IDialog interface has only StartAsync() method. StartAsync() is called when the dialog becomes active. The method has passed the IDialogContext object that is used to manage the conversation.
- public async Task StartAsync(IDialogContext context)
- {
- context.Wait(this.MessageReceivedAsync);
- }
Step 3
Create a MessageReceivedAsync method and write the following code for the welcome message and show the list of demo options dialog.
-
-
-
-
-
-
- public async virtual Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
- {
- var message = await result;
- var welcomeMessage = context.MakeMessage();
- welcomeMessage.Text = "Welcome to bot Hero Card Demo";
-
- await context.PostAsync(welcomeMessage);
-
- await this.DisplayHeroCard(context);
- }
-
-
-
-
-
- public async Task DisplayHeroCard(IDialogContext context)
- {
-
- var replyMessage = context.MakeMessage();
- Attachment attachment = GetProfileHeroCard(); ;
- replyMessage.Attachments = new List<Attachment> { attachment };
- await context.PostAsync(replyMessage);
- }
After the user enters the first message, the bot will reply with a welcome message, like below.
Step 4 Design Hero Card
The Hero Card typically contains a large image, one or more buttons, and text. Hero Card class has the following properties.
- Title - Title text of the card
- Subtitle -subtitle text for the title
- Text – Summary text to display on the card
- Images – Display large image
- Buttons - One or more buttons. The Skype allows only 5 buttons to display on a card. If you have more buttons, you can create two cards.
- Tap - An action that is triggered when a user taps on the card.
The following code is used for showing the design to the user profile message with image, text, subtext, and action button.
- private static Attachment GetProfileHeroCard()
- {
- var heroCard = new HeroCard
- {
-
- Title = "Suthahar Jegatheesan",
-
- Subtitle = "Microsoft certified solution developer",
-
- Tap = new CardAction(ActionTypes.OpenUrl, "Learn More", value: "http://www.devenvexe.com"),
-
- Text = "Suthahar J is a Technical Lead and C# Corner MVP. He has extensive 10+ years of experience working on different technologies, mostly in Microsoft space. His focus areas are Xamarin Cross Mobile Development ,UWP, SharePoint, Azure,Windows Mobile , Web , AI and Architecture. He writes about technology at his popular blog http://devenvexe.com",
-
- Images = new List<CardImage> { new CardImage("http://csharpcorner.mindcrackerinc.netdna-cdn.com/UploadFile/AuthorImage/jssuthahar20170821011237.jpg") },
-
- Buttons = new List<CardAction> { new CardAction(ActionTypes.OpenUrl, "Learn More", value: "http://www.devenvexe.com") , new CardAction(ActionTypes.OpenUrl, "C# Corner", value: "http://www.c-sharpcorner.com/members/suthahar-j"), new CardAction(ActionTypes.OpenUrl, "MSDN", value: "https://social.msdn.microsoft.com/profile/j%20suthahar/") }
- };
-
- return heroCard.ToAttachment();
- }
The above code will generate a Hero Card and reply to the user.
Run Bot Application
The emulator is a desktop application that lets us test and debug our bot on localhost. Now, you can click on "Run the application" in Visual Studio and execute in the browser.
Test application on Bot Emulator
You can follow the below steps to test your bot application.
- Open Bot Emulator.
- Copy the above localhost URL and paste it in the emulator, e.g., - http://localHost:3979
- Append the /api/messages in the above URL; e.g. - http://localHost:3979/api/messages.
- You won't need to specify Microsoft App ID and Microsoft App Password for localhost testing. So, click on "Connect".
Summary
In this article, you learned how to create a Bot application using Visual Studio 2017 and create Hero Card design using it. If you have any questions/feedback/issues, please write in the comment box.