Esempio n. 1
0
        public KeyValuePair <int, string> CheckIfAtleastOneEntitywithPasscode(List <ChatSessionEntity> entityListRecognized)
        {
            ChatEntity  entity      = db.ChatEntity.Where(x => x.ChatIntentId == Node && x.EntityType.Contains("PASSCODE")).FirstOrDefault();
            HttpContext httpContext = HttpContext.Current;

            ChatSessionEntity entityRecognized = entityListRecognized.Where(x => x.EntityType.Contains("PASSCODE")).FirstOrDefault();

            if (Message.ToLower() == "apollo")
            {
                ChatIntent passwordIntent = db.ChatIntent.Where(x => x.ChatIntentId == Node).FirstOrDefault();
                Message = passwordIntent.Response;
                Node    = passwordIntent.ChatIntentId;
                httpContext.Session[passwordIntent.ChatIntentId.ToString()] = null;
                httpContext.Session["auth"] = true;
                ChatSession chatSession = db.ChatSession.Where(x => x.SessionId == SessionId).FirstOrDefault();
                chatSession.isAuth = true;
                ChatSessionEntity chatSessionEntity = db.ChatSessionEntity.Where(x => x.SessionEntId == entityRecognized.SessionEntId).FirstOrDefault();
                chatSessionEntity.EntityType    = "recog";
                chatSessionEntity.NotRecognized = false;
                db.SaveChanges();
                int authIntentId = (chatSession.IntentBeforeAuth != null) ? chatSession.IntentBeforeAuth.Value : 0;
                if (authIntentId != 0)
                {
                    ChatIntent authIntent = db.ChatIntent.Where(x => x.ChatIntentId == authIntentId).FirstOrDefault();
                    Node    = authIntent.ChatIntentId;
                    Message = authIntent.Response;
                }
                return(new KeyValuePair <int, string>(Node, Message));
            }
            else
            {
                httpContext.Session[Node.ToString()] = entityListRecognized;
                return(new KeyValuePair <int, string>(Node, entity.EntityDescription));
            }
        }
