Ejemplo n.º 1
0
        public ChatBotController(IHttpContextAccessor httpContextAccessor, UserManager <ApplicationUser> userManager)
        {
            _httpContextAccessor = httpContextAccessor;
            _credentials         = _session.GetObjectFromJson <WatsonCredentials>("Watson");

            var _credsTest = HttpContext?.Session?.GetObjectFromJson <WatsonCredentials>("Watson");

            _userManager = userManager;
        }
Ejemplo n.º 2
0
        public async Task <JsonResult> MessageChatAsync(string msg, bool isInit, bool isValid, string actionPayload)
        {
            try
            {
                string _attachment = null;

                if (_credentials == null)
                {
                    //IT-ORVAL=>Test-aje-jg->Aje group Paris
                    _credentials = new WatsonCredentials()
                    {
                        workspaceID = "ac6889fe-7f09-4f71-ac0e-4d8850b72d2f",
                        username    = "******",
                        password    = "******"
                    };
                }

                if (isInit)
                {
                    context = new Context();
                }

                if (!string.IsNullOrEmpty(actionPayload))
                {
                    if (context == null)
                    {
                        context = new Context();
                    }

                    context.Action = actionPayload;
                }

                if (context != null)
                {
                    context.Valid = isValid;

                    switch (context.Action)
                    {
                    case "emailToValidate":

                        if (!context.Valid)
                        {
                            break;
                        }

                        var userEmailToValidate = await _userManager.FindByEmailAsync(msg);

                        if (userEmailToValidate?.EmailConfirmed == false || userEmailToValidate == null)
                        {
                            context.Valid = false;
                            break;
                        }

                        MyGoogleUserInfo _userinfo = GetGoogleUserInfo(msg);

                        //if (!GoogleUser.IsEmailRegistered(msg))
                        //{
                        //    context.Valid = false;
                        //}

                        if (_userinfo == null || _userinfo.Suspended == true)
                        {
                            context.Valid = false;
                            //context = null;
                        }
                        else
                        {
                            context.UserName = _userinfo.GivenName;
                            context.Email    = msg;
                            context.Valid    = true;

                            //_attachment = "<a class='btn btn-default' href=javascript:getGoogleUserInfo('" +
                            //  msg + "');>Ver datos</a>";
                        }

                        break;

                    case "secretToValidate":

                        if (string.IsNullOrEmpty(context.Email))
                        {
                            break;
                        }

                        var user = await _userManager.FindByEmailAsync(context.Email);

                        var _decrypt = Helpers.Helpers.DecryptString(user?.SecretResponse, _keyEncode);

                        //Default if not encrypted secret response previously
                        if (string.IsNullOrEmpty(_decrypt))
                        {
                            _decrypt = user?.SecretResponse;
                        }

                        if (msg == _decrypt)
                        {
                            context.Valid = true;
                            //context.Action = null;
                        }
                        else
                        {
                            context.Valid = false;
                            //context.Action = "emailToValidate";
                        }

                        break;

                    case "confirmationToValidate":
                        if (context.Valid == true && context.Password != null)
                        {
                            string goog = RunPasswordReset(context.Email, context.Password);

                            if (goog.Contains("Error") || goog.Contains("forbidden"))
                            {
                                context.Action   = null;
                                context.Valid    = false;
                                context.Password = string.Empty;


                                if (goog.Contains("forbidden"))
                                {
                                    context.Error = "No tengo los privilegios suficientes para modificar la contraseña de un Administrador";
                                }
                                else
                                {
                                    context.Error = "Ha sucedido un error al momento de intentar actualizar la contraseña";
                                }


                                //if (goog.Contains("forbidden"))
                                //{
                                //	goog = "No tengo los privilegios suficientes para modificar la contraseña de un Administrador";
                                //}
                                //else
                                //{
                                //	goog = "Ha sucedido un error al momento de intentar actualizar la contraseña";
                                //}

                                //MessageRequest _msgGoog = new MessageRequest()
                                //{
                                //	Output = new OutputData()
                                //	{
                                //		Text = new List<string>()
                                //		{
                                //			goog
                                //		}
                                //	},
                                //	Context = context
                                //};

                                //return Json(JsonConvert.SerializeObject(_msgGoog));
                            }
                        }

                        break;

                    case "ListPerfiles":
                        List <string> _listPerfiles = await SOAPservice.GetListPerfilesAsync();

                        context.Action = null;

                        MessageRequest _message = new MessageRequest()
                        {
                            Output = new OutputData()
                            {
                                Text = _listPerfiles
                            },
                            Context = context
                        };

                        var obj = JsonConvert.SerializeObject(_message);

                        return(Json(obj));

                    case "AddServiceCall":

                        //Test
                        //if (string.IsNullOrEmpty(context.Email))
                        //{
                        //    context.Email = "*****@*****.**";
                        //}

                        if (string.IsNullOrEmpty(context.Email))
                        {
                            context.Email = "*****@*****.**";
                        }


                        SOAPservice.ArandaUser _user = await SOAPservice.GetArandaUserInfo(context.Email);

                        SOAPservice.ArandaTicket ticket = await SOAPservice.SetArandaNewTicketAsync(_user);

                        string msgTicket;

                        if (string.IsNullOrEmpty(ticket.TicketNumber))
                        {
                            msgTicket = "Correo electrónico no registrado en Aranda. No se pudo crear ticket.";
                        }
                        else
                        {
                            msgTicket = string.Format("El ticket {0} ha sido creado con exito!", ticket.TicketNumber);
                        }

                        context.Action = null;

                        MessageRequest _msgAddTicket = new MessageRequest()
                        {
                            Output = new OutputData()
                            {
                                Text = new List <string>()
                                {
                                    msgTicket
                                }
                            },
                            Context = context
                        };

                        var objAdTicket = JsonConvert.SerializeObject(_msgAddTicket);

                        return(Json(objAdTicket));

                    default:
                        break;
                    }
                }


                MessageRequest result = Message(msg, context, _credentials);

                context.Error = null;

                if (result.Intents != null)
                {
                    string myIntent = result.Intents[0].IntentDescription;
                    string myAction = context?.Action;

                    switch (myIntent)
                    {
                    case "clima":
                        string _forecast = await CallWeatherAsync(null, null);

                        if (!string.IsNullOrEmpty(_forecast))
                        {
                            result.Output.Text.Add(_forecast);
                        }

                        break;

                    case "menu":
                        ButtonListTemplate _menu = new ButtonListTemplate()
                        {
                            Buttons = new List <ButtonTemplate>()
                            {
                                new ButtonTemplate()
                                {
                                    HrefLink = "javascript:sendRequest(false,'ListPerfiles',true);", Text = "Listado de Perfiles"
                                },
                                new ButtonTemplate()
                                {
                                    HrefLink = "javascript:sendRequest(false,'AddServiceCall',true);", Text = "Crear Ticket"
                                },
                            }
                        };

                        _attachment = ButtonListConstructor(_menu);

                        break;

                    case "productos":

                        _attachment = CarouselConstructor(GetCarouselList());

                        break;

                    default:
                        break;
                    }
                }


                context = result.Context;

                switch (context.Action)
                {
                case "secretToValidate":

                    context.Valid = false;

                    if (string.IsNullOrEmpty(context.Email) || !IsValidEmail(context.Email))
                    {
                        break;
                    }

                    var user = await _userManager.FindByEmailAsync(context.Email);

                    var _decrypt = Helpers.Helpers.DecryptString(user?.SecretResponse, _keyEncode);

                    //Default if not encrypted secret response previously
                    if (string.IsNullOrEmpty(_decrypt))
                    {
                        _decrypt = user?.SecretResponse;
                    }

                    if (msg == _decrypt)
                    {
                        context.Valid = true;
                        break;
                    }

                    if (user != null)
                    {
                        result.Output.Text.Add(user.SecretQuestion);
                    }
                    else
                    {
                        result.Output = new OutputData()
                        {
                            Text = new List <string>()
                            {
                                "Debe registrarse primero en la aplicación"
                            }
                        };

                        //context.Valid = false;
                        context = new Context();
                    }



                    break;

                case "success":

                    //_attachment = "<a class='btn btn-default' href=javascript:getGoogleUserInfo('" +
                    // context.Email + "');>Ver datos</a>";
                    //_attachment = _attachment + "<br />";
                    //_attachment = _attachment + "<a class='btn btn-default' href=javascript:getGoogleTokens('" +
                    //       context.Email + "');>Generar Tokens</a>";

                    SOAPservice.ArandaUser _user = await SOAPservice.GetArandaUserInfo(context.Email);

                    SOAPservice.ArandaTicket ticket = await SOAPservice.SetArandaNewTicketAsync(_user);

                    string msgTicket;

                    if (string.IsNullOrEmpty(ticket.TicketNumber))
                    {
                        msgTicket = "Correo electrónico no registrado en Aranda. No se pudo crear ticket.";
                    }
                    else
                    {
                        string _IdbyProject = await SOAPservice.GetArandaProjectTicketAsync(ticket.TicketNumber);

                        msgTicket = string.Format("El ticket {0} ha sido creado con exito!", _IdbyProject);
                    }

                    context = new Context();
                    result.Output.Text.Add(msgTicket);

                    break;

                default:
                    break;
                }


                //if (context.Action == "success")
                //{
                //    _attachment = "<a class='btn btn-default' href=javascript:getGoogleUserInfo('" +
                //          context.Email + "');>Ver datos</a>";
                //    _attachment = _attachment + "<br />";
                //    _attachment = _attachment + "<a class='btn btn-default' href=javascript:getGoogleTokens('" +
                //           context.Email + "');>Generar Tokens</a>";
                //}

                if (!string.IsNullOrEmpty(_attachment))
                {
                    result.Output.Text.Add(_attachment);
                }

                var json = JsonConvert.SerializeObject(result);

                return(Json(json));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);

                return(null);
            }
        }
        public static MessageRequest Message(string text, Context ctx, WatsonCredentials creds)
        {
            MessageRequest messageRequest = new MessageRequest();

            if (text == null)
            {
                List <Intent> myIntents = new List <Intent>();

                myIntents.Add(new Intent()
                {
                    Confidence        = 1,
                    IntentDescription = "algomas"
                });

                messageRequest.Intents = myIntents;
            }
            else
            {
                messageRequest.Input = new InputData()
                {
                    Text = text
                };
            }


            if (ctx != null && ctx.System != null)
            {
                messageRequest.Context = ctx;
            }

            _conversation = new ConversationService(creds.username, creds.password);


            var result = _conversation.Message(creds.workspaceID, messageRequest);

            if (result != null)
            {
                if (result.Intents.Count > 0)
                {
                    messageRequest.Intents = result.Intents;
                }
                else
                {
                    Console.WriteLine("Intents vacíos");
                }

                if (result.Output != null)
                {
                    messageRequest.Context = result.Context.ToObject <Context>();
                    messageRequest.Output  = result.Output.ToObject <OutputData>();

                    return(messageRequest);
                }
                else
                {
                    return(messageRequest);
                }
            }
            else
            {
                return(messageRequest);
            }
        }