Exemple #1
0
        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
            });
        }
Exemple #2
0
        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);
        }