public async Task <DialogTurnResult> ResponseToStartRoutePrompt(WaterfallStepContext sc, CancellationToken cancellationToken) { try { var state = await Accessor.GetAsync(sc.Context); if ((sc.Result is bool && (bool)sc.Result) || sc.Result is FoundChoice) { var activeRoute = state.FoundRoutes[0]; if (sc.Result is FoundChoice) { activeRoute = state.FoundRoutes[(sc.Result as FoundChoice).Index]; } if (activeRoute != null) { state.ActiveRoute = activeRoute; state.FoundRoutes = null; } var replyMessage = ResponseManager.GetResponse(RouteResponses.SendingRouteDetails); await sc.Context.SendActivityAsync(replyMessage); // workaround. if connect skill directly to teams, the following response does not work. if (sc.Context.Adapter is IRemoteUserTokenProvider remoteInvocationAdapter || Channel.GetChannelId(sc.Context) != Channels.Msteams) { // Send event with active route data var replyEvent = sc.Context.Activity.CreateReply(); replyEvent.Type = ActivityTypes.Event; replyEvent.Name = "ActiveRoute.Directions"; var eventPayload = new DirectionsEventResponse { Destination = state.Destination, Route = state.ActiveRoute }; replyEvent.Value = eventPayload; await sc.Context.SendActivityAsync(replyEvent); } } else { var replyMessage = ResponseManager.GetResponse(RouteResponses.AskAboutRouteLater); await sc.Context.SendActivityAsync(replyMessage); } return(await sc.EndDialogAsync()); } catch (Exception ex) { await HandleDialogExceptions(sc, ex); return(new DialogTurnResult(DialogTurnStatus.Cancelled, CommonUtil.DialogTurnResultCancelAllDialogs)); } }
public async Task <DialogTurnResult> ResponseToStartRoutePrompt(WaterfallStepContext sc, CancellationToken cancellationToken) { try { var state = await Accessor.GetAsync(sc.Context); if ((bool)sc.Result) { var activeRoute = state.FoundRoutes.Single(); if (activeRoute != null) { state.ActiveRoute = activeRoute; state.FoundRoutes = null; } var replyMessage = ResponseManager.GetResponse(RouteResponses.SendingRouteDetails); await sc.Context.SendActivityAsync(replyMessage); // Send event with active route data var replyEvent = sc.Context.Activity.CreateReply(); replyEvent.Type = ActivityTypes.Event; replyEvent.Name = "ActiveRoute.Directions"; var eventPayload = new DirectionsEventResponse { Destination = state.Destination, Route = state.ActiveRoute }; replyEvent.Value = eventPayload; await sc.Context.SendActivityAsync(replyEvent); } else { var replyMessage = ResponseManager.GetResponse(RouteResponses.AskAboutRouteLater); await sc.Context.SendActivityAsync(replyMessage); } return(await sc.EndDialogAsync()); } catch (Exception ex) { await HandleDialogExceptions(sc, ex); return(new DialogTurnResult(DialogTurnStatus.Cancelled, CommonUtil.DialogTurnResultCancelAllDialogs)); } }
public async Task <DialogTurnResult> ResponseToStartRoutePrompt(WaterfallStepContext sc, CancellationToken cancellationToken) { try { var state = await _accessor.GetAsync(sc.Context); if ((bool)sc.Result) { var activeRoute = state.FoundRoutes.Single(); if (activeRoute != null) { state.ActiveRoute = activeRoute; state.FoundRoutes = null; } var replyMessage = sc.Context.Activity.CreateReply(RouteResponses.SendingRouteDetails); await sc.Context.SendActivityAsync(replyMessage); // Send event with active route data var replyEvent = sc.Context.Activity.CreateReply(); replyEvent.Type = ActivityTypes.Event; replyEvent.Name = "ActiveRoute.Directions"; DirectionsEventResponse eventPayload = new DirectionsEventResponse(); eventPayload.Destination = state.ActiveLocation; eventPayload.Route = state.ActiveRoute; replyEvent.Value = eventPayload; await sc.Context.SendActivityAsync(replyEvent); } else { var replyMessage = sc.Context.Activity.CreateReply(RouteResponses.AskAboutRouteLater); await sc.Context.SendActivityAsync(replyMessage); } return(await sc.EndDialogAsync()); } catch { await HandleDialogException(sc); throw; } }