public void Call <R>(IDialog <R> child, ResumeAfter <R> resume)
        {
            if (child is EditablePromptChoice <string> p)
            {
                var language = _translatorService.GetLanguage(_original);

                if (string.IsNullOrWhiteSpace(language))
                {
                    _original.Call <R>(child, resume);
                    return;
                }

                var optOld = p.PromptOptions;

                var prompt = AsyncHelpers.RunSync(() => _translatorService.Translate(optOld.Prompt, "en", language));
                var retry  = AsyncHelpers.RunSync(() => _translatorService.Translate(optOld.Retry, "en", language));

                var optNew = new PromptOptions <string>(prompt, retry, optOld.TooManyAttempts, optOld.Options, optOld.Attempts, optOld.PromptStyler, optOld.Descriptions);

                var newDialog = new PromptDialog.PromptChoice <string>(optNew);
                _original.Call <string>(newDialog, resume as ResumeAfter <string>);

                return;
            }
            _original.Call <R>(child, resume);
        }
Exemple #2
0
        private async Task OnStockitemNameReceivedAsync(IDialogContext context, IAwaitable <string> result)
        {
            var stockitemName = await result;

            // send typing message
            var typingMessage = context.MakeMessage();

            typingMessage.Type = ActivityTypes.Typing;

            await context.PostAsync(typingMessage);

            await Task.Delay(3000);

            // get results
            var dataManager = new DataManager();
            var stockItems  = await dataManager.GetStockitemsAsync(stockitemName);

            if (stockItems.Count == 0)
            {
                var dialog = new PromptDialog.PromptString("Sorry, we didn't find this article. What is its name?", "Sorry. What product did you mean?", 3);

                context.Call(dialog, OnStockitemNameReceivedAsync);
            }
            else if (stockItems.Count == 1)
            {
                await SendOrderConfirmationAsync(context, stockItems.First());
            }
            else
            {
                var dialog = new PromptDialog.PromptChoice <Stockitem>(stockItems, "Please select your product.", "Please select.", 3);

                context.Call(dialog, OnStockItemReceivedAsync);
            }
        }
Exemple #3
0
        public async Task StartAsync(IDialogContext context)
        {
            //PromptDialog.Choice(
            //  context,
            //  AfterChoiceSelected,
            //  await GetValidOptions(context),
            //  Constants.Responses.ICanHelpWith,
            //  Constants.Responses.DontUnderstand + " Please choose one of the options below.",
            //  attempts: Constants.Misc.DialogAttempts);

            var options = await GetValidOptions(context);

            var descriptions = new List <string>();
            int index        = 1;

            foreach (var option in options)
            {
                descriptions.Add($"{index++}: {option}");
            }

            var choose = new PromptDialog.PromptChoice <string>(
                await GetValidOptions(context),
                Constants.Responses.ICanHelpWith,
                Constants.Responses.DidntUnderstand + Constants.Responses.PleaseChooseAnOption,
                Constants.Misc.DialogAttempts,
                promptStyle: PromptStyle.Auto,
                descriptions: descriptions
                );

            context.Call <string>(choose, AfterChoiceSelected);
        }
        public async Task AcaoIntent(IDialogContext context, LuisResult result)
        {
            var subscription = ObterSubscription(context);

            if (string.IsNullOrEmpty(subscription))
            {
                return;
            }

            var applicationId = ObterApplicationId(context);

            if (string.IsNullOrEmpty(applicationId))
            {
                return;
            }

            var secretKey = ObterSecretKey(context);

            if (string.IsNullOrEmpty(secretKey))
            {
                return;
            }

            var activity    = context.Activity;
            var stateClient = activity.GetStateClient();
            var userData    = stateClient.BotState.GetUserData(activity.ChannelId, activity.From.Id);

            ProcessadorResult processadorResult = null;

            if (result.Intents.Any(i => i.Intent.ToUpper() == "ACAO"))
            {
                if (result.Entities.Any(v => v.Type.ToUpper() == "LISTAR"))
                {
                    processadorResult = await ProcessarListagem(result, userData);
                }

                if (result.Entities.Any(i => i.Type.ToUpper() == "OPERACOES" && i.Entity.ToUpper() != "CRIAR"))
                {
                    processadorResult = await ProcessarAcao(result, userData);
                }

                if (result.Entities.Any(i => i.Type.ToUpper() == "OPERACOES" && i.Entity.ToUpper() == "CRIAR"))
                {
                    var resourceGroups = await ActionBuilder.ListResourceGroups(subscription, applicationId, secretKey);

                    var dialog = new PromptDialog.PromptChoice <string>(resourceGroups.Select(r => r.Name), "Em qual resource group deseja criar?", "Desculpa opção inválida", 3);
                    context.Call(dialog, ResourceGroupPromptResultAsync);
                    return;
                }
            }

            await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData);

            await context.PostAsync(processadorResult?.Mensagem);

            context.Wait(MessageReceived);
        }