Esempio n. 2
0
        public ChatResponseDto GetChatResponse(int sessionId, string message, int node)
        {
            ChatDatabaseModel db          = new ChatDatabaseModel();
            ChatResponseDto   responseDto = new ChatResponseDto();

            #region Declaration
            AskMeContentManager contentManager = new AskMeContentManager();
            AskMeCommon         common         = new AskMeCommon(message, node);
            string            finalResponse    = string.Empty;
            string            phoneNumber      = string.Empty;
            ChatIntent        responseIntent   = new ChatIntent();
            List <ChatIntent> intentList       = db.ChatIntent.ToList();
            List <ChatEntity> entityList       = db.ChatEntity.ToList();
            ChatSession       chatSession      = db.ChatSession.Where(x => x.SessionId == sessionId).FirstOrDefault();

            #endregion

            #region Prerequsite Check
            if (common.CheckEmptyMessage())
            {
                finalResponse = "Sorry i did not understand";
                List <string> suggestforEmpty = common.GetSuggestionList();
                responseDto.Node       = node;
                responseDto.Message    = finalResponse;
                responseDto.Suggestion = suggestforEmpty;
                return(responseDto);
            }
            else
            {
                message = message.Trim();
            }
            #endregion

            #region Has Atleast Unrecognized Entity
            var hasEntity = (from inte in intentList
                             join ent in entityList on inte.ChatIntentId equals ent.ChatIntentId
                             where inte.ChatIntentId == node
                             select inte).ToList();

            // Has Atleast Unrecognized Entity

            var hasUnrecognizedEntity = db.ChatSessionEntity.Where(x => x.SessionId == sessionId && x.NotRecognized).ToList();

            if (hasEntity.Count > 0 && hasUnrecognizedEntity.Count > 0)
            {
                List <ChatSessionEntity> entityRecognized = hasUnrecognizedEntity;

                AskMeEntityExtraction      entityMatch       = new AskMeEntityExtraction(message, node, sessionId);
                KeyValuePair <int, string> oneEntityResponse = new KeyValuePair <int, string>();
                if (entityRecognized.Where(x => x.EntityType.Contains("PASSCODE")).Any())
                {
                    oneEntityResponse = entityMatch.CheckIfAtleastOneEntitywithPasscode(entityRecognized);
                }
                else
                {
                    oneEntityResponse = entityMatch.CheckIfAtleastOneEntityHasValue(entityRecognized);
                }
                finalResponse = replaceParam(oneEntityResponse.Value);
                node          = oneEntityResponse.Key;

                List <string> suggestforEntity = common.GetSuggestionList(node);

                responseDto.Node       = node;
                responseDto.Message    = finalResponse;
                responseDto.Suggestion = suggestforEntity;
                return(responseDto);
            }

            #endregion

            #region Has one Intent with an Entity
            var hasOneChildIntent = (from inte in intentList
                                     where inte.ParentId == node
                                     select inte).ToList();


            // Has one Intent with an Entity
            if (hasOneChildIntent.Count == 1)
            {
                ChatIntent childIntent = hasOneChildIntent.FirstOrDefault();

                var hasOneIntentwithEntity = (from ent in entityList
                                              where ent.ChatIntentId == childIntent.ChatIntentId
                                              select ent).ToList();
                if (hasOneIntentwithEntity.Count > 0)
                {
                    List <ChatSessionEntity> entityRecognized = new List <ChatSessionEntity>();
                    List <ChatEntity>        possibleEntities = hasOneIntentwithEntity;
                    foreach (ChatEntity entity in possibleEntities)
                    {
                        ChatSessionEntity recognized = new ChatSessionEntity();
                        recognized.SessionId     = sessionId;
                        recognized.EntityType    = entity.EntityType;
                        recognized.EntityName    = entity.EntityName;
                        recognized.EntityValue   = entity.EntityDescription;
                        recognized.NotRecognized = true;
                        entityRecognized.Add(recognized);
                        db.ChatSessionEntity.Add(recognized);
                    }
                    db.SaveChanges();
                    AskMeEntityExtraction      entityMatch       = new AskMeEntityExtraction(message, childIntent.ChatIntentId, sessionId);
                    KeyValuePair <int, string> oneEntityResponse = new KeyValuePair <int, string>();
                    if (entityRecognized.Where(x => x.EntityType.Contains("PASSCODE")).Any())
                    {
                        oneEntityResponse = entityMatch.CheckIfAtleastOneEntitywithPasscode(entityRecognized);
                    }
                    else
                    {
                        oneEntityResponse = entityMatch.CheckIfAtleastOneEntityHasValue(entityRecognized);
                    }
                    finalResponse = replaceParam(oneEntityResponse.Value);
                    node          = oneEntityResponse.Key;

                    List <string> suggestforEntity = common.GetSuggestionList(node);

                    responseDto.Node       = node;
                    responseDto.Message    = finalResponse;
                    responseDto.Suggestion = suggestforEntity;
                    return(responseDto);
                }
            }
            #endregion

            #region Main Channel
            AskMeChannel channel = new AskMeChannel(message, node, sessionId);
            responseIntent = channel.ChatInitializer();
            bool hasRedirect = (responseIntent.RedirectIntent.HasValue) ? true : false;

            node          = responseIntent.ChatIntentId;
            finalResponse = responseIntent.Response;

            if (responseIntent.NeedAuth)
            {
                bool hasBeenAuth = chatSession.isAuth && chatSession.SessionStart.AddDays(2) > DateTime.UtcNow;
                if (!hasBeenAuth)
                {
                    ChatIntent authIntent = intentList.Where(x => x.IntentName.ToLower().Contains("auth")).FirstOrDefault();
                    node          = authIntent.ChatIntentId;
                    finalResponse = authIntent.Response;
                    chatSession.IntentBeforeAuth = responseIntent.ChatIntentId;
                    db.SaveChanges();
                }
            }

            if (hasRedirect) // askpaymentspecialist)
            {
                int        redirectIntentId = Convert.ToInt32(responseIntent.RedirectIntent);
                ChatIntent redirectIntent   = intentList.Where(x => x.ChatIntentId == redirectIntentId).FirstOrDefault();
                node          = redirectIntent.ChatIntentId;
                finalResponse = redirectIntent.Response;
            }

            finalResponse = replaceParam(finalResponse);

            // Get Suggestions List
            List <string> suggest = common.GetSuggestionList(node);
            responseDto.Node       = node;
            responseDto.Message    = finalResponse;
            responseDto.Suggestion = suggest;
            return(responseDto);

            #endregion
        }
