public async Task <DialogTurnResult> FinishOnboardingDialog(WaterfallStepContext sc, CancellationToken cancellationToken)
        {
            _state = await _accessor.GetAsync(sc.Context);

            _state.Location = (string)sc.Result;

            await _responder.ReplyWith(sc.Context, OnboardingResponses._haveLocation, new { _state.CustomerName, _state.Location });

            return(await sc.EndDialogAsync());
        }
        public async Task <DialogTurnResult> AskForName(WaterfallStepContext sc, CancellationToken cancellationToken)
        {
            _state = await _accessor.GetAsync(sc.Context);

            if (!string.IsNullOrEmpty(_state.CustomerName))
            {
                return(await sc.NextAsync(_state.CustomerName));
            }
            else
            {
                return(await sc.PromptAsync(NamePrompt, new PromptOptions()
                {
                    Prompt = await _responder.RenderTemplate(sc.Context, "en", OnboardingResponses._namePrompt),
                }));
            }
        }
        public async Task <DialogTurnResult> AskForEmail(WaterfallStepContext sc, CancellationToken cancellationToken)
        {
            _state = await _accessor.GetAsync(sc.Context);

            var name = _state.CustomerName = (string)sc.Result;

            await _responder.ReplyWith(sc.Context, OnboardingResponses._haveName, new { name });

            if (!string.IsNullOrEmpty(_state.Email))
            {
                return(await sc.NextAsync(_state.Email));
            }
            else
            {
                return(await sc.PromptAsync(EmailPrompt, new PromptOptions()
                {
                    Prompt = await _responder.RenderTemplate(sc.Context, "en", OnboardingResponses._emailPrompt),
                }));
            }
        }