示例#1
0
        /// <summary>
        /// Execution for the <see cref="GetWeatherForecastDialog"/> starts here.
        /// </summary>
        /// <param name="context">Mandatory. The context for the execution of a dialog's conversational process.</param>
        public async Task StartAsync(IDialogContext context)
        {
            string cityName    = _messageHelpers.ExtractEntityFromMessage("City.Name", _entities);
            string countryCode = _messageHelpers.ExtractEntityFromMessage("City.CountryCode", _entities, TextCaseType.UpperCase);
            string countryName = _messageHelpers.ExtractEntityFromMessage("City.CountryName", _entities);

            City preferredCity = _botDataService.GetPreferredWeatherLocation(context);

            if (string.IsNullOrEmpty(cityName))
            {
                if (preferredCity?.Name == null)
                {
                    PromptDialog.Text(context, ResumeAfterSpecifyCityNamePrompt, "What's the name of the city you want the forecast for?",
                                      "I can't understand you. Tell me the name of the city you want the forecast for");
                }
                else
                {
                    var weatherForecast = await _weatherService.GetWeather(preferredCity);

                    context.Done(weatherForecast != null
                            ? $"Currently the weather in {preferredCity.Name} is {weatherForecast}"
                            : "🤧⛅ - I'm having trouble accessing weather reports. We'll have to try again later!");
                }
            }
            else
            {
                IList <City> citySearchResults = await _weatherService.SearchForCities(cityName, countryCode, countryName);
                await ResumeAfterCitySearch(context, cityName, citySearchResults);
            }
        }
