// TODO: Add LUIS for natural language processing
        private FreeTextResponse HandleResponse(DialogContext stepContext)
        {
            string utterance = stepContext.Context.Activity.Text; // What did they say?
            // TODO: add LUIS service to process free text responses
            // string intent = Luis.GetIntention(); // What did they mean?

            bool skipped = utterance.Equals("skip", StringComparison.OrdinalIgnoreCase);

            var feedbackResponse = new FreeTextResponse
            {
                Question = this.PromptText,
                Answer   = utterance,
                Score    = !skipped ? this.PointsAvailable : 0,
            };

            return(feedbackResponse);
        }
        private async Task <DialogTurnResult> SendResponseAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            UserProfile userProfile = await this.state.UserProfile.GetAsync(
                stepContext.Context,
                () => new UserProfile(),
                cancellationToken);

            userProfile.SurveyState.Progress = ProgressState.InProgress;

            FreeTextResponse feedbackResponse = this.HandleResponse(stepContext);

            userProfile.SurveyState.Responses.Add(feedbackResponse);

            await this.Responses.Create(
                stepContext.Context,
                userProfile.SurveyState,
                this.botSettings,
                this.features,
                cancellationToken);

            // Ask next question
            return(await stepContext.NextAsync(cancellationToken : cancellationToken));
        }