public async Task OnTurn(ITurnContext context) { //TODO: is this the right way to handle cards? string utterance = context.Activity.Text; JObject cardData = (JObject)context.Activity.Value; if (cardData != null && cardData.Property("intent") != null) { utterance = cardData["utterance"].ToString(); } System.Threading.CancellationToken ct; var userState = context.GetUserState <CafeBotUserState>(); var conversationState = context.GetConversationState <CafeBotConvState>(); switch (context.Activity.Type) { case ActivityTypes.ConversationUpdate: var newUserName = context.Activity.MembersAdded[0].Name; if (!string.IsNullOrWhiteSpace(newUserName) && newUserName != "Bot") { await context.SendActivity($"Hello {newUserName}! I'm the Cafe bot!"); // remember the user's name userState.name = newUserName; userState.sendCards = true; await context.SendActivity("I can help you find contoso cafe locations, book a table and answer questions about Contoso cafe!"); // send a welcome card if (userState.sendCards) { await context.SendActivity(CreateCardResponse(context.Activity, createWelcomeCardAttachment())); } } break; case ActivityTypes.Message: // create dialogContext DialogContext dc = _dialogs.CreateContext(context, conversationState); if (utterance == "start over") { //restart the conversation await context.SendActivity("Sure.. Let's start over"); dc.EndAll(); } else { // continue with any active dialogs await dc.Continue(); } if (!context.Responded) { // call LUIS and get results LuisRecognizer lRecognizer = createLUISRecognizer(); cafeLUISModel lResult = await lRecognizer.Recognize <cafeLUISModel>(utterance, ct); // top level dispatch switch (lResult.TopIntent().intent) { case cafeLUISModel.Intent.Greeting: //case "hi": await context.SendActivity("Hello, I'm the contoso cafe bot. How can I help you?"); if (userState.sendCards) { await context.SendActivity(CreateCardResponse(context.Activity, createWelcomeCardAttachment())); } break; case cafeLUISModel.Intent.Book_Table: // case "book table": // await context.SendActivity("I'm still learning to book a table!"); await dc.Begin("BookTable"); break; case cafeLUISModel.Intent.Who_are_you_intent: // case "who are you?": // await context.SendActivity("I'm the cafe bot!"); await dc.Begin("WhoAreYou"); break; case cafeLUISModel.Intent.None: default: await getQnAResult(context); break; } } break; } }