Esempio n. 3
0
        public KeyValuePair <int, string> CheckIfAtleastOneEntityHasValue(List <ChatSessionEntity> entityListRecognized)
        {
            AskMeEntityExtracttionNLP nlp = new AskMeEntityExtracttionNLP();
            List <EntityRecognition>  entityListMessage = new List <EntityRecognition>();
            List <ChatEntity>         entityListDb      = db.ChatEntity.Where(x => x.ChatIntentId == Node).ToList();

            if (entityListDb.Where(x => x.EntityType.Contains("PERSON")).Any() || entityListDb.Where(x => x.EntityType.Contains("LOCATION")).Any())
            {
                entityListMessage = nlp.ExtractionChannel(Message);
            }
            HttpContext httpContext = HttpContext.Current;

            foreach (ChatSessionEntity entityRecognized in entityListRecognized)
            {
                if (entityRecognized.NotRecognized)
                {
                    if (entityRecognized.EntityName.ToUpper().Contains("PERSON"))
                    {
                        if (entityListMessage.Where(x => x.EntityType == "PERSON").Any())
                        {
                            entityRecognized.EntityValue   = entityListMessage.Where(x => x.EntityType == "PERSON").Select(Y => Y.EntityValue).FirstOrDefault();
                            entityRecognized.EntityType    = "PERSON";
                            entityRecognized.NotRecognized = false;
                            if (entityRecognized.EntityName.ToUpper().Contains("USERNAME"))
                            {
                                httpContext.Session["authUser"] = entityRecognized.EntityValue;
                                ChatSession chatSession = db.ChatSession.Where(x => x.SessionId == SessionId).FirstOrDefault();
                                chatSession.SessionUd = entityRecognized.EntityValue;
                                db.SaveChanges();
                            }
                        }
                    }
                    else if (entityRecognized.EntityName.ToUpper().Contains("LOCATION"))
                    {
                        if (entityListMessage.Where(x => x.EntityType == "LOCATION").Any())
                        {
                            entityRecognized.EntityValue   = entityListMessage.Where(x => x.EntityType == "LOCATION").Select(Y => Y.EntityValue).FirstOrDefault();
                            entityRecognized.EntityType    = "LOCATION";
                            entityRecognized.NotRecognized = false;
                        }
                    }
                    else if (entityRecognized.EntityName.ToUpper().Contains("NUMBER"))
                    {
                        string numericValue = new String(Message.Where(Char.IsDigit).ToArray());
                        if (numericValue.Length > 0)
                        {
                            entityRecognized.EntityValue   = numericValue;
                            entityRecognized.EntityType    = "NUMBER";
                            entityRecognized.NotRecognized = false;
                        }
                    }
                }
            }

            string noEntityMessage = string.Empty;

            foreach (ChatSessionEntity recognized in entityListRecognized)
            {
                ChatSessionEntity sessionEntity = new ChatSessionEntity();
                sessionEntity.SessionId     = SessionId;
                sessionEntity.EntityType    = recognized.EntityType;
                sessionEntity.EntityName    = recognized.EntityName;
                sessionEntity.EntityValue   = recognized.EntityValue;
                sessionEntity.NotRecognized = recognized.NotRecognized;
                if (recognized.NotRecognized)
                {
                    noEntityMessage = noEntityMessage + recognized.EntityValue + " ";
                }
            }
            db.SaveChanges();
            if (noEntityMessage.Length > 1)
            {
                Message = noEntityMessage;
                httpContext.Session[Node.ToString()] = entityListRecognized;
            }
            else
            {
                AskMeOnlineApi onlineApi = new AskMeOnlineApi();
                ChatIntent     forOnline = db.ChatIntent.Where(x => x.ChatIntentId == Node).FirstOrDefault();
                return(onlineApi.OnlineApiChannelforNLP(forOnline, entityListRecognized));
            }

            return(new KeyValuePair <int, string>(Node, Message));
        }
