private async Task <DialogTurnResult> NameStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { var details = (ChatbotDetails)stepContext.Values["details"]; if ((bool)stepContext.Result) { var message = "Wie soll die Landschaft heißen?" + Environment.NewLine; var vmName = details.VmName; message = message + "Folgende Landschaften existieren in deinem Azure:" + Environment.NewLine; var handler = new AzureHandler(details.User.Tenant, details.User.TokenResponse.Token); foreach (var tag in handler.GetAllAvailableLandscapes()) { message = message + tag + Environment.NewLine; } message = message + "Bitte tippe als Antwort den Namen der Landschaft zu der die VM " + vmName + " hinzugehört" + Environment.NewLine; var promptMessage = MessageFactory.Text(message, message, InputHints.ExpectingInput); return(await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = promptMessage }, cancellationToken)); } else { details.RunWithCompleteLandscape = false; return(await stepContext.EndDialogAsync(details, cancellationToken)); } }
private async Task <DialogTurnResult> GetLandscapeStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { var details = (ChatbotDetails)stepContext.Options; details.RunWithCompleteLandscape = true; stepContext.Values["details"] = details; if (details.LandscapeTag == null) { var message = "Welche Landschaft soll herunter gefahren werden? Bitte wähle aus." + Environment.NewLine; IList <Choice> choices = new List <Choice>(); var handler = new AzureHandler(details.User.Tenant, details.User.TokenResponse.Token); var landscapes = handler.GetAllAvailableLandscapes(); if (!landscapes.Any()) { await stepContext.Context.SendActivityAsync(MessageFactory.Text("Es existieren keine Landschaften in ihrem Azure Account. Diese müssen zuerst konfiguriert werden. Dies kann über das Azure Portal oder über diesen Bot geschehen."), cancellationToken); return(await stepContext.EndDialogAsync(null, cancellationToken)); } foreach (var tag in landscapes) { choices.Add(new Choice(tag)); } message = message + "Folgende Landschaften können von dir herunter gefahren werden:"; var promptMessage = MessageFactory.Text(message, message, InputHints.ExpectingInput); return(await stepContext.PromptAsync(nameof(ChoicePrompt), new PromptOptions() { Choices = choices, Prompt = promptMessage }, cancellationToken)); } return(await stepContext.NextAsync(new FoundChoice() { Value = details.LandscapeTag }, cancellationToken)); }
private async Task <DialogTurnResult> AskForLandscapeStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { var details = (ChatbotDetails)stepContext.Options; stepContext.Values["details"] = details; var handler = new AzureHandler(details.User.Tenant, details.User.TokenResponse.Token); var landscapes = handler.GetAllAvailableLandscapes(); IList <Choice> choices = new List <Choice>(); foreach (var tag in landscapes) { choices.Add(new Choice(tag)); } var message = "Für welche dieser Landschaften sollen die verpflichtenden VMs konfiguriert werden?"; var promptMessage = MessageFactory.Text(message, message, InputHints.ExpectingInput); return(await stepContext.PromptAsync(nameof(ChoicePrompt), new PromptOptions() { Choices = choices, Prompt = promptMessage }, cancellationToken)); }
//endRegion Steps #region Methods private static async Task <ChatbotDetails> ShowWarningForUnsupportedVms(ITurnContext context, AzureBotLuis luisResult, ChatbotDetails details, CancellationToken cancellationToken) { var unsupportedVms = new List <string>(); var unsupportedVmLandscapes = new List <string>(); var azureHandler = new AzureHandler(details.User.Tenant, details.User.TokenResponse.Token); if (luisResult.Entities.VmLandscapeName != null) { if (!string.IsNullOrWhiteSpace(luisResult.Entities.VmLandscapeName[0])) { var vmsWithLuisLandscapeTag = azureHandler.GetListOfVms().Where(x => x.Tags.Any(y => y.Key == "Landschaft" && y.Value == luisResult.Entities.VmLandscapeName[0])); if (vmsWithLuisLandscapeTag.Any()) { details.LandscapeTag = luisResult.Entities.VmLandscapeName[0]; details.RunWithCompleteLandscape = true; } else { unsupportedVmLandscapes.Add(luisResult.Entities.VmLandscapeName[0]); } } } if (luisResult.Entities.VmName != null) { if (!string.IsNullOrWhiteSpace(luisResult.Entities.VmName[0])) { var listOfVms = azureHandler.GetListOfVms().Select(x => x.Name).ToList(); if (listOfVms.Any(x => x == luisResult.Entities.VmName[0])) { details.VmName = luisResult.Entities.VmName[0]; } else { unsupportedVms.Add(luisResult.Entities.VmName[0]); } } } if (details.Intent == AzureBotLuis.Intent.StartSingleVm || details.Intent == AzureBotLuis.Intent.StartVmLandscape) { if (unsupportedVms.Any() || unsupportedVmLandscapes.Any()) { var messageText = "Du hast eine Vm oder Landschaft angegeben die nicht in deinem Azure Account zu finden war."; var message = MessageFactory.Text(messageText, messageText, InputHints.IgnoringInput); await context.SendActivityAsync(message, cancellationToken); foreach (var unsupportedLandscape in unsupportedVmLandscapes) { if (azureHandler.GetListOfVms().FirstOrDefault(x => x.Name == unsupportedLandscape) != null) { details.Intent = AzureBotLuis.Intent.StartSingleVm; details.VmName = unsupportedLandscape; var messageText2 = "Stattdessen wurde eine VM mit dem selben Namen gefunden. Ich gehen davon aus, das du diese gemeint hast."; var message2 = MessageFactory.Text(messageText2, messageText2, InputHints.IgnoringInput); await context.SendActivityAsync(message2, cancellationToken); } } foreach (var unsupportedVm in unsupportedVms) { if (azureHandler.GetAllAvailableLandscapes().FirstOrDefault(x => x == unsupportedVm) != null) { details.Intent = AzureBotLuis.Intent.StartVmLandscape; details.LandscapeTag = unsupportedVm; var messageText2 = "Stattdessen wurde eine Landschaft mit dem selben Namen gefunden. Ich gehen davon aus, das du diese gemeint hast."; var message2 = MessageFactory.Text(messageText2, messageText2, InputHints.IgnoringInput); await context.SendActivityAsync(message2, cancellationToken); } } } } if (details.Intent == AzureBotLuis.Intent.ShutDownSingleVm || details.Intent == AzureBotLuis.Intent.ShutDownVmLandscape) { if (unsupportedVms.Any() || unsupportedVmLandscapes.Any()) { var messageText = "Du hast eine Vm oder Landschaft angegeben die nicht in deinem Azure Account zu finden sind."; var message = MessageFactory.Text(messageText, messageText, InputHints.IgnoringInput); await context.SendActivityAsync(message, cancellationToken); foreach (var unsupportedLandscape in unsupportedVmLandscapes) { if (azureHandler.GetListOfVms().FirstOrDefault(x => x.Name == unsupportedLandscape) != null) { details.Intent = AzureBotLuis.Intent.ShutDownSingleVm; details.VmName = unsupportedLandscape; var messageText2 = "Stattdessen wurde eine VM mit dem selben Namen gefunden. Ich gehen davon aus, das du diese gemeint hast."; var message2 = MessageFactory.Text(messageText2, messageText2, InputHints.IgnoringInput); await context.SendActivityAsync(message2, cancellationToken); } } foreach (var unsupportedVm in unsupportedVms) { if (azureHandler.GetAllAvailableLandscapes().FirstOrDefault(x => x == unsupportedVm) != null) { details.Intent = AzureBotLuis.Intent.ShutDownVmLandscape; details.LandscapeTag = unsupportedVm; var messageText2 = "Stattdessen wurde eine Landschaft mit dem selben Namen gefunden. Ich gehen davon aus, das du diese gemeint hast."; var message2 = MessageFactory.Text(messageText2, messageText2, InputHints.IgnoringInput); await context.SendActivityAsync(message2, cancellationToken); } } } } return(details); }