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); }
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); } }
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); }
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); } }
/// <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); } }
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); } }