Exemple #5
0
        private async Task HandleUnkownCuisine(IDialogContext context, BaseRequest model, Dictionary <string, int> cuisineDict, ResumeAfter <string> onNewCuisine)
        {
            await context.PostAsync($" {model.Cuisine} is not available. Please check the list of availability and try again.");

            string anotherCuisine = $"Please choose a one of the cuisines above.";

            //context.UserData.SetValue("mealByDistance", mealByDistance);
            context.UserData.Replace(model.Key, model);
            PromptDialog.PromptChoice <string> enterCuisine = new PromptDialog.PromptChoice <string>(cuisineDict.Keys, anotherCuisine, "Retry", 3);
            //search cuisines
            context.Call(enterCuisine, onNewCuisine);
        }
        public async Task DeleteAlarm(IDialogContext context, LuisResult result)
        {
            EntityRecommendation title;

            result.TryFindEntity(_entityAlarmName, out title);

            if (title != null)
            {
                await _alarms.DeleteAlarm(context, title.Entity);

                context.Wait(MessageReceived);
            }
            else
            {
                var dialog = new PromptDialog.PromptChoice <string>(_alarms.Alarms, "Which alarm would you like to delete?", "Didn't get that!", 3);
                context.Call(dialog, ResumeAfterAlarmDelete);
            }
        }
Exemple #7
0
        /// <summary>
        /// Try to get the specified site.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private async Task GetSpecifiedSite(IDialogContext context)
        {
            var sites = await _sharePointService.SearchForWeb(SiteTitleOrAlias, await _authenticationService.GetAccessToken(context), context);

            // Exactly one match.
            if (sites.Count == 1)
            {
                _site = sites[0];
                await StoreAndFinish(context);
            }
            // No match.
            else if (sites.Count == 0)
            {
                _site = null;
                await StoreAndFinish(context);
            }
            // Multiple matches - need to clarify further.
            else
            {
                // Note that for this to work, the entity being selected (BotSite) should override ToString() and return something identifiable
                // for each site. That seems to be used to determine which option has been selected.
                var descriptions = new List <string>();
                int index        = 1;
                foreach (var site in sites)
                {
                    descriptions.Add($"{index++}: {site.ToString()}");
                }

                var choose = new PromptDialog.PromptChoice <BotSite>(
                    sites,
                    Constants.Responses.ChooseSite,
                    Constants.Responses.DidntUnderstand + Constants.Responses.PleaseChooseAnOption,
                    Constants.Misc.DialogAttempts,
                    promptStyle: PromptStyle.Auto,
                    descriptions: descriptions
                    );


                context.Call <BotSite>(choose, AfterChoiceSelected);
            }
        }
