/// <summary>
        /// This is start of the Dialog and Prompting for User name
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task StartAsync(IDialogContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            isSms       = context.Activity.ChannelId == ActivityHelper.SmsChannelId;
            userProfile = await UserProfileHelper.GetUserProfile(context);

            minHoursToCompleteResearch = Convert.ToInt32(ConfigurationManager.AppSettings["ResearchProjectViaTeamsMinHours"]);

            //// This will Prompt for Name of the user.
            //var message = isSms ? BuildIntroMessageForSms(context) : BuildIntroMessageForTeams(context);
            //await context.PostWithRetryAsync(message);

            var minLength         = isSms ? 5 : 150;
            var maxLength         = 1000;
            var charLimitGuidance = $"I need a minimum of {minLength} characters and maximum of {maxLength} characters to process.";
            var promptDescription = new PromptText(
                "Okay, I'll find a human freelancer who can do the research for you. " +
                $"What would you like a freelancer to research? {(isSms ? "" : charLimitGuidance)}",
                charLimitGuidance + " Please try again.",
                "Sorry, I didn't understand that description. Please reply to start over again.",
                2, minLength, maxLength);

            context.Call(promptDescription, OnDescriptionReceivedAsync);
        }
        private async Task OnDeadlineSelected(IDialogContext context, IAwaitable <IEnumerable <DateTime> > deadlineResult)
        {
            if (deadlineResult == null)
            {
                throw new InvalidOperationException((nameof(deadlineResult)) + Strings.NullException);
            }

            DateTime targetDate = await ProcessUserResponseToDeadline(context, deadlineResult);

            try
            {
                // Store date
                context.ConversationData.SetValue(DeadlineKey, targetDate);

                var description = context.ConversationData.GetValue <string>(DescriptionKey);

                //IMessageActivity responseMessage = isSms
                //    ? BuildWhoWhatWhenSummaryMessageForSms(context,
                //        targetDate,
                //        description)
                //    : BuildWhoWhatWhenSummaryMessageForTeams(context,
                //        targetDate,
                //        description);

                //await context.PostWithRetryAsync(responseMessage);

                var promptAdditionalInfo = new PromptText(
                    "Okay, this is what I have so far.\n\n\n\n" +
                    $"Who: {userProfile.Alias}\n\n" +
                    $"What: {description}\n\n" +
                    $"When: {targetDate}\n\n\n\n" +
                    "Do you have anything else to add, before I submit this task to the freelancer, " +
                    "like success criteria, or formatting requests? You can also add hyperlinks if you like. \n\n\n\n" +
                    "Please say 'no' if you don't have anything else to add. You can clarify later if needed.",
                    "Please try sending additional info again.", "Error understanding additional info. Too many attempts.", 2, 0);

                context.Call(promptAdditionalInfo, OnAdditionalInfoReceivedAsync);
            }

            catch (System.Exception e)
            {
                WebApiConfig.TelemetryClient.TrackException(e, new Dictionary <string, string>
                {
                    { "dialog", "InternetResearchDialog" },
                    { "function", "OnDeadlineSelected" }
                });
                throw;
            }
        }