public PositionResult Position(bool offWay = false) { var curNode = ReceiveEventController.GetCurrentNode(); var nextNode = ReceiveEventController.GetNextNode(); if (curNode == null || nextNode == null) { return(new PositionResult { Current = new WaypointInfo { NodeName = "Текущий участок", NodeId = 1 }, Next = new WaypointInfo { NodeName = "Следующий участок", NodeId = 2 } }); } return(new PositionResult { Current = new WaypointInfo { NodeName = curNode.Name, NodeId = curNode.Id }, Next = new WaypointInfo { NodeName = nextNode.Name, NodeId = nextNode.Id }, OffWay = offWay }); }
public static AliceResponse HandleRequest(AliceRequest request) { var response = new AliceResponse { Session = request.Session, Response = new ResponseModel() }; response.Response.Text = "Извините, произошла ошибка, разработчики уже уведомлены"; var state = ReceiveEventController.GetState(); try { if (request.Request.Command.IsNullOrEmpty() || request.Request.Nlu.Tokens.First() == "да") { response.Response.Text = "Добро пожаловать в голосовой помощник рабочего. " + "Я помогу вам добраться до пункта назначения с нужным грузом." + "Спросите меня, куда идти или попросите переключить на следующую" + " точку маршрута, если хотите ее пропустить. "; } else if (Utils.CheckTokens(request.Request.Nlu.Tokens, new[] { "куда идти", "куда мне", "что делать", "какая задача", "пункт назначения" })) { var node = ReceiveEventController.GetNextNode(); var name = GetCorrectNodeName(state, node); response.Response.Text = $"Двигайтесь в {name}."; } else if (Utils.CheckTokens(request.Request.Nlu.Tokens, new[] { "следующий пункт", "следующая точка", "дальше", "переключить точку", "я на месте" })) { var switchedNode = ReceiveEventController.SwitchToNextNode(); var name = GetCorrectNodeName(state, switchedNode); response.Response.Text = $"Переключаю на точку {switchedNode.Id}. Следуйте в {name}."; } else if (Utils.CheckTokens(request.Request.Nlu.Tokens, new[] { "где я", "где сейчас", "где нахожусь", "местоположение", "локация" })) { var curNode = ReceiveEventController.GetCurrentNode(); var nextNode = ReceiveEventController.GetNextNode(); var curName = GetCorrectNodeName(state, curNode); var nextName = GetCorrectNodeName(state, nextNode); response.Response.Text = $"Вы находитесь в {curName}. Следуйте в {nextName}. "; } else if (Utils.CheckTokens(request.Request.Nlu.Tokens, new[] { "как пройти", "хочу попасть в", "как дойти", "как попасть" })) { response.Response.Text = $"Ошибка обнаружения пути"; var depotNum = request.Request.Nlu.Tokens.Select(x => { if (int.TryParse(x, out var n)) { return(n); } return(-1); }).FirstOrDefault(y => y != -1); bool onCart = request.Request.Nlu.Tokens.ContainsStartWith("тележк") || request.Request.Nlu.Tokens.ContainsStartWith("погруз") || request.Request.Nlu.Tokens.ContainsStartWith("телег"); foreach (var depot in ReceiveEventController.GetState().Geo.Depots.Where(depot => depot.Id == depotNum)) { var nextNode = ReceiveEventController.GetNextNode(); var resultPath = ReceiveEventController.FindPath(depot, onCart); var targetName = GetCorrectNodeName(state, resultPath.Item1); var nextName = GetCorrectNodeName(state, nextNode); if (onCart && resultPath.Item2) { response.Response.Text = $"Ваш пункт назначения {targetName}. Следуйте в {nextName}. Часть пути придется пройти пешком."; } else { response.Response.Text = $"Ваш пункт назначения {targetName}. Следуйте в {nextName}."; } break; } } else if (Utils.CheckTokens(request.Request.Nlu.Tokens, new[] { "где начальник цеха", "где мастер участка", "где мастер", "где начальник" })) { response.Response.Text = $"Орел в гнезде"; } } catch (Exception e) { response.Response.Text = $"Ошибка обнаружения пути"; } return(response); }