private async Task BookingRoomStart(DialogContext dialogContext, object args, SkipStepFunction next) { var state = new TechClubAssistantBotState(dialogContext.ActiveDialog.State); FillBookingStateFromLuisResult(state, (args as IDictionary <string, object>)?["luisResult"] as LuisResult); dialogContext.ActiveDialog.State = state; await dialogContext.Context.SendActivity($"Booking meeting room started"); if (String.IsNullOrEmpty(state.MeetingRoom)) { var choices = MeetingRooms.Select(r => new Choice() { Value = r }).ToList(); await dialogContext.Prompt(MeetingRoomPrompt, "Select meeting room: ", new ChoicePromptOptions() { Choices = choices }); } else { await dialogContext.Continue(); } }
private async Task BookingRoomFinish(DialogContext dialogContext, object args, SkipStepFunction next) { var state = new TechClubAssistantBotState(dialogContext.ActiveDialog.State); if (args is Microsoft.Bot.Builder.Prompts.ChoiceResult choiceResult) { state.IsConfirmed = choiceResult.Value.Value == "Confirm"; } if (state.IsConfirmed) { var bookingResult = await _meetingRoomBookingService.BookMeetingRoomAsync(new BookingRequest() { MeetingRoom = state.MeetingRoom, Time = state.Time, Duration = state.Duration }); await dialogContext.Context.SendActivity($"Your booking was processed."); } else { await dialogContext.Context.SendActivity($"Your booking was cancelled"); } await dialogContext.End(); }
private async Task BookingRoomConfirmation(DialogContext dialogContext, object args, SkipStepFunction next) { var state = new TechClubAssistantBotState(dialogContext.ActiveDialog.State); dialogContext.ActiveDialog.State = state; if (args is Microsoft.Bot.Builder.Prompts.TextResult result) { state.Duration = result.Value; } string summary = $"Please confirm your booking: **{state.MeetingRoom}** at {state.Time} for {state.Duration}"; var choices = new List <Choice> { new Choice() { Value = "Confirm" }, new Choice() { Value = "Reject" } }; await dialogContext.Prompt(ConfirmPrompt, summary, new ChoicePromptOptions() { Choices = choices }); }
private static void FillBookingStateFromLuisResult(TechClubAssistantBotState state, LuisResult result) { EntityRecommendation meetingRoomEntity = result.Entities.Where(e => e.Type == "Meeting Room").FirstOrDefault(); state.MeetingRoom = ((meetingRoomEntity?.Resolution?["values"]) as List <object>)?.FirstOrDefault()?.ToString(); EntityRecommendation durationEntity = result.Entities.Where(e => e.Type == "builtin.datetimeV2.duration").FirstOrDefault(); var resolvedDuration = (((durationEntity?.Resolution?["values"]) as List <object>)?.FirstOrDefault() as Dictionary <string, object>)?["value"]; state.Duration = resolvedDuration != null?TimeSpan.FromSeconds(Convert.ToDouble(resolvedDuration)).ToString() : null; EntityRecommendation timeEntity = result.Entities.Where(e => e.Type == "builtin.datetimeV2.datetime").FirstOrDefault(); state.Time = (((timeEntity?.Resolution?["values"]) as List <object>)?.FirstOrDefault() as Dictionary <string, object>)?["value"]?.ToString(); }
private async Task BookingRoomDuration(DialogContext dialogContext, object args, SkipStepFunction next) { var state = new TechClubAssistantBotState(dialogContext.ActiveDialog.State); dialogContext.ActiveDialog.State = state; if (args is Microsoft.Bot.Builder.Prompts.DateTimeResult result) { state.Time = result.Text; } if (String.IsNullOrEmpty(state.Duration)) { await dialogContext.Prompt(DurationPrompt, "Enter duration: ", new PromptOptions() { RetryPromptString = "Please enter correct duration" }); } else { await dialogContext.Continue(); } }
private async Task BookingRoomTime(DialogContext dialogContext, object args, SkipStepFunction next) { var state = new TechClubAssistantBotState(dialogContext.ActiveDialog.State); dialogContext.ActiveDialog.State = state; if (args is Microsoft.Bot.Builder.Prompts.ChoiceResult choiceResult) { state.MeetingRoom = choiceResult.Value.Value; } if (String.IsNullOrEmpty(state.Time)) { await dialogContext.Prompt(TimePrompt, "Enter date and time: ", new PromptOptions() { RetryPromptString = "Please enter correct date and time" }); } else { await dialogContext.Continue(); } }