Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.ncubo.conf;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.Hashtable;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import java.util.UUID;
- import java.util.zip.ZipException;
- import javax.annotation.PostConstruct;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.stereotype.Component;
- import org.springframework.web.multipart.MultipartFile;
- import org.springframework.web.multipart.MultipartHttpServletRequest;
- import com.ibm.watson.developer_cloud.conversation.v1.model.Entity;
- import com.ibm.watson.developer_cloud.conversation.v1.model.Intent;
- import com.ibm.watson.developer_cloud.conversation.v1.model.MessageResponse;
- import com.ibm.watson.developer_cloud.text_to_speech.v1.model.AudioFormat;
- import com.ncubo.agencias.Agencias;
- import com.ncubo.agencias.FraseDeLaAgencia;
- import com.ncubo.bambu.util.ControladorDeConversacionesConBambu;
- import com.ncubo.bambu.util.ConversacionesConBambu.TiposDeMensajesConBambu;
- import com.ncubo.chatbot.audios.ControladorDeAudios;
- import com.ncubo.chatbot.bitacora.HistoricosDeConversaciones;
- import com.ncubo.chatbot.configuracion.Constantes;
- import com.ncubo.chatbot.configuracion.Constantes.TiposDeVariables;
- import com.ncubo.chatbot.contexto.Variable;
- import com.ncubo.chatbot.partesDeLaConversacion.Frase;
- import com.ncubo.chatbot.partesDeLaConversacion.Imagen;
- import com.ncubo.chatbot.partesDeLaConversacion.Salida;
- import com.ncubo.chatbot.partesDeLaConversacion.Sonido;
- import com.ncubo.chatbot.partesDeLaConversacion.Vineta;
- import com.ncubo.chatbot.watson.SpeechToTextWatson;
- import com.ncubo.chatbot.watson.TextToSpeechWatson;
- import com.ncubo.data.Configuracion;
- import com.ncubo.db.ConexionALaDB;
- import com.ncubo.logDeLasConversaciones.InformacionParaCrearElChat;
- import com.ncubo.logicaDeConversaciones.ConversacionesConLosClientes;
- import com.ncubo.util.FTPServidor;
- import com.ncubo.util.GestorDeArchivos;
- @Component
- @ConfigurationProperties("servercognitivo")
- public class AgenteCognitivo {
- private String user;
- private String password;
- private String workspaceDeChats;
- private String workspaceDeConocerte;
- private String userTextToSpeech;
- private String passwordTextToSpeech;
- private String voiceTextToSpeech;
- private String pathAudio;
- private String pathXML;
- private String urlPublicaAudios;
- private String pathXMLAudios;
- private String userSpeechToText;
- private String passwordSpeechToText;
- private String voiceSpeechToText;
- private String apiKeyGoogle;
- private String apiSTT;
- private String nombreDelAgenteCognitivo;
- private String idDelAgenteCognitivo;
- @Autowired
- private Agencias agencias;
- //@Autowired
- //private UsuarioDao usuarioDao;
- @Autowired
- private FTPServidor ftp;
- @Autowired
- private ConversacionesConLosClientes misConversacionesConLosClientes;
- private HistoricosDeConversaciones historicoDeConversaciones;
- private ControladorDeAudios audios;
- @Autowired
- private ExtraerDatosWebService extraerDatos;
- @Autowired
- private Configuracion config;
- @Autowired
- private ControladorDeConversacionesConBambu controladorDeConversacionesConBambu;
- @Autowired
- private GestorDeArchivos gestorDeArchivos;
- private HiloParaMonitorearLaBandejaDeCorreos hiloParaMonitorearLaBandejaDeCorreos;
- @PostConstruct
- public void init(){
- misConversacionesConLosClientes.inicializar(getPathXML());
- inicializarGeneradorDeAudiosSingleton();
- inicializadorDeLaBD();
- historicoDeConversaciones = new HistoricosDeConversaciones();
- //generarTodosLosAudiosEstaticosInternamente();
- audios = new ControladorDeAudios(ftp.getUsuario(), ftp.getPassword(), ftp.getHost(), ftp.getPuerto(), ftp.getCarpeta(), this.getPathAudio());
- hiloParaMonitorearLaBandejaDeCorreos = new HiloParaMonitorearLaBandejaDeCorreos();
- hiloParaMonitorearLaBandejaDeCorreos.start();
- }
- public String procesarMensajeChat(String idCliente, Usuario usuario, String mensaje,
- Hashtable<String, Variable> datosDelUsuario) throws Exception
- {
- return procesarMensaje(idCliente, usuario, mensaje, datosDelUsuario, false);
- }
- public String procesarMensajeChatV3(String idCliente, Usuario usuario, String mensaje, Hashtable<String,
- Variable> datosDelUsuario, boolean usarAgenteCognitivo) throws Exception
- {
- return procesarMensajeV3(idCliente, usuario, mensaje, datosDelUsuario, false, usarAgenteCognitivo);
- }
- public String procesarMensajeConocerte(Usuario usuario, String mensaje, Date date) throws Exception
- {
- return procesarMensajeConocerte(usuario, mensaje, date, workspaceDeConocerte);
- }
- public String procesarMensajeVoz(String idCliente, Usuario usuario, MultipartHttpServletRequest request, Hashtable<String, Variable> datosDelUsuario) throws Exception{
- String respuestaAlCliente = "";
- Iterator<String> itrator = request.getFileNames();
- MultipartFile multiFile = request.getFile(itrator.next());
- try {
- UUID idOne = UUID.randomUUID();
- String nombreDelArchivo = idOne + ".mp3";
- nombreDelArchivo = nombreDelArchivo.replace("-", "");
- String path = request.getServletContext().getRealPath("/");
- // making directories for our required path.
- byte[] bytes = multiFile.getBytes();
- File directory = new File(path+ "/uploads");
- directory.mkdirs();
- // saving the file
- File file = new File(directory.getAbsolutePath()+System.getProperty("file.separator")+idOne+".wav");
- BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(file));
- stream.write(bytes);
- stream.flush();
- stream.close();
- AudioFormat audioFormat = AudioFormat.WAV;
- File temp = new File(System.getProperty("user.home") + "/audios-de-watson");
- if(!temp.exists()){
- temp.mkdir();
- temp.deleteOnExit();
- }
- InputStream mp3InputStream = TextToSpeechWatson.getInstance().transformarAMp3(
- new FileInputStream(file.getAbsolutePath()), audioFormat.name().toLowerCase(), temp);
- transferirAudiosAlFTP(mp3InputStream, idCliente, nombreDelArchivo);
- //Transform audio received to text
- String respuesta = this.transformarAudioATexto(file, getApiSTT(), idCliente);
- System.out.println("El audio dice: "+respuesta);
- respuestaAlCliente = procesarMensaje(idCliente, usuario, respuesta, datosDelUsuario, true);
- file.delete();
- } catch (Exception e) {
- throw new Exception("Error while loading the file");
- }
- return respuestaAlCliente;
- }
- public String procesarMensajeVozV3(String idCliente, Usuario usuario, MultipartHttpServletRequest request,
- Hashtable<String, Variable> datosDelUsuario, boolean usarAgenteCognitivo) throws Exception{
- return procesarMensajeVozV4(idCliente, usuario, request,
- datosDelUsuario, usarAgenteCognitivo, Constantes.ORIGEN_CHAT_APP, "");
- }
- public String procesarMensajeVozV4(String idCliente, Usuario usuario, MultipartHttpServletRequest request,
- Hashtable<String, Variable> datosDelUsuario, boolean usarAgenteCognitivo,
- String origen, String idInfoContacto) throws Exception{
- String respuestaAlCliente = "";
- Iterator<String> itrator = request.getFileNames();
- MultipartFile multiFile = request.getFile(itrator.next());
- try {
- UUID idOne = UUID.randomUUID();
- String nombreDelArchivo = idOne + ".mp3";
- nombreDelArchivo = nombreDelArchivo.replace("-", "");
- String path = request.getServletContext().getRealPath("/");
- // making directories for our required path.
- byte[] bytes = multiFile.getBytes();
- File directory = new File(path+ "/uploads");
- directory.mkdirs();
- // saving the file
- File file = new File(directory.getAbsolutePath()+System.getProperty("file.separator")+idOne+".wav");
- BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(file));
- stream.write(bytes);
- stream.flush();
- stream.close();
- AudioFormat audioFormat = AudioFormat.WAV;
- File temp = new File(System.getProperty("user.home") + "/audios-de-watson");
- if(!temp.exists()){
- temp.mkdir();
- temp.deleteOnExit();
- }
- InputStream mp3InputStream = TextToSpeechWatson.getInstance().transformarAMp3(
- new FileInputStream(file.getAbsolutePath()), audioFormat.name().toLowerCase(), temp);
- transferirAudiosAlFTP(mp3InputStream, idCliente, nombreDelArchivo);
- //Transform audio received to text
- String respuesta = this.transformarAudioATexto(file, getApiSTT(), idCliente);
- Salida salida = new Salida();
- String miUrl = TextToSpeechWatson.getInstance().obtenerUrlPublicaDeAudios()+idCliente+"-"+nombreDelArchivo;
- salida.escribir(new Sonido(miUrl, ""), null, null, null);
- String idMensaje = "";
- try{
- idMensaje = datosDelUsuario.get("idDelMensaje").getValorDeLaVariable()[0];
- }catch(Exception e){}
- String tipoDeProceso = "";
- try{
- tipoDeProceso = datosDelUsuario.get("tipoDeProceso").getValorDeLaVariable()[0];
- }catch(Exception e){}
- InformacionParaCrearElChat informacionParaCrearElChat = new InformacionParaCrearElChat(usuario.getIdDeLaConversacion(),
- usuario.getUsuarioIdBambu(), idCliente, tipoDeProceso, origen, idInfoContacto);
- controladorDeConversacionesConBambu.guardarUnHistorico(idMensaje, salida, null,
- TiposDeMensajesConBambu.HTML, informacionParaCrearElChat);
- System.out.println("El audio dice: "+respuesta);
- respuestaAlCliente = procesarMensajeV3(idCliente, usuario, respuesta, datosDelUsuario, true, usarAgenteCognitivo);
- file.delete();
- } catch (Exception e) {
- throw new Exception("Error while loading the file");
- }
- return respuestaAlCliente;
- }
- public String procesarUnaImagen(String idCliente, Usuario usuario, MultipartHttpServletRequest uploadImage, Hashtable<String, Variable> datosDelUsuario){
- return procesarUnaImagenV1(idCliente, usuario, uploadImage,
- datosDelUsuario, Constantes.ORIGEN_CHAT_APP, "");
- }
- public String procesarUnaImagenV1(String idCliente, Usuario usuario, MultipartHttpServletRequest uploadImage,
- Hashtable<String, Variable> datosDelUsuario, String origen, String idInfoContacto){
- String respuestaAlCliente = "";
- JSONObject respuesta = new JSONObject();
- try {
- Iterator<String> itrator = uploadImage.getFileNames();
- MultipartFile multiFile = uploadImage.getFile(itrator.next());
- String direccionArchivo = gestorDeArchivos.subirArchivo(multiFile, idCliente);
- if( ! direccionArchivo.isEmpty()){
- respuestaAlCliente = "/"+idCliente+TextToSpeechWatson.getInstance().obtenerUrlPublicaDeAudios()+idCliente+"-"+direccionArchivo;
- Salida salida = new Salida();
- salida.escibirUnaImagen(new Imagen(respuestaAlCliente));
- String idMensaje = "";
- try{
- idMensaje = datosDelUsuario.get("idDelMensaje").getValorDeLaVariable()[0];
- }catch(Exception e){}
- String tipoDeProceso = "";
- try{
- tipoDeProceso = datosDelUsuario.get("tipoDeProceso").getValorDeLaVariable()[0];
- }catch(Exception e){}
- InformacionParaCrearElChat informacionParaCrearElChat = new InformacionParaCrearElChat(usuario.getIdDeLaConversacion(),
- usuario.getUsuarioIdBambu(), idCliente, tipoDeProceso, origen, idInfoContacto);
- controladorDeConversacionesConBambu.guardarUnHistorico(idMensaje, salida, null,
- TiposDeMensajesConBambu.HTML, informacionParaCrearElChat);
- }else{
- respuestaAlCliente = "error";
- }
- } catch (ZipException e) {
- // TODO Auto-generated catch block
- // e.printStackTrace();
- respuestaAlCliente = "error";
- } catch (IOException e) {
- // TODO Auto-generated catch block
- // e.printStackTrace();
- respuestaAlCliente = "error";
- }
- try {
- respuesta.put("respuesta", respuestaAlCliente);
- } catch (JSONException e) {}
- return respuesta.toString();
- }
- private ArrayList<Salida> seleccionarAgenciasADecir(Salida respuestaDeWatson){
- ArrayList<Salida> resupuesta = new ArrayList<Salida>();
- boolean hayAutobancos = false;
- boolean hayAgencias = true;
- if(respuestaDeWatson != null){
- if(respuestaDeWatson.obtenerLaRespuestaDeIBM().messageResponse() != null){
- if(respuestaDeWatson.obtenerLaRespuestaDeIBM().messageResponse().getContext() != null){
- String departamento = "";
- String ciudad = "";
- String nombreDeAgencia = "";
- for(Map.Entry<String, Object> contexto : respuestaDeWatson.obtenerLaRespuestaDeIBM().messageResponse().getContext().entrySet()) {
- if(contexto.getKey().equals("departamento")){
- System.out.println("Contexto: "+contexto.getKey()+", valor: "+contexto.getValue());
- departamento = contexto.getValue().toString();
- if(departamento.equals("nada")){
- departamento = "";
- }
- }else if(contexto.getKey().equals("ciudad")){
- System.out.println("Contexto: "+contexto.getKey()+", valor: "+contexto.getValue());
- ciudad = contexto.getValue().toString();
- if(ciudad.equals("nada")){
- ciudad = "";
- }
- }else if(contexto.getKey().equals("nombreDeAgencia")){
- System.out.println("Contexto: "+contexto.getKey()+", valor: "+contexto.getValue());
- nombreDeAgencia = contexto.getValue().toString();
- if(nombreDeAgencia.equals("nada")){
- nombreDeAgencia = "";
- }
- }
- }
- Salida miAgencia = new Salida();
- Frase fraseDeLaAgencia = null;
- FraseDeLaAgencia respuesta = null;
- if( ! nombreDeAgencia.isEmpty() ){
- respuesta = agencias.buscarAgenciasPorNombre(nombreDeAgencia);
- }else{
- respuesta = agencias.buscarAgenciasPorCuidadYDepartamento(ciudad, departamento);
- }
- fraseDeLaAgencia = respuesta.getFrase();
- hayAutobancos = respuesta.isHayAutobancos();
- hayAgencias = respuesta.isHayAgencias();
- if(fraseDeLaAgencia != null){
- miAgencia.escribir(fraseDeLaAgencia.texto(), respuestaDeWatson.obtenerLaRespuestaDeIBM(), respuestaDeWatson.getTemaActual(), fraseDeLaAgencia);
- }else{
- fraseDeLaAgencia = respuestaDeWatson.getTemaActual().buscarUnaFrase("noHayAgenciasParaMostrar", null);
- miAgencia.escribir(fraseDeLaAgencia.texto(), respuestaDeWatson.obtenerLaRespuestaDeIBM(), respuestaDeWatson.getTemaActual(), fraseDeLaAgencia);
- }
- if(hayAgencias){
- if(hayAutobancos){
- resupuesta.add(respuestaDeWatson);
- }else{
- Salida sinAutobancos = new Salida();
- Frase fraseDeSinAutobanco = respuestaDeWatson.getTemaActual().buscarUnaFrase("mostrarSinAutobancos", null);
- //int idDelSonidoAUsar = Integer.valueOf(fraseDeSinAutobanco.texto());
- //Sonido sonido = fraseDeSinAutobanco.obtenerSonidoAUsar(idDelSonidoAUsar);
- sinAutobancos.escribir(fraseDeSinAutobanco.texto(), respuestaDeWatson.obtenerLaRespuestaDeIBM(), respuestaDeWatson.getTemaActual(), fraseDeSinAutobanco);
- //sinAutobancos.escribir(sonido, respuestaDeWatson.obtenerLaRespuestaDeIBM(), respuestaDeWatson.getTemaActual(), fraseDeSinAutobanco);
- resupuesta.add(sinAutobancos);
- }
- resupuesta.add(miAgencia);
- }else{
- resupuesta.add(miAgencia);
- }
- }
- }
- }
- return resupuesta;
- }
- private String procesarMensaje(String idCliente, Usuario usuario, String mensaje,
- Hashtable<String, Variable> datosEnVariables, boolean vieneDeUnAudio) throws Exception
- {
- JSONObject respuesta = new JSONObject();
- String[] textos = null;
- ArrayList<Salida> salidas = misConversacionesConLosClientes.conversarConElAgente(idCliente, usuario, mensaje, datosEnVariables);
- String texto = "";
- JSONArray arrayList = new JSONArray();
- System.out.println(salidas.size());
- boolean seTerminoElChat = false;
- for(int i = 0; i < salidas.size(); i++){
- texto = salidas.get(i).getMiTexto();
- System.out.println();
- System.out.println("texto "+texto);
- System.out.println();
- String idFrase = salidas.get(i).getFraseActual().obtenerNombreDeLaFrase();
- texto = texto.replace("$", "");
- if(idFrase.equals("saldoCredito") && usuario.getEstaLogueado())
- {
- textos = extraerDatos.obtenerSaldoTarjetaCredito( texto, usuario.getLlaveSession(), usuario.getUsuarioId());
- for(int j = 0; j < textos.length; j++)
- {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("texto", textos[j]);
- jsonObject.put("audio", "");
- arrayList.put(jsonObject);
- }
- }
- else if(idFrase.equals("disponibleCredito") && usuario.getEstaLogueado())
- {
- textos = extraerDatos.obtenerDisponibleTarjetaCredito(texto, usuario.getLlaveSession(), usuario.getUsuarioId());
- for(int j = 0; j < textos.length; j++)
- {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("texto", textos[j]);
- jsonObject.put("audio", "");
- arrayList.put(jsonObject);
- }
- }
- else if((idFrase.equals("saldoCuentaAhorros") || idFrase.equals("disponibleCuentaAhorros")) && usuario.getEstaLogueado())
- {
- textos = extraerDatos.obtenerSaldoCuentaAhorros(texto, usuario.getLlaveSession(), usuario.getUsuarioId());
- for(int j = 0; j < textos.length; j++)
- {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("texto", textos[j]);
- jsonObject.put("audio", "");
- arrayList.put(jsonObject);
- }
- }
- else if(idFrase.equals("tasaDolar")||idFrase.equals("tasaEuro")){
- texto = extraerDatos.obtenerTasaCambio(texto);
- if(!arrayList.toString().contains("\"texto\":\""+texto+"\""))
- {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("texto", texto);
- jsonObject.put("audio", urlPublicaAudios+TextToSpeechWatson.getInstance().getAudioToURL(texto, true, idCliente));
- arrayList.put(jsonObject);
- }
- }
- else if(idFrase.equals("movimientosTarjeta") || idFrase.equals("movimientosCuenta") && usuario.getEstaLogueado())
- {
- if(idFrase.equals("movimientosTarjeta"))
- textos = extraerDatos.obtenerMovimientos(texto, usuario.getLlaveSession(), usuario.getUsuarioId(), "4");
- if(idFrase.equals("movimientosCuenta"))
- textos = extraerDatos.obtenerMovimientos(texto, usuario.getLlaveSession(), usuario.getUsuarioId(), "2");
- for(int j = 0; j < textos.length; j++)
- {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("texto", textos[j]);
- jsonObject.put("audio", "");
- arrayList.put(jsonObject);
- }
- }else if(idFrase.equals("mostrarAgencias")){
- ArrayList<Salida> agencias = seleccionarAgenciasADecir(salidas.get(i));
- for(Salida agencia: agencias){
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("texto", agencia.getMiTexto());
- jsonObject.put("audio", agencia.getMiSonido().url());
- arrayList.put(jsonObject);
- }
- }
- else{
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("texto", texto);
- jsonObject.put("audio", salidas.get(i).getMiSonido().url());
- arrayList.put(jsonObject);
- }
- if(salidas.get(i).seTerminoElChat() || idFrase.equals("despedida") || idFrase.equals("noQuiereHacerOtraConsulta"))
- seTerminoElChat = true;
- }
- respuesta.put("textos", arrayList);
- respuesta.put("seTerminoElChat", seTerminoElChat);
- System.out.println("Respuesta Chat: "+ respuesta.toString());
- /*String loQueElClienteDijo = "";
- try {
- loQueElClienteDijo = salidas.get(0).obtenerLaRespuestaDeIBM().loQueElClienteDijoFue();
- }catch(Exception e){
- loQueElClienteDijo = "Hola!";
- }
- historicoDeConversaciones.agregarHistorialALaConversacion(usuario.getIdSesion(), loQueElClienteDijo, respuesta.toString());*/
- return respuesta.toString();
- }
- private String procesarMensajeConocerte(Usuario usuario, String mensaje, Date date, String workspace) throws Exception
- {
- JSONObject respuesta = new JSONObject();
- String texto = "";
- JSONArray arrayList = new JSONArray();
- ArrayList<Salida> salida = null;
- boolean seTerminoElChat = false;
- /*if(usuario.getEstaLogueado()){
- salida = misConversacionesConLosClientes.conversarConElAgente(usuario, mensaje, true);
- for(int i = 0; i < salida.size(); i++){
- texto = salida.get(i).getMiTexto();
- String idFrase = salida.get(i).getFraseActual().obtenerNombreDeLaFrase();
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("texto", texto);
- jsonObject.put("audio", salida.get(i).getMiSonido().url());
- arrayList.put(jsonObject);
- if(idFrase.equals("despedidaConocerte"))
- {
- seTerminoElChat = true;
- Categorias categorias = new Categorias(
- obtenerValorDeGustosDeRestaurantes(usuario.getUsuarioId()),
- obtenerValorDeGustosDeBelleza(usuario.getUsuarioId()),
- obtenerValorDeGustosDeHoteles(usuario.getUsuarioId())
- );
- usuarioDao.insertar(usuario.getUsuarioId(), categorias);
- usuario.setCategorias(categorias);
- }
- }
- }
- respuesta.put("textos", arrayList);
- respuesta.put("seTerminoElChat", seTerminoElChat);
- System.out.println("Respuesta Conocerte: "+ respuesta.toString());
- if(usuario.getEstaLogueado()){
- String loQueElClienteDijo = "";
- try {
- loQueElClienteDijo = salida.get(0).obtenerLaRespuestaDeIBM().loQueElClienteDijoFue();
- }catch(Exception e){
- loQueElClienteDijo = "Hola!";
- }
- //historicoDeConversaciones.agregarHistorialALaConversacionEspecifica(usuario.getIdSesion(), loQueElClienteDijo, respuesta.toString());
- }*/
- return respuesta.toString();
- }
- private String procesarMensajeV3(String idCliente, Usuario usuario, String mensaje, Hashtable<String,
- Variable> datosEnVariables, boolean vieneDeUnAudio, boolean usarAgenteCognitivo) throws Exception
- {
- String tipoDeProceso = "";
- try{
- tipoDeProceso = datosEnVariables.get("tipoDeProceso").getValorDeLaVariable()[0];
- }catch(Exception e){}
- InformacionParaCrearElChat informacionParaCrearElChat = new InformacionParaCrearElChat(usuario.getIdDeLaConversacion(),
- usuario.getUsuarioIdBambu(), idCliente, tipoDeProceso, Constantes.ORIGEN_CHAT_APP, "");
- return procesarMensajeV4(idCliente, usuario, mensaje, datosEnVariables, vieneDeUnAudio,
- usarAgenteCognitivo, informacionParaCrearElChat);
- /*return procesarMensajeDeCorreo(idCliente, usuario, "Estimado Asociad@:\r\n" +
- "Nos complace enviarle su Estado de Cuenta con corte al dÃa 12 de Octubre del 2017.\r\n" +
- "\r\n" +
- "Cordialmente,", datosEnVariables, false, true, "Hola Ncubo", "sergio@gmail.com");*/
- }
- public String procesarMensajeDeCorreo(String idCliente, Usuario usuario, String mensaje, Hashtable<String,
- Variable> datosEnVariables, boolean vieneDeUnAudio, boolean usarAgenteCognitivo, String titulo, String correo) throws Exception {
- String tipoDeProceso = "";
- try{
- tipoDeProceso = datosEnVariables.get("tipoDeProceso").getValorDeLaVariable()[0];
- }catch(Exception e){}
- InformacionParaCrearElChat informacionParaCrearElChat = new InformacionParaCrearElChat(usuario.getIdDeLaConversacion(),
- usuario.getUsuarioIdBambu(), idCliente, tipoDeProceso, Constantes.ORIGEN_CHAT_EMAIL, correo);
- informacionParaCrearElChat.setTituloDelChat(titulo);
- return procesarMensajeV4(idCliente, usuario, mensaje, datosEnVariables, vieneDeUnAudio,
- usarAgenteCognitivo, informacionParaCrearElChat);
- }
- private String procesarMensajeV4(String idCliente, Usuario usuario, String mensaje, Hashtable<String,
- Variable> datosEnVariables, boolean vieneDeUnAudio, boolean usarAgenteCognitivo, InformacionParaCrearElChat informacionParaCrearElChat) throws Exception
- {
- JSONObject respuesta = new JSONObject();
- if(! mensaje.isEmpty()){
- if( ! mensaje.contains(Constantes.nuevoChat)){
- String idChat = controladorDeConversacionesConBambu.enviarMensajeDeTexto(mensaje, TiposDeMensajesConBambu.HTML, informacionParaCrearElChat);
- if( ! vieneDeUnAudio){
- Salida salida = new Salida();
- salida.escribir(mensaje, null, null, null);
- String idMensaje = "";
- try{
- idMensaje = datosEnVariables.get("idDelMensaje").getValorDeLaVariable()[0];
- }catch(Exception e){}
- if( ! usuario.getIdDeLaConversacion().equals(idChat)){
- usuario.setIdDeLaConversacion(idChat);
- }
- controladorDeConversacionesConBambu.guardarUnHistorico(idMensaje,
- salida, null, TiposDeMensajesConBambu.HTML, informacionParaCrearElChat);
- }
- }else{
- controladorDeConversacionesConBambu.crearUnaConversacion(informacionParaCrearElChat);
- //controladorDeConversacionesConBambu.enviarMensajeDeTexto(usuario.getIdDeLaConversacion(), usuario.getUsuarioIdBambu(), "hola", TiposDeMensajesConBambu.HTML, idCliente, tipoDeProceso);
- }
- if(usarAgenteCognitivo){
- if( controladorDeConversacionesConBambu.obtenerElUsuarioQueInicializoLaConversacion(usuario.getIdDeLaConversacion()).equals(usuario.getUsuarioIdBambu())
- || mensaje.contains(Constantes.nuevoChat) || mensaje.contains("@"+this.getNombreDelAgenteCognitivo())){
- ArrayList<Salida> salidas = misConversacionesConLosClientes.conversarConElAgente(idCliente, usuario, mensaje, datosEnVariables);
- String texto = "";
- JSONArray arrayList = new JSONArray();
- System.out.println(salidas.size());
- boolean seTerminoElChat = false;
- ArrayList<Vineta> misVinetas = new ArrayList<Vineta>();
- boolean seEntendioLaRespuesta = true;
- for(int i = 0; i < salidas.size(); i++){
- texto = salidas.get(i).getMiTexto();
- System.out.println();
- System.out.println("Texto: "+texto);
- System.out.println();
- String idFrase = salidas.get(i).getFraseActual().obtenerNombreDeLaFrase();
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("texto", texto);
- jsonObject.put("audio", salidas.get(i).getMiSonido().url());
- if(salidas.get(i).getMisVinetas().size() > 0){
- for(Vineta miVineta: salidas.get(i).getMisVinetas()){
- if(miVineta.getTipoDeVineta().equals(Constantes.TIPO_VINETA_ILUSTRATIVA))
- jsonObject.put("vineta", miVineta.getContenido());
- else
- misVinetas.add(miVineta);
- }
- }else{
- jsonObject.put("vineta", "");
- }
- arrayList.put(jsonObject);
- if(salidas.get(i).seTerminoElChat() || idFrase.equals("despedida") || idFrase.equals("noQuiereHacerOtraConsulta")){
- //borrarUnaConversacion(idCliente, usuario.getIdSesion());
- seTerminoElChat = true;
- }
- if( idFrase.contains("noEntendi") || idFrase.contains("fueraDeContextoGeneral") || idFrase.contains("errorDeComunicacionConWatson") ||
- idFrase.contains("quiereHacerOtraConsulta") || idFrase.contains("noQuiereHacerOtraConsulta") ||
- idFrase.contains("conjuncionRepetirFrase") || idFrase.contains("recordatorTemasPendientes") ||
- idFrase.contains("consultaAsehologic") || idFrase.contains("consultaAsehologicDatosPersonales") ||
- texto.contains("no te entiendo") || texto.contains("No logro comprenderte")){
- seEntendioLaRespuesta = false;
- }
- if( seEntendioLaRespuesta ){
- informacionParaCrearElChat.setIdUsuarioQuienLoCreo(this.getIdDelAgenteCognitivo());
- if( ! texto.isEmpty() && ! mensaje.contains(Constantes.nuevoChat)){
- controladorDeConversacionesConBambu.enviarMensajeDeTexto(texto, TiposDeMensajesConBambu.HTML, informacionParaCrearElChat);
- }
- controladorDeConversacionesConBambu.guardarUnHistorico("", salidas.get(i), null,
- TiposDeMensajesConBambu.HTML, informacionParaCrearElChat);
- }
- }
- respuesta.put("textos", arrayList);
- respuesta.put("seTerminoElChat", seTerminoElChat);
- if( ! misVinetas.isEmpty()){
- JSONArray vinetas = new JSONArray();
- for(Vineta miVineta: misVinetas){
- vinetas.put(miVineta);
- }
- respuesta.put("vinetas", vinetas);
- }else{
- respuesta.put("vinetas", "");
- }
- System.out.println("Respuesta del Chat Cognitivo: "+ respuesta.toString());
- }
- }
- }
- return respuesta.toString();
- }
- public String getIntent(MessageResponse response)
- {
- List<Intent> intents = response.getIntents();
- float confidence = 0;
- String intent = "";
- for(int i = 0; i < intents.size(); i++ )
- {
- System.out.println("intent "+ intents.get(i).getIntent()+" "+intents.get(i).getConfidence().floatValue());
- if(intents.get(i).getConfidence().floatValue()> confidence)
- {
- confidence = intents.get(i).getConfidence().floatValue();
- intent = intents.get(i).getIntent();
- }
- }
- return intent;
- }
- public String getText(MessageResponse response)
- {
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append("");
- List<String> mensajes = response.getText();
- for (String mensaje : mensajes)
- {
- stringBuilder.append(mensaje);
- }
- return stringBuilder.toString();
- }
- public String[] getEntities(MessageResponse response)
- {
- List<Entity> entities = response.getEntities();
- String[] entitiesArray = new String [entities.size()];
- for(int i = 0; i < entities.size(); i++ )
- {
- entitiesArray[i]= entities.get(i).getEntity();
- }
- return entitiesArray;
- }
- public String getVariable(String context, String variable) throws JSONException
- {
- String value = "";
- JSONObject json = new JSONObject(context);
- if(json.has(variable))
- value = json.get(variable).toString();
- return value;
- }
- private void inicializarGeneradorDeAudiosSingleton(){
- TextToSpeechWatson.getInstance(this.getUserTextToSpeech(), this.getPasswordTextToSpeech(),
- this.getVoiceTextToSpeech(), ftp.getUsuario(), ftp.getPassword(), ftp.getHost(), ftp.getPuerto(), ftp.getCarpeta(), this.getPathAudio(), this.geturlPublicaAudios());
- SpeechToTextWatson.getInstance(this.getUserSpeechToText(), this.getPasswordSpeechToText(),
- this.getVoiceSpeechToText(), ftp.getUsuario(), ftp.getPassword(), ftp.getHost(), ftp.getPuerto(), ftp.getCarpeta(), this.getPathAudio(), this.geturlPublicaAudios());
- }
- private void inicializadorDeLaBD(){
- ConexionALaDB.getInstance(config.getUrl(), config.getNombreBase(), config.getUsuario(), config.getClave());
- }
- public void generarTodosLosAudiosEstaticos(String idCliente){
- System.out.println("El path xml es: "+getPathXML());
- misConversacionesConLosClientes.generarTodosLosAudiosEstaticos(idCliente);
- }
- public void generarTodosLosAudiosEstaticosInternamente(){
- misConversacionesConLosClientes.generarTodosLosAudiosEstaticosInternamente();
- }
- private class HiloParaMonitorearLaBandejaDeCorreos extends Thread{
- public HiloParaMonitorearLaBandejaDeCorreos() {}
- public void run(){
- System.out.println("Hilo para monitorear la bamdeja de mensajes ...");
- try {
- Thread.sleep(20000);
- } catch (InterruptedException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- Usuario usuario = new Usuario("1213434hjhjhjkasdkjasdow", "nimbus", "1213434hjhjhjkasdkjasdow");
- Hashtable<String, Variable> hashtable = new Hashtable<>();
- String[] email = new String[1];
- email[0] = "";
- hashtable.put("email", new Variable("email", email, TiposDeVariables.CONTEXTO));
- String[] celular = new String[1];
- celular[0] = "";
- hashtable.put("numeroCelular", new Variable("numeroCelular", celular, TiposDeVariables.CONTEXTO));
- String[] nombreCliente = new String[1];
- nombreCliente[0] = "";
- hashtable.put("nombreCliente", new Variable("nombreCliente", nombreCliente, TiposDeVariables.CONTEXTO));
- String[] idDelMensaje = new String[1];
- idDelMensaje[0] = "34jqhejqhsajkjahdjahsjdad";
- hashtable.put("idDelMensaje", new Variable("idDelMensaje", idDelMensaje, TiposDeVariables.CONTEXTO));
- String[] tipoDeProceso = new String[1];
- tipoDeProceso[0] = "BandejaDeMensajes";
- hashtable.put("tipoDeProceso", new Variable("tipoDeProceso", tipoDeProceso, TiposDeVariables.CONTEXTO));
- while(true) {
- try {
- System.out.println("Hay correo nuevo.");
- procesarMensajeDeCorreo("nimbus", usuario, "Hola! Como has estado?", hashtable, false, true, "Hola", "sergio@gmail.com");
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- break;
- }
- System.out.println("Se termino el hilo para monitorear la bandeja de mensajes.");
- }
- }
- /*public void generarAudioEstatico(String id){
- System.out.println("El path xml es: "+getPathXML());
- int index = 0;
- try{
- index = Integer.parseInt(id);
- misConversaciones.generarAudiosEstaticosDeUnTema(this.getUserTextToSpeech(), this.getPasswordTextToSpeech(), this.getVoiceTextToSpeech(),
- this.getPathAudio(), ftp.getUsuario(), ftp.getPassword(), ftp.getHost(), ftp.getPuerto(), ftp.getCarpeta(), index, this.geturlPublicaAudios());
- }catch(Exception e){
- System.out.println("Error al generar el audio estatico: "+e.getMessage());
- }
- }
- public void cargarElNombreDeUnSonidoEstaticoEnMemoria(int indexTema, int indexFrase, String idNombreTema, String nombreDelArchivo){
- System.out.println("El path xml es: "+getPathXML());
- try{
- misConversaciones.cargarElNombreDeUnSonidoEstaticoEnMemoria(this.getPathAudio(), this.geturlPublicaAudios(), indexTema, indexFrase, idNombreTema, nombreDelArchivo);
- }catch(Exception e){
- System.out.println("Error al generar el audio estatico: "+e.getMessage());
- }
- }*/
- public String borrarUnaConversacion(String idCliente, String idSesion){
- return misConversacionesConLosClientes.borrarUnaConversacion(idCliente, idSesion);
- }
- public String verTodasLasCoversacionesActivas(String idCliente){
- return misConversacionesConLosClientes.verTodasLasCoversacionesActivas(idCliente);
- }
- public String verTodosLosClientesActivos(String idCliente){
- return misConversacionesConLosClientes.verTodosLosClientesActivos(idCliente);
- }
- public String verLosIdsDeLasConversacionesActivasPorCliente(String idCliente, String idDelCliente){
- return misConversacionesConLosClientes.verLosIdsDeLasConversacionesActivasPorCliente(idCliente, idDelCliente);
- }
- public String borrarTodasLasConversacionesDeUnCliente(String idCliente, String idDelCliente){
- return misConversacionesConLosClientes.borrarTodasLasConversacionesDeUnCliente(idCliente, idDelCliente);
- }
- /*public String verMiTemario(){
- return misConversacionesConLosClientes.verMiTemario();
- }*/
- public String verElHistoricoDeLaConversacion(String idCliente, String idSesion, String fecha){
- return misConversacionesConLosClientes.verElHistoricoDeLaConversacion(idCliente, idSesion, fecha);
- }
- public String buscarConversacionesQueNoHanSidoVerificadasPorTema(String idTema,
- String idCliente) throws ClassNotFoundException, SQLException{
- return historicoDeConversaciones.buscarConversacionesQueNoHanSidoVerificadasPorTema(idTema, idCliente);
- }
- public String cambiarDeEstadoAVerificadoDeLaConversacion(String idUsuario, String idSesion, String fecha,
- String idCliente) throws ClassNotFoundException, SQLException{
- return historicoDeConversaciones.cambiarDeEstadoAVerificadoDeLaConversacion(idUsuario, idSesion, fecha, idCliente);
- }
- public String transformarAudioATexto(File inputstream, String cualAPI, String idCliente){
- return audios.transformarAudioATexto(inputstream, cualAPI, idCliente);
- }
- private void transferirAudiosAlFTP(InputStream in, String idCliente, String nombreFile){
- audios.transferirAudiosAlFTP(in, idCliente, nombreFile);
- }
- public String transformarAudioATexto(File inputStreamMp3, File inputStreamWav, String cualAPI, String idCliente){
- return audios.transformarAudioMp3AWavYLuegoATexto(inputStreamMp3, inputStreamWav, cualAPI, idCliente);
- }
- public String getUser()
- {
- return user;
- }
- public String getPassword()
- {
- return password;
- }
- public void setUser(String user)
- {
- this.user = user;
- }
- public void setPassword(String password)
- {
- this.password = password;
- }
- public String getWorkspaceDeChats() {
- return workspaceDeChats;
- }
- public void setWorkspaceDeChats(String workspaceDeChats) {
- this.workspaceDeChats = workspaceDeChats;
- }
- public String getWorkspaceDeConocerte() {
- return workspaceDeConocerte;
- }
- public void setWorkspaceDeConocerte(String workspaceDeConocerte) {
- this.workspaceDeConocerte = workspaceDeConocerte;
- }
- public String getUserTextToSpeech() {
- return userTextToSpeech;
- }
- public void setUserTextToSpeech(String userTextToSpeech) {
- this.userTextToSpeech = userTextToSpeech;
- }
- public String getPasswordTextToSpeech() {
- return passwordTextToSpeech;
- }
- public void setPasswordTextToSpeech(String passwordTextToSpeech) {
- this.passwordTextToSpeech = passwordTextToSpeech;
- }
- public String getVoiceTextToSpeech() {
- return voiceTextToSpeech;
- }
- public void setVoiceTextToSpeech(String voiceTextToSpeech) {
- this.voiceTextToSpeech = voiceTextToSpeech;
- }
- public String getPathAudio(){
- return pathAudio;
- }
- public void setPathAudio(String path){
- this.pathAudio = path;
- }
- public String geturlPublicaAudios(){
- return urlPublicaAudios;
- }
- public void seturlPublicaAudios(String path){
- this.urlPublicaAudios = path;
- }
- public String getPathXML() {
- return pathXML;
- }
- public void setPathXML(String pathXML) {
- this.pathXML = pathXML;
- }
- /*public double obtenerValorDeGustosDeHoteles(String idCliente) throws Exception
- {
- return misConversaciones.obtenerCliente(idCliente).obtenerValorDeGustosDeHoteles();
- }
- public double obtenerValorDeGustosDeRestaurantes(String idCliente) throws Exception
- {
- return misConversaciones.obtenerCliente(idCliente).obtenerValorDeGustosDeRestaurantes();
- }
- public double obtenerValorDeGustosDeBelleza(String idCliente) throws Exception
- {
- return misConversaciones.obtenerCliente(idCliente).obtenerValorDeGustosDeBelleza();
- }
- public void guardarSiTieneTarjetaCredito(String idCliente, boolean valor) throws Exception
- {
- misConversaciones.obtenerCliente(idCliente).guardarSiTieneTarjetaCredito(valor);
- }
- public Boolean obtenerSiTieneTarjetaCredito(String idCliente) throws Exception
- {
- return misConversaciones.obtenerCliente(idCliente).obtenerSiTieneTarjetaCredito();
- }
- public void guardarSiTieneCuentaAhorros(String idCliente, boolean valor) throws Exception
- {
- misConversaciones.obtenerCliente(idCliente).guardarSiTieneCuentaAhorros(valor);
- }
- public Boolean obtenerSiTieneCuentaAhorros(String idCliente) throws Exception
- {
- return misConversaciones.obtenerCliente(idCliente).obtenerSiTieneCuentaAhorros();
- }*/
- public String getPathXMLAudios() {
- return pathXMLAudios;
- }
- public void setPathXMLAudios(String pathXMLAudios) {
- this.pathXMLAudios = pathXMLAudios;
- }
- public String getUserSpeechToText() {
- return userSpeechToText;
- }
- public void setUserSpeechToText(String userSpeechToText) {
- this.userSpeechToText = userSpeechToText;
- }
- public String getPasswordSpeechToText() {
- return passwordSpeechToText;
- }
- public void setPasswordSpeechToText(String passwordSpeechToText) {
- this.passwordSpeechToText = passwordSpeechToText;
- }
- public String getVoiceSpeechToText() {
- return voiceSpeechToText;
- }
- public void setVoiceSpeechToText(String voiceSpeechToText) {
- this.voiceSpeechToText = voiceSpeechToText;
- }
- public String getApiKeyGoogle() {
- return apiKeyGoogle;
- }
- public void setApiKeyGoogle(String apiKeyGoogle) {
- this.apiKeyGoogle = apiKeyGoogle;
- }
- public String getApiSTT() {
- return apiSTT;
- }
- public void setApiSTT(String apiSTT) {
- this.apiSTT = apiSTT;
- }
- public String getNombreDelAgenteCognitivo() {
- return nombreDelAgenteCognitivo;
- }
- public void setNombreDelAgenteCognitivo(String nombreDelAgenteCognitivo) {
- this.nombreDelAgenteCognitivo = nombreDelAgenteCognitivo;
- }
- public String getIdDelAgenteCognitivo() {
- return idDelAgenteCognitivo;
- }
- public void setIdDelAgenteCognitivo(String idDelAgenteCognitivo) {
- this.idDelAgenteCognitivo = idDelAgenteCognitivo;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement