コード例 #1
0
        /// <summary>
        /// Method to as the answer not necessary qualification
        /// </summary>
        public void NextQuery2(ChatViewModel chat2)
        {
            var db        = new SamiEntities();
            var claseHtml = 0;

            //Get notification from DB by ID
            var request = (from notification in db.AgentRequestNotifications
                           where notification.RequesterGroup == chat2.Group &&
                           notification.AttendedByAgent == false &&
                           notification.AttendedByAgentDate == null
                           select notification);

            if (request.Any())
            {
                var date = request.First();


                //Mark the request as attended
                date.AttendedByAgent     = true;
                date.AttendedByAgentDate = DateTime.Now;

                //Save changes
                db.AgentRequestNotifications.AddOrUpdate(date);
                db.SaveChanges();

                if (chat2.Group.Count() > 1)
                {
                    claseHtml++;
                }

                //Craft a chat model object
                chat2.Message = $"<div id='validatortimeOutAgent'><span>Nuestros Agentes se encuentran ocupados, ¿deseas seguir esperando? o me autorizas para cancelar la petición y enviar el caso al correo de los agentes humanos</span><div class='form-inline'>" +
                                "<button type='button' class='btn btn-sami-success mb-2 mr-sm-2 mb-sm-0 QueueForAgentChatAgain'><i class='fa fa-check'></i> Deseo Esperar</button>" +
                                "<button type='button' class='btn btn-sami-success mb-2 mr-sm-2 mb-sm-0 CancelRequest'><i class='fa fa-close'></i> Deseo cancelar</button>" +
                                "</div>" +
                                "</div>";
                chat2.Name = "S@mi";
                chat2.ProfilePictureLocation = "bot-avatar.png";
                //Send message letting user know a agent has attended his request and connected to chat
                Clients.Client(chat2.ConnectionId).addChatMessage(chat2);
            }
        }
コード例 #2
0
        public string GetListFile()
        {
            SamiEntities db = new SamiEntities();

            int company = User.Identity.GetCompanyId();

            var filesAdd = new GetListFiles();

            var jsonConvert = "";

            var getFiles = (from files in db.ControlArchivos where files.IdCompany == company select files);

            if (getFiles.Any())
            {
                foreach (var files in getFiles.ToList())
                {
                    var extension = files.FileName.Split('.');

                    var getList = new getFileList
                    {
                        name      = files.FileName,
                        url       = files.FileUpload,
                        extension = extension[1]
                    };

                    filesAdd.GetListFilesAdd.Add(getList);
                }

                jsonConvert = JsonConvert.SerializeObject(filesAdd.GetListFilesAdd.ToList());
            }
            else
            {
                jsonConvert = "error";
            }



            return(jsonConvert);
        }
コード例 #3
0
#pragma warning restore 1591

        /// <summary>
        /// Generate chat history file from database chat history by ID
        /// </summary>
        /// <param name="id">Chat connection ID</param>
        /// <returns>Text file containing chat history</returns>
        public ActionResult GenerateHistory(string id)
        {
            var db = new SamiEntities();

            //Load messages from database
            var chatMessages = (from chat in db.Chats
                                join session in db.HistoricoSesions
                                on chat.IdSesion equals session.IdSesion
                                where session.SessionConnectionId == id
                                select chat).ToList();

            //Get user manager object from HTTP context
            var userManager = HttpContext.GetOwinContext()
                              .GetUserManager <ApplicationUserManager>();

            var sb = new StringBuilder();

            foreach (var chatMessage in chatMessages)
            {
                string texto = chatMessage.Texto.Replace("<script>AutoQueueForAgentChat();</script>", "");
                if (chatMessage.Fecha != null)
                {
                    /*
                     * Generate a text line with date, user and chat text, this line uses a ternary resolution
                     * to find out if a message was sent by a human user or was generated by the system / bot
                     */
                    sb.AppendLine(!string.IsNullOrEmpty(chatMessage.UserID)
                        ? $"[{chatMessage.Fecha.Value}] {userManager.FindById(chatMessage.UserID).UserName}: {chatMessage.Texto}"
                        : $"[{chatMessage.Fecha.Value}] Pólux: {texto}");
                }
            }

            //Encode generated string to byte array
            var byteArray = Encoding.UTF8.GetBytes(sb.ToString());

            //Return file from memory, file will download automatically on user's browser
            return(File(new MemoryStream(byteArray), "text/plain", $"ChatHistory-{DateTime.Now:yyyy-MM-dd hhmmss}.txt"));
        }
コード例 #4
0
 public ActionResult Delete(int id)
 {
     try
     {
         using (SamiEntities db = new SamiEntities())
         {
             Compania emp = db.Companias.Where(x => x.IdCompania == id).FirstOrDefault <Compania>();
             db.Companias.Remove(emp);
             var valor = db.SaveChanges();
             if (valor == 1)
             {
                 return(Json(new { success = true, message = "Se ha eliminado la compañía correctamente" }, JsonRequestBehavior.AllowGet));
             }
             else
             {
                 return(Json(new { success = false, message = "Error, se ha encontrado un problema, intentelo de nuevo" }, JsonRequestBehavior.AllowGet));
             }
         }
     }
     catch (Exception ex)
     {
         return(Json(new { success = false, message = ex.Message }, JsonRequestBehavior.AllowGet));
     }
 }
コード例 #5
0
        /// <summary>
        ///     Consultar el ticket solicitado por un usuario.
        ///     Retorna un string.
        /// </summary>
        /// <param name="query"></param>
        /// <param name="companyId"></param>
        /// <returns></returns>
        public async Task <string> GetTicketCa(string query, int companyId)
        {
            // Se inicializa las variables
            int    login = 0;
            string first = "", second = "", third = "", fourth = "", fifth = "", sixth = "", crConsultado = "", groupId = "", resultadoFinal = "";
            // Conexión a la base de datos
            SamiEntities db = new SamiEntities();
            // Consulta parametros de CA
            var connectionCA = (from connCa in db.ConexionCAs where connCa.IdCompania == companyId select connCa).First();

            // Web Service SOAP CA.
            CaConexionSaludTotal.USD_WebServiceSoapClient ca = new CaConexionSaludTotal.USD_WebServiceSoapClient();

            // Se logea por ca
            login = ca.login(connectionCA.UsuarioCA, connectionCA.PasswordCA);
            // Atributos de consulta
            string[] datos = { "status.sym", "assignee.userid", "assignee.combo_name", "description" };
            // Se consulta el cr del caso, el estado, el asignado y la descripción del usuario
            first = ca.doSelect(login, "cr", $"ref_num='{query}'", 1, datos);
            // Convertimos el archivo xml en texto
            XElement firstX = XElement.Parse(first);

            // Se toma solo las etiquetas <Handle>cr:</Handle>
            var att = firstX.Descendants("Handle").ToList();

            // Se guarda el cr extraido.
            foreach (var item in att)
            {
                crConsultado = item.Value;
            }

            // Separamos el id del grupo
            var idGroup = firstX.Descendants("AttrValue").ToList();

            // Se consulta el atributo tipo de solicitud
            string[] datos2 = { "type.sym" };

            // Se consulta por segunda vez para traer el tipo de solicitud, en este caso se ingresa el CR consultado
            second = ca.doSelect(login, "cr", $"persistent_id='{crConsultado}'", 255, datos2);

            // Se convierte la respuesta XML a Texto
            XElement secondX = XElement.Parse(second);

            // Se consulta el atributo de la descripción
            string[] datos3 = { "description" };

            // Consultar el comentario en proceso, trae todos los comentarios concatenados
            third = ca.doSelect(login, "alg", $"call_req_id='{crConsultado}' and type in ('ST','LOG','TR','RE', 'CB', 'RS', 'SOLN', 'ESC', 'NF')", 255, datos3);

            // Se convierte el resultado XML en texto
            XElement thirdX = XElement.Parse(third);

            // Consultar el comentario en proceso, trae todos los comentarios concatenados
            sixth = ca.doSelect(login, "alg", $"call_req_id='{crConsultado}' and type in ('ST','LOG','TR','RE', 'CB', 'RS', 'SOLN', 'ESC', 'NF')", 255, datos3);

            // Se convierte el resultado XML en texto
            XElement sixthX = XElement.Parse(sixth);

            // Consultar el comentario resuelto

            fourth = ca.doSelect(login, "alg", $"call_req_id='{crConsultado}' and type = 'RE'", 255, datos3);

            // Se convierte el resultado XML en texto
            XElement fourthX = XElement.Parse(fourth);

            // Se consulta el atributo de la descripción
            string[] datos5 = { "last_mod_dt" };

            // Consultar el comentario en proceso, trae todos los comentarios concatenados
            fifth = ca.doSelect(login, "cr", $"persistent_id='{crConsultado}'", 255, datos5);

            // Se convierte el resultado XML en texto
            XElement seventh = XElement.Parse(fifth);

            // Se toma solo las etiquetas <AttrValue></AttrValue> del XML
            var finalAtt  = firstX.Descendants("AttrValue").ToList();
            var finalAtt2 = secondX.Descendants("AttrValue").ToList();
            var finalAtt3 = thirdX.Descendants("AttrValue").ToList();
            var finalAtt4 = fourthX.Descendants("AttrValue").ToList();
            var finalAtt6 = sixthX.Descendants("AttrValue").ToList();
            var finalAtt7 = seventh.Descendants("AttrValue");


            var time = Convert.ToInt64(finalAtt7.First().Value);

            var timeConvert = UnixTimeToDateTime(time);

            // Se crea array de cadena de texto.
            string[] lista  = { "<strong>Tipo de Caso:</strong> " };
            string[] lista2 = { "<br/><strong>Estado:</strong> ", "<br/><strong>Caso Asignado a:</strong> ", "<br/><strong>Grupo: </strong>", "<br/><strong>Descripción usuario:</strong> " };
            string[] lista3 = { "<br/><strong>Comentario en Proceso:</strong><br/>" };
            string[] lista4 = { "<br/><strong>Comentario Final:</strong><br/>" };

            // Se combina el resultado de CA con la cadena de Array
            var answerCA  = finalAtt2.Zip(lista, (n, w) => new { Number = n, Word = w });
            var answerCA2 = finalAtt.Zip(lista2, (n, w) => new { Number = n, Word = w });
            var answerCA3 = finalAtt3.Zip(lista3, (n, w) => new { Number = n, Word = w });
            var answerCA4 = finalAtt4.Zip(lista4, (n, w) => new { Number = n, Word = w });

            // Tipo de Solicitud
            foreach (var nw in answerCA)
            {
                // Se imprime los resultados junto con la cadena de array, aquí se elimina el <AttrValue></AttrValue>
                resultadoFinal += String.Join(" ", nw.Word.ToString() + nw.Number.Value);
            }

            // Asignado a:, descripción del usuario y el estado del caso.
            foreach (var nw in answerCA2)
            {
                // Se imprime los resultados junto con la cadena de array, aquí se elimina el <AttrValue></AttrValue>
                resultadoFinal += String.Join(" ", nw.Word.ToString() + nw.Number.Value);
            }

            // Se valida si el tipo de solicitud es Resuelto o Cerrado
            if (resultadoFinal.Contains("Resuelto") || resultadoFinal.Contains("Cerrado"))
            {
                // Si tiene el estado Resuelto o Cerrado se consulta el comentario final, hecho por el agente humano
                foreach (var nw in answerCA4)
                {
                    // Se imprime los resultados junto con la cadena de array, aquí se elimina el <AttrValue></AttrValue>
                    resultadoFinal += String.Join(" ", nw.Word.ToString() + nw.Number.Value);
                }

                resultadoFinal += $"<div><strong>Fecha de última actualización:</strong>{timeConvert}</div>";
            }
            else
            {
                if (resultadoFinal.Contains("Abierto"))
                {
                }
                else
                {
                    // Si contiene otro estado, como Abierto, Re-Abierto, en proceso, genera la lista de todos los comentarios del proceso
                    resultadoFinal += $"<div><strong>Fecha de última actualización:</strong>{timeConvert}</div>";
                    var data = "";
                    foreach (var nw in finalAtt3)
                    {
                        // Validamos si la respuesta fue hecha por el sistema.
                        if (nw.Value.Contains("AHD") || nw.Value.Contains("Transferir"))
                        {
                            // Si fue hecha por el sistema, lo ignora y no lo imprime
                            resultadoFinal += "";
                        }
                        else
                        {
                            // Si el comentario fue hecho por un agente humano, lo imprime.
                            foreach (var item in finalAtt6)
                            {
                                data = item.Value;
                            }
                        }
                    }
                    resultadoFinal += data;
                    resultadoFinal += "<br/><strong>Comentario en Proceso:</strong><br/>";
                }
            }


            // Cierra sesión
            ca.logout(login);
            // Retorna la consulta del ticket

            return(resultadoFinal);
        }
コード例 #6
0
        public ActionResult Index()
        {
            if (Request["autoAgent"] != null)
            {
                //Check user roles
                if (User.IsInRole("Usuario"))
                {
                    //Redirect to respective index view
                    return(RedirectToAction("Index", "Chat", new
                    {
                        autoAgent = "true"
                    }));
                }
            }
            //Check user roles
            if (User.IsInRole("Usuario"))
            {
                //Redirect to respective index view
                return(RedirectToAction("Index", "Chat"));
            }

            //Check user roles
            if (User.IsInRole("Agente"))
            {
                //Redirect to respective index view
                return(RedirectToAction("Index", "Agent"));
            }

            if (User.IsInRole("Entrenador"))
            {
                return(RedirectToAction("Index", "Coach"));
            }

            if (User.IsInRole("Supervisor"))
            {
                return(RedirectToAction("Index", "Supervisor"));
            }

            if (Request["resultados"] != null && Request["email"] != null && Request["name"] != null)
            {
                // Variable de la pregunta del usuario
                string text2        = Request["resultados"];
                byte[] data2        = Convert.FromBase64String(text2);
                string questionUser = System.Text.Encoding.UTF8.GetString(data2);

                // Correo del usuario consultado en Webex Teams
                string text1     = Request["email"];
                byte[] data1     = Convert.FromBase64String(text1);
                string emailUser = System.Text.Encoding.UTF8.GetString(data1);

                string name = Request["name"];

                //

                SamiEntities db = new SamiEntities();


                // Get Data Connection CA

                // Query conexion usuarios

                var userName = (from users in _db.AspNetUsers where users.UserName == name select users).First();

                // Query conexión CA

                var connectionCA = (from connCa in _db.ConexionCAs where connCa.IdCompania == userName.CompanyId select connCa).First();

                // Query si ya fue calificado

                var qualifity = (from califica in _db.ChatReportSamis where califica.UserName == name orderby califica.Id descending select califica).First();

                // Variables
                var      answers = "";
                var      ticket  = "";
                string[] separar;
                string   casoID      = "";
                string   descripcion = "";
                string   estado      = "";

                var returnVal = "";


                if (qualifity.No_Caso != null)
                {
                    returnVal = "/Error_Page";
                }
                if (questionUser == "Si, quedé satisfecho con la calificación")
                {
                    // Se crea el caso

                    //Registrar casos service manager

                    var caseManager = new CasosGenerado
                    {
                        Numero_Caso = casoID,
                        Usuario     = name,
                        Descripcion = descripcion,
                        Estado      = estado,
                        Plataforma  = "Webex"
                    };

                    db.CasosGenerados.Add(caseManager);
                    db.SaveChanges();

                    returnVal = "/Success";
                }
                else if (questionUser == "No, deseo generar caso abierto")
                {
                    // Se crea el ticket

                    var caseManager = new CasosGenerado
                    {
                        Numero_Caso = casoID,
                        Usuario     = name,
                        Descripcion = descripcion,
                        Estado      = estado,
                        Plataforma  = "Webex"
                    };

                    db.CasosGenerados.Add(caseManager);
                    db.SaveChanges();

                    returnVal = "/Error";
                }

                return(RedirectToAction(returnVal, "BOT", new
                {
                    nombre = name,
                    idCase = casoID
                }));
            }

            return(View());
        }