private async Task <IActionResult> HandleNextBusLoadAction(DialogFulfillmentRequest <NextBusLoadParameters> data) { var originalParameters = data.QueryResult.OutputContexts.First(x => x.Name.EndsWith("route-data")); if (originalParameters == null) { throw new Exception("Could not determine route pattern"); } var parameters = new NextBusLoadParameters() { Location = originalParameters.Parameters.location, PatternId = originalParameters.Parameters.patternId }; string stopId; string routeCode; Locations location; ValidateLocationParameter(parameters); GetStopIdAndRouteCode(parameters, out stopId, out routeCode, out location); if (parameters.PatternId == 0) { throw new Exception("Could not determine route pattern"); } var vehicleStatuses = await _bcTransitRouteSchedule.GetVehicleStatuses(parameters.PatternId); var busInfo = GetNextBusFromLocation(location, vehicleStatuses); var message = "Bus # " + busInfo.Name + " " + busInfo.HeadsignText; if (!string.IsNullOrWhiteSpace(busInfo.HeadsignText)) { switch (busInfo.vehicleCapacityIndicator.ToUpper()) { case "GREEN": message += " has low load"; break; case "YELLOW": message += " has medium load"; break; case "RED": message += " has heavy load"; break; } } else { message += " has no load data"; } message += $" and is going {busInfo.Velocity} km/h"; return(new OkObjectResult(new DialogFulfillmentResponse() { FulfillmentText = message })); }
private async Task <IActionResult> HandleNextBusAction(DialogFulfillmentRequest <NextBusParameters> data) { string stopId; string routeCode; Locations location; ValidateLocationParameter(data.QueryResult.Parameters); GetStopIdAndRouteCode(data.QueryResult.Parameters, out stopId, out routeCode, out location); int patternId = 0; List <StopPredictionData> results; try { var stopData = await _bcTransitRouteSchedule.GetStopPredictionsForRoute(stopId, routeCode); results = stopData.Item1; patternId = stopData.Item2; if (results.Count == 0) { return(new OkObjectResult(new DialogFulfillmentResponse() { FulfillmentText = $"No scheduled busses found" })); } var firstBus = results[0]; string message = ""; if (firstBus.PredictionType == PredictionTypes.Predicted.ToString()) { var now = DateTime.Now; var diff = results[0].PredictTime - now; var minutes = diff.Minutes; message = $"Next bus comes in {minutes} minutes."; if (firstBus.PredictTime > firstBus.ScheduleTime) { var timeDiff = firstBus.PredictTime - firstBus.ScheduleTime; if (timeDiff.Minutes > 2) { message += $" The bus is running later than scheduled by {timeDiff.Minutes} minutes."; } } else if (firstBus.PredictTime < firstBus.ScheduleTime) { var timeDiff = firstBus.ScheduleTime - firstBus.PredictTime; if (timeDiff.Minutes > 2) { message += $" The bus is running earlier than scheduled by {timeDiff.Minutes} minutes."; } } } else { message = $"Next bus is scheduled for {GetTimeStamp(firstBus.PredictTime)}."; } if (results.Count > 1) { var secondBusDiff = results[1].PredictTime - DateTime.Now; message += $" The following bus comes in {secondBusDiff.Minutes} minutes at {GetTimeStamp(results[1].PredictTime)}"; } return(new OkObjectResult(new DialogFulfillmentResponse() { FulfillmentText = message, OutputContexts = new List <DialogFulfullmentOutputContext>() { new DialogFulfullmentOutputContext { LifespanCount = 1, Name = data.Session + "/contexts/route-data", Parameters = new { PatternId = patternId, Location = location.ToString() } } } })); } catch (Exception e) { _log.LogError(e.Message, e); return(new OkObjectResult(new DialogFulfillmentResponse() { FulfillmentText = $"Error fetching next bus" })); } }