Esempio n. 4
0
        public ChatIntent GetEntityforIntentfromNLP(ChatIntent responseIntent)
        {
            AskMeEntityExtracttionNLP nlp = new AskMeEntityExtracttionNLP();
            List <EntityRecognition>  entityListMessage    = new List <EntityRecognition>();
            List <EntityRecognized>   entityListRecognized = new List <EntityRecognized>();
            List <ChatEntity>         entityListDb         = db.ChatEntity.Where(x => x.ChatIntentId == Node).ToList();

            if (entityListDb.Where(x => x.EntityType.Contains("PERSON")).Any() || entityListDb.Where(x => x.EntityType.Contains("LOCATION")).Any())
            {
                entityListMessage = nlp.ExtractionChannel(Message);
            }
            HttpContext httpContext = HttpContext.Current;

            foreach (ChatEntity entity in entityListDb)
            {
                if (entity.EntityType.ToUpper().Contains("PERSON") && entityListMessage.Count > 0)
                {
                    var hasRecognition = entityListMessage.Where(x => x.EntityType == "PERSON");
                    if (hasRecognition.Any())
                    {
                        EntityRecognition recog      = hasRecognition.FirstOrDefault();
                        EntityRecognized  recognized = new EntityRecognized();
                        recognized.EntityType    = entity.EntityType;
                        recognized.EntityName    = entity.EntityName;
                        recognized.EntityValue   = recog.EntityValue;
                        recognized.NotRecognized = false;
                        entityListRecognized.Add(recognized);
                        if (entity.EntityName.ToUpper().Contains("USERNAME"))
                        {
                            httpContext.Session["authUser"] = recog.EntityValue;
                            ChatSession chatSession = db.ChatSession.Where(x => x.SessionId == SessionId).FirstOrDefault();
                            chatSession.SessionUd = recog.EntityValue;
                            db.SaveChanges();
                        }
                    }
                }
                else if (entity.EntityType.ToUpper().Contains("LOCATION") && entityListMessage.Count > 0)
                {
                    var hasRecognition = entityListMessage.Where(x => x.EntityType == "LOCATION");
                    if (hasRecognition.Any())
                    {
                        EntityRecognition recog      = hasRecognition.FirstOrDefault();
                        EntityRecognized  recognized = new EntityRecognized();
                        recognized.EntityType    = entity.EntityType;
                        recognized.EntityName    = entity.EntityName;
                        recognized.EntityValue   = recog.EntityValue;
                        recognized.NotRecognized = false;
                        entityListRecognized.Add(recognized);
                    }
                }
                else if (entity.EntityType.ToUpper().Contains("NUMBER") && entityListMessage.Count > 0)
                {
                    string numericValue = new String(Message.Where(Char.IsDigit).ToArray());
                    if (numericValue.Length > 0)
                    {
                        EntityRecognized recognized = new EntityRecognized();
                        recognized.EntityType    = entity.EntityType;
                        recognized.EntityName    = entity.EntityName;
                        recognized.EntityValue   = numericValue;
                        recognized.NotRecognized = false;
                        entityListRecognized.Add(recognized);
                    }
                }
                else
                {
                    EntityRecognized recognized = new EntityRecognized();
                    recognized.EntityType    = entity.EntityType;
                    recognized.EntityName    = entity.EntityName;
                    recognized.EntityValue   = entity.EntityDescription;
                    recognized.NotRecognized = true;
                    entityListRecognized.Add(recognized);
                }
            }

            string noEntityMessage = string.Empty;

            List <ChatSessionEntity> sessionEntityList = new List <ChatSessionEntity>();

            foreach (EntityRecognized recognized in entityListRecognized)
            {
                ChatSessionEntity sessionEntity = new ChatSessionEntity();
                sessionEntity.SessionId     = SessionId;
                sessionEntity.EntityType    = recognized.EntityType;
                sessionEntity.EntityName    = recognized.EntityName;
                sessionEntity.EntityValue   = recognized.EntityValue;
                sessionEntity.NotRecognized = recognized.NotRecognized;
                db.ChatSessionEntity.Add(sessionEntity);
                sessionEntityList.Add(sessionEntity);
                if (recognized.NotRecognized)
                {
                    noEntityMessage = noEntityMessage + recognized.EntityValue + " ";
                }
            }
            db.SaveChanges();
            if (noEntityMessage.Length > 1)
            {
                Message = noEntityMessage;
                httpContext.Session[Node.ToString()] = entityListRecognized;
            }
            else
            {
                AskMeOnlineApi             onlineApi      = new AskMeOnlineApi();
                ChatIntent                 forOnline      = db.ChatIntent.Where(x => x.ChatIntentId == Node).FirstOrDefault();
                KeyValuePair <int, string> onlineResponse = onlineApi.OnlineApiChannelforNLP(forOnline, sessionEntityList);
                Node    = onlineResponse.Key;
                Message = onlineResponse.Value;
            }

            responseIntent.ChatIntentId = Node;
            responseIntent.Response     = Message;
            return(responseIntent);
        }