Exemple #8
0
        public void Call <R>(IDialog <R> child, ResumeAfter <R> resume)
        {
            if (child is EditablePromptChoice <string> p)
            {
                var language = _translatorService.GetLanguage(_original);

                if (string.IsNullOrWhiteSpace(language))
                {
                    _original.Call <R>(child, resume);
                    return;
                }

                var translateTasks = new List <Task>();

                var optOld = p.PromptOptions;

                var prompt = AsyncHelpers.RunSync(() => _translatorService.Translate(optOld.Prompt, "en", language));
                var retry  = AsyncHelpers.RunSync(() => _translatorService.Translate(optOld.Retry, "en", language));

                //var prompt = "";
                //var retry = "";

                //translateTasks.Add(_translate(optOld.Prompt, language, (s) => prompt = s));
                //translateTasks.Add(_translate(optOld.Retry, language, (s) => retry = s));

                //AsyncHelpers.RunSync(()=>Task.WhenAll(translateTasks));

                //Task.WhenAll(translateTasks).ConfigureAwait(true);

                var optNew = new PromptOptions <string>(prompt, retry, optOld.TooManyAttempts, optOld.Options, optOld.Attempts, optOld.PromptStyler, optOld.Descriptions);

                var newDialog = new PromptDialog.PromptChoice <string>(optNew);
                _original.Call <string>(newDialog, resume as ResumeAfter <string>);

                return;
            }
            _original.Call <R>(child, resume);
        }
        public async Task ApagarElementoCasa(IDialogContext context, LuisResult result)
        {
            context.PrivateConversationData.SetValue("laststep", "apagarelementocasa");

            var    entities = result.Entities.ToList();
            string message  = string.Empty;

            if (entities.Where(m => m.Type == "espacio").FirstOrDefault() != null)
            {
                HomeRestService homeRestService = new HomeRestService();

                var userCanPerformAction = homeRestService.CanUserPerformAction(context.Activity.From.Name);

                var entityEspacio = entities.Where(m => m.Type == "espacio").Select(n => n.Entity).FirstOrDefault();

                if (entityEspacio == "cocina")
                {
                    if (userCanPerformAction)
                    {
                        await homeRestService.ExecuteAction(HomeRestService.lightOffKitchenAction);

                        message = "Luz de la cocina apagada";
                    }
                    else
                    {
                        await homeRestService.MakeAuthyRequest(new AuthyRequestDto
                        {
                            UserRequest  = context.Activity.From.Name,
                            ActionToTake = "apagarluzcocina",
                            EMail        = "*****@*****.**"
                        });

                        message = messageRequestAuthoration;
                    }
                }

                if (entityEspacio == "baño")
                {
                    if (userCanPerformAction)
                    {
                        await homeRestService.ExecuteAction(HomeRestService.lightOffBathRoomAction);

                        message = "Luz del baño apagagada";
                    }
                    else
                    {
                        await homeRestService.MakeAuthyRequest(new AuthyRequestDto
                        {
                            UserRequest  = context.Activity.From.Name,
                            ActionToTake = "apagarluzbaño",
                            EMail        = "*****@*****.**"
                        });

                        message = messageRequestAuthoration;
                    }
                }

                if (entityEspacio == "recibidor")
                {
                    if (userCanPerformAction)
                    {
                        await homeRestService.ExecuteAction(HomeRestService.lightOffEntranceHallAction);

                        message = "Luz del recibidor apagada";
                    }
                    else
                    {
                        await homeRestService.MakeAuthyRequest(new AuthyRequestDto
                        {
                            UserRequest  = context.Activity.From.Name,
                            ActionToTake = "apagarluzrecibidor",
                            EMail        = "*****@*****.**"
                        });

                        message = messageRequestAuthoration;
                    }
                }

                if (entityEspacio == "habitacion" || entityEspacio == "habitación")
                {
                    if (userCanPerformAction)
                    {
                        await homeRestService.ExecuteAction(HomeRestService.lightOffBedroomAction);

                        message = "Luz de la habitación apagada";
                    }
                    else
                    {
                        await homeRestService.MakeAuthyRequest(new AuthyRequestDto
                        {
                            UserRequest  = context.Activity.From.Name,
                            ActionToTake = "apagarluzhabitacion",
                            EMail        = "*****@*****.**"
                        });

                        message = messageRequestAuthoration;
                    }
                }

                var activityMessage = context.MakeMessage();
                activityMessage.Type = ActivityTypes.Message;
                await context.PostAsync(message);
            }

            if (string.IsNullOrEmpty(message))
            {
                var dialog = new PromptDialog.PromptChoice <string>(houseSpaces, "Que parte de la casa quieres apagar", "Esta no es una opción válida", 2);
                context.Call(dialog, AfterUserHasChoiceLedLowOption);
            }
        }
        public async Task SubirPersiana(IDialogContext context, LuisResult result)
        {
            context.PrivateConversationData.SetValue("laststep", "subirventana");

            string message  = string.Empty;
            var    entities = result.Entities.ToList();

            if (entities.Where(m => m.Type == "espacio").FirstOrDefault() != null)
            {
                HomeRestService homeRestService = new HomeRestService();

                var userCanPerformAction = homeRestService.CanUserPerformAction(context.Activity.From.Name);

                var entityEspacio = entities.Where(m => m.Type == "espacio").Select(n => n.Entity).FirstOrDefault();

                if (entityEspacio == "cocina")
                {
                    if (userCanPerformAction)
                    {
                        await homeRestService.ExecuteAction(HomeRestService.blindUpKitchenAction);

                        message = "Persiana de la cocina subida";
                    }
                    else
                    {
                        await homeRestService.MakeAuthyRequest(new AuthyRequestDto
                        {
                            UserRequest  = context.Activity.From.Name,
                            ActionToTake = "subirpersianacocina",
                            EMail        = "*****@*****.**"
                        });

                        message = messageRequestAuthoration;
                    }
                }

                if (entityEspacio == "habitacion" || entityEspacio == "habitación")
                {
                    if (userCanPerformAction)
                    {
                        await homeRestService.ExecuteAction(HomeRestService.blindUpBedroomAction);

                        message = "Persiana de la habitación subida";
                    }
                    else
                    {
                        await homeRestService.MakeAuthyRequest(new AuthyRequestDto
                        {
                            UserRequest  = context.Activity.From.Name,
                            ActionToTake = "subirpersianahabitacion",
                            EMail        = "*****@*****.**"
                        });

                        message = messageRequestAuthoration;
                    }
                }


                if (entityEspacio == "buzon" || entityEspacio == "buzón")
                {
                    if (userCanPerformAction)
                    {
                        await homeRestService.ExecuteAction(HomeRestService.blindUpMailboxAction);

                        message = "Persiana del buzón subida";
                    }
                    else
                    {
                        await homeRestService.MakeAuthyRequest(new AuthyRequestDto
                        {
                            UserRequest  = context.Activity.From.Name,
                            ActionToTake = "subirpersianabuzon",
                            EMail        = "*****@*****.**"
                        });

                        message = messageRequestAuthoration;
                    }
                }

                var activityMessage = context.MakeMessage();
                activityMessage.Type = ActivityTypes.Message;
                await context.PostAsync(message);
            }
            else
            {
                var activity = context.MakeMessage();
                activity.Text = "¿De que parte de la casa quieres subir la persiana?";

                var dialog = new PromptDialog.PromptChoice <string>(new string[] { "Cocina", "Habitacion", "Buzón", "Todas" }, "¿De que parte de la casa quieres subir la persiana?", "Esta no es una opción válida", 2);
                context.Call(dialog, AfterUserHasChosenSubirPersianaOptionAsync);
            }
        }