示例#2
0
        /// <summary>
        /// Execution for the <see cref="NameDialog"/> starts here.
        /// </summary>
        /// <param name="context">Mandatory. The context for the execution of a dialog's conversational process.</param>
        public Task StartAsync(IDialogContext context)
        {
            if (_entities != null)
            {
                _preferredName = _messageHelpers.ExtractEntityFromMessage("User.PreferredName", _entities);
            }

            string name = _botDataService.GetPreferredName(context);

            if (!string.IsNullOrWhiteSpace(_preferredName))
            {
                PromptDialog.Confirm(context, ResumeAfterPreferredNameConfirmation,
                                     $"So you'd like me to call you {_preferredName}?", $"Sorry I don't understand - try again! Should I call you {_preferredName}?");
                return(Task.CompletedTask);
            }

            if (!string.IsNullOrWhiteSpace(name))
            {
                PromptDialog.Confirm(context, ResumeAfterConfirmation,
                                     $"Do you want me to keep calling you {name}?", $"Sorry I don't understand - try again! Should I call you {name}?");
                return(Task.CompletedTask);
            }

            PromptDialog.Text(context, ResumeAfterNameFilled,
                              "What is your name?", "Sorry I didn't get that - try again! What should I call you?");
            return(Task.CompletedTask);
        }
        /// <summary>
        /// Execution for the <see cref="DeleteUserDataDialog"/> starts here.
        /// </summary>
        /// <param name="context">Mandatory. The context for the execution of a dialog's conversational process.</param>
        public Task StartAsync(IDialogContext context)
        {
            string command = _messageHelpers.ExtractEntityFromMessage("Bot.Command", _entities) ?? string.Empty;

            if (command.Replace(" ", string.Empty) == "--Quick")
            {
                _botDataService.DeleteUserData(context);

                context.Done("Buddy restored to factory defaults.");
                return(Task.CompletedTask);
            }


            PromptDialog.Confirm(context, ResumeAfterConfirmation, $"Would you like to delete your user data?", $"Would you like to delete your user data");
            return(Task.CompletedTask);
        }
        /// <summary>
        /// Execution for the <see cref="PreferredWeatherLocationDialog"/> starts here.
        /// </summary>
        /// <param name="context">Mandatory. The context for the execution of a dialog's conversational process.</param>
        public Task StartAsync(IDialogContext context)
        {
            City savedPreferredCity = _botDataService.GetPreferredWeatherLocation(context);

            if (_entities != null)
            {
                _extractedCityFromMessage = _messageHelpers.ExtractEntityFromMessage("City.Name", _entities);
            }

            if (!string.IsNullOrWhiteSpace(_extractedCityFromMessage))
            {
                PromptDialog.Confirm(context, ResumeAfterPreferredCityConfirmation, $"So you'd like to change your preferred weather location to {_extractedCityFromMessage}?", $"Sorry I don't understand - try again! So you'd like to change your preferred weather location to {_extractedCityFromMessage}");
                return(Task.CompletedTask);
            }

            if (savedPreferredCity != null)
            {
                PromptDialog.Confirm(context, ResumeAfterConfirmation, $"Your saved weather location is {savedPreferredCity.Name}, {savedPreferredCity.Country}, would you like to change it?", $"Sorry I don't understand - try again! Would you like to change your preferred weather location?");
                return(Task.CompletedTask);
            }

            PromptDialog.Text(context, ResumeAfterPromptForPreferredLocation, "What's the name of your preferred weather location?", "Sorry I didn't get that - try again! What's the name of your preferred weather location?");
            return(Task.CompletedTask);
        }
        /// <summary>
        /// Execution for the <see cref="BotPersonaDialog"/> starts here.
        /// </summary>
        /// <param name="context">Mandatory. The context for the execution of a dialog's conversational process.</param>
        public Task StartAsync(IDialogContext context)
        {
            /**
             * ----------------------------------------------------
             *  Order of Dialog Flow:
             * ----------------------------------------------------
             *
             * - Check if there is hero card selection, if yes,
             *   confirm and finish.
             *
             * - Check if dialog has entities, extract, confirm and
             *   finish.
             *
             * - Check if user has pre-saved persona, prompt to
             *   update, if yes,prompt options, confirm and finish.
             *
             * - Else, prompt user for option, confirm and finish.
             **/

            // Check if there is hero card selection
            if (_preferredBotPersona != PersonalityChatPersona.None)
            {
                PromptDialog.Confirm(context, ResumeAfterConfirmChosenPersona,
                                     $"So you'd like to set my personality as {_preferredBotPersona}?",
                                     $"Sorry I don't understand - try again! Should I set my personality to {_preferredBotPersona}?");

                return(Task.CompletedTask);
            }
            // Else we can assume LUIS called the dialog
            else
            {
                if (_entities.Count > 0 || _entities != null)
                {
                    Enum.TryParse(_messageHelper.ExtractEntityFromMessage("User.PreferredBotPersona", _entities),
                                  out PersonalityChatPersona parsedResult);

                    _preferredBotPersona = parsedResult;
                }
            }

            // Check If LUIS found entity preference, otherwise continue
            if (_preferredBotPersona != PersonalityChatPersona.None)
            {
                PromptDialog.Confirm(context, ResumeAfterConfirmChosenPersona,
                                     $"So you'd like me to change my personality to {_preferredBotPersona}?",
                                     $"Sorry I don't understand - try again! Should I change my personality to {_preferredBotPersona}?");

                return(Task.CompletedTask);
            }

            PersonalityChatPersona preSavedPersona = _botDataService.GetPreferredBotPersona(context);

            // Check if user has pre-saved persona, otherwise continue
            if (preSavedPersona != PersonalityChatPersona.None)
            {
                PromptDialog.Confirm(context, ResumeAfterUpdateConfirmation, $"My persona is set to {preSavedPersona}. Would you like to change it?",
                                     $"Sorry I don't understand - try again! Would you like to change my persona?");
                return(Task.CompletedTask);
            }

            // Could not determine preferred personality prompt user to choose
            PromptDialog.Choice(context, ResumeAfterPromptDialogChoice,
                                Enum.GetValues(typeof(PersonalityChatPersona))
                                .Cast <PersonalityChatPersona>()
                                .Where(p => p != PersonalityChatPersona.None),
                                "What would you like my personality to be?");

            return(Task.CompletedTask);
        }