private string GetSuggestedActionsReplyText(IMessageActivity reply, string replyText)
        {
            int start = replyText.IndexOf("(");
            int end   = replyText.IndexOf(")") + 1;

            var suggestedActionSubString = replyText.Substring(start, end - start);

            int startActions = suggestedActionSubString.IndexOf("'") + 1;
            int endActions   = suggestedActionSubString.LastIndexOf("'");

            var suggestedActions = suggestedActionSubString.Substring(startActions, endActions - startActions).Split("/");

            reply.SuggestedActions = AdaptiveCards.CreateSuggestedAction(suggestedActions);
            return(replyText.Replace(suggestedActionSubString, ""));
        }
        private async Task HandleConversation(ITurnContext turnContext, CancellationToken cancellationToken)
        {
            var text = turnContext.Activity.Text;
            IMessageActivity reply = Activity.CreateMessageActivity();

            // Handle conversation scenarios
            if (conversation.ConversationDictionary.ContainsKey(text))
            {
                var replyText = conversation.ConversationDictionary[text];
                if (replyText.Contains("Adaptive Card"))
                {
                    replyText = await GetAdaptiveCardsReplyText(reply, replyText, turnContext, cancellationToken);
                }
                if (replyText.Contains("Suggested Action"))
                {
                    replyText = GetSuggestedActionsReplyText(reply, replyText);
                }
                reply.Text = replyText;
            }
            else
            {
                switch (text.ToLower())
                {
                case "microsoft store":
                case "adaptive card":
                    // Display an Adaptive Card for Microsoft Store
                    reply.Attachments.Add(AdaptiveCards.CreateAdaptiveCardAttachment("store.json"));
                    break;

                case "microsoft article":
                    // Display an Adaptive Card for support article
                    reply.Attachments.Add(AdaptiveCards.CreateAdaptiveCardAttachment("article.json"));
                    break;

                case "suggested action":
                    reply.SuggestedActions = AdaptiveCards.CreateSuggestedAction(new string[] { "10am", "1pm", "3pm" });
                    break;

                default:
                    reply.Text = $"I am sorry, I cannot help you with\n'{text}'\n\n If you would like me to transfer you to a customer service agent please type 'Talk to agent'";
                    break;
                }
            }

            await turnContext.SendActivityAsync(reply, cancellationToken);
        }
        private async Task <string> GetAdaptiveCardsReplyText(IMessageActivity reply, string replyText, ITurnContext turnContext, CancellationToken cancellationToken)
        {
            int start = replyText.IndexOf("(");
            int end   = replyText.IndexOf(")") + 1;

            var adaptiveCardSubString = replyText.Substring(start, end - start);

            int cardNameStart = adaptiveCardSubString.IndexOf("'") + 1;
            int cardNameEnd   = adaptiveCardSubString.LastIndexOf("'");
            var adaptiveCard  = adaptiveCardSubString.Substring(cardNameStart, cardNameEnd - cardNameStart);

            reply.Attachments.Add(AdaptiveCards.CreateAdaptiveCardAttachment(adaptiveCard));
            reply.Text = replyText.Replace(adaptiveCardSubString, "");

            await turnContext.SendActivityAsync(reply, cancellationToken);

            // Follow up action or reply to sending adaptive card
            reply.Attachments.Clear();
            return(conversation.ConversationDictionary[adaptiveCard]);
        }
        async Task ButtonClicked(AdaptiveCards cardType)
        {
            string cardJson = null;

            switch (cardType)
            {
            case AdaptiveCards.FlightItenerary:
                cardJson = await GetCardJson(AppConfig.FLIGHT_ITENERARY_URL);

                break;

            case AdaptiveCards.FoodOrder:
                cardJson = await GetCardJson(AppConfig.FOOD_ORDER_URL);

                break;
            }
            if (!string.IsNullOrWhiteSpace(cardJson))
            {
                _adaptiveCardsService.DisplayCard(cardJson);
